Как работают права доступа в Linux?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Права доступа в Linux определяются для владельца файла/директории, группы и "всех остальных". Каждый из этих субъектов имеет право на чтение (read, r), запись (write, w) и выполнение (execute, x).
Субъекты:
- u (user): Владелец файла/директории.
- g (group): Группа, которой принадлежит файл/директория.
- o (others): Все остальные пользователи системы.
- a (all): Все вышеупомянутые субъекты (владелец, группа, остальные).
Типы прав:
- r (read):
- Для файла: возможность просматривать содержимое.
- Для директории: возможность просматривать список файлов и поддиректорий.
- w (write):
- Для файла: возможность изменять содержимое.
- Для директории: возможность создавать, удалять и переименовывать файлы внутри директории.
- x (execute):
- Для файла: возможность выполнять файл как программу или скрипт.
- Для директории: возможность входить в директорию и получать доступ к ее содержимому (при наличии прав r).
Права доступа отображаются в виде строки из 10 символов при использовании команды ls -l. Первый символ указывает тип объекта (например, - для файла, d для директории). Оставшиеся 9 символов разбиваются на три группы по три символа (rw-):
- Первые три: права владельца.
- Вторые три: права группы.
- Последние три: права остальных.
Пример: -rwxr-xr-- означает:
-: это файл.rwx: владелец имеет права на чтение, запись и выполнение.r-x: группа имеет права на чтение и выполнение.r--: остальные имеют права только на чтение.
Права можно изменять с помощью команды chmod, используя символьное или числовое представление.
Символьное представление:
# Добавить право на запись владельцу для файла file.txt
chmod u+w file.txt
# Забрать право на выполнение у группы и остальных для исполняемого файла script.sh
chmod go-x script.sh
# Установить права владельцу rwx, группе rx, остальным r для файла file.txt
chmod u=rwx,g=rx,o=r file.txt
Числовое (восьмеричное) представление:
Каждому праву соответствует числовое значение:
- r = 4
- w = 2
- x = 1
-
- = 0
Сумма значений определяет права для каждого субъекта. Пример: rwx = 4 + 2 + 1 = 7, r-x = 4 + 0 + 1 = 5, r-- = 4 + 0 + 0 = 4.
# Установить права владельцу rwx (7), группе rx (5), остальным r (4) для файла file.txt
chmod 754 file.txt
Владельца файла/директории можно изменить с помощью команды chown. Группу можно изменить с помощью команды chgrp или chown (синтакcис chown user:group file).
При работе с исполняемыми файлами и директориями важны специальные права:
- SUID (Set User ID): Для исполняемого файла. Процесс, запущенный с SUID-битом, выполняется с правами владельца файла, а не пользователя, который его запустил. Отображается как
sв местеxдля владельца (-rwsr-xr-x). - SGID (Set Group ID):
- Для исполняемого файла: Процесс выполняется с правами группы владельца файла. Отображается как
sв местеxдля группы (-rwxr-sr-x). - Для директории: Новые файлы, созданные в этой директории, наследуют группу директории, а не основную группу пользователя, создавшего файл. Отображается как
sв местеxдля группы (drwxrwsr-x).
- Для исполняемого файла: Процесс выполняется с правами группы владельца файла. Отображается как
- Sticky Bit (Sticky): Для директории. Пользователи могут создавать файлы в директории, но удалять или переименовывать их могут только владелец файла, владелец директории или пользователь root. Отображается как
tв местеxдля остальных (drwxrwxrwt).
Эти специальные права устанавливаются с помощью chmod с префиксом "числа": 4 (SUID), 2 (SGID), 1 (Sticky).
# Установить SUID бит для исполняемого файла
chmod 4755 script.sh # rwx (7) для владельца, rx (5) для группы и остальных, плюс SUID
# Установить SGID бит для директории
chmod 2775 shared_dir # rwxrwx (7) для владельца и группы, rx (5) для остальных, плюс SGID
# Установить Sticky бит для директории
chmod 1777 tmp_dir # rwxrwxrwx (7) для всех, плюс Sticky