Как работает permissions в Linux?
Комментарии (2)
Ответ сгенерирован нейросетью и может содержать ошибки
Механизм управления правами доступа в Linux
В Linux используется классическая дискреционная модель управления доступом (DAC - Discretionary Access Control), где каждый объект файловой системы имеет связанные с ним права доступа (permissions), определяющие, какие операции могут выполнять различные категории пользователей.
Три базовых уровня доступа
Права в Linux разделены на три независимых типа:
- Чтение (Read -
r) - разрешает просмотр содержимого файла или списка файлов в каталоге - Запись (Write -
w) - разрешает модификацию содержимого файла или создание/удаление файлов в каталоге - Выполнение (Execute -
x) - разрешает запуск файла как программы или вход в каталог
Три категории пользователей
Права назначаются для трех групп:
- Владелец (Owner/User) - пользователь, которому принадлежит файл
- Группа (Group) - основная группа, связанная с файлом
- Остальные (Others) - все остальные пользователи системы
Представление прав в символьном и числовом формате
Права отображаются в виде 10 символов при использовании команды ls -l:
$ ls -l script.sh
-rwxr-xr-- 1 alice developers 2048 Jan 15 10:30 script.sh
Здесь -rwxr-xr-- показывает:
- Первый символ
-- тип файла (дефис означает обычный файл) - Следующие три
rwx- права владельца (аллис может читать, писать и выполнять) - Следующие три
r-x- права группы developers (могут читать и выполнять, но не писать) - Последние три
r--- права остальных (только чтение)
Восьмеричное (числовое) представление использует трехразрядное число, где каждый бит соответствует праву:
- 4 = чтение (r)
- 2 = запись (w)
- 1 = выполнение (x)
# Установка прав 755 (rwxr-xr-x)
$ chmod 755 script.sh
# Эквивалентная символьная запись
$ chmod u=rwx,g=rx,o=rx script.sh
Особые биты прав доступа
Помимо основных прав, существуют три специальных бита:
- SUID (Set User ID -
sв позиции выполнения владельца) - при выполнении файла процесс получает права владельца файла, а не запустившего пользователя:
# Пример: passwd имеет SUID для root
$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 59976 Nov 24 2022 /usr/bin/passwd
- SGID (Set Group ID -
sв позиции выполнения группы) - аналогично SUID, но для группы. Для каталогов: новые файлы наследуют группу каталога:
# Установка SGID на каталог
$ chmod g+s /shared-directory
- Sticky Bit (
tв позиции выполнения остальных) - для каталогов: пользователи могут удалять только свои собственные файлы:
# Классический пример - /tmp
$ ls -ld /tmp
drwxrwxrwt 15 root root 4096 Jan 15 10:45 /tmp
Управление правами: ключевые команды
chmod- изменение прав доступа:
# Рекурсивное изменение прав для каталога
$ chmod -R 750 /data/project/
# Добавление права на выполнение для всех
$ chmod a+x script.sh
chown- изменение владельца и группы:
# Изменение владельца
$ chown alice:developers file.txt
# Рекурсивное изменение владельца и группы
$ chown -R alice:developers /project/
umask- маска прав по умолчанию:
# Просмотр текущей umask
$ umask
0022 # Новые файлы: 644, каталоги: 755
# Установка umask
$ umask 0027 # Файлы: 640, каталоги: 750
Права для каталогов: особые семантики
Для каталогов права имеют специфическое значение:
- Чтение (r) - возможность просмотра списка файлов (но не их содержимого)
- Запись (w) - возможность создавать, удалять, переименовывать файлы в каталоге (требуется также право на выполнение)
- Выполнение (x) - возможность "войти" в каталог и получить доступ к файлам внутри
# Практический пример настройки прав каталога
$ mkdir /shared
$ chmod 1770 /shared # drwxrwx--t - владелец и группа имеют полный доступ, остальные - нет, установлен sticky bit
$ chown alice:developers /shared
Современные расширения прав
В современных системах Linux используются дополнительные механизмы:
- ACL (Access Control Lists) - расширенные списки контроля доступа, позволяющие задавать права для конкретных пользователей и групп:
# Установка ACL
$ setfacl -m u:bob:rwx file.txt
$ setfacl -m g:contractors:r-- /data/
# Просмотр ACL
$ getfacl file.txt
- SELinux/AppArmor - системы принудительного контроля доступа (MAC - Mandatory Access Control), работающие поверх традиционных прав Linux.
Практические рекомендации по безопасности
- Следуйте принципу наименьших привилегий - предоставляйте только необходимые права
- Регулярно проводите аудит прав, особенно для SUID/SGID файлов:
find / -type f -perm /6000 - Для общих каталогов используйте SGID и соответствующие группы, а не открытые права
- Избегайте использования прав
777- это антипаттерн, указывающий на проблему в дизайне доступа - Для системных файлов и каталогов строго соблюдайте стандартные права, установленные дистрибутивом
Понимание системы прав Linux критически важно для администраторов и DevOps-инженеров, так как это основа безопасности и управления доступом в Unix-подобных системах. Правильная настройка прав предотвращает несанкционированный доступ, защищает целостность данных и обеспечивает корректную работу многопользовательской системы.