← Назад к вопросам

Как работает permissions в Linux?

1.3 Junior🔥 302 комментариев
#Linux и администрирование

Комментарии (2)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Механизм управления правами доступа в Linux

В Linux используется классическая дискреционная модель управления доступом (DAC - Discretionary Access Control), где каждый объект файловой системы имеет связанные с ним права доступа (permissions), определяющие, какие операции могут выполнять различные категории пользователей.

Три базовых уровня доступа

Права в Linux разделены на три независимых типа:

  1. Чтение (Read - r) - разрешает просмотр содержимого файла или списка файлов в каталоге
  2. Запись (Write - w) - разрешает модификацию содержимого файла или создание/удаление файлов в каталоге
  3. Выполнение (Execute - x) - разрешает запуск файла как программы или вход в каталог

Три категории пользователей

Права назначаются для трех групп:

  1. Владелец (Owner/User) - пользователь, которому принадлежит файл
  2. Группа (Group) - основная группа, связанная с файлом
  3. Остальные (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

Особые биты прав доступа

Помимо основных прав, существуют три специальных бита:

  1. 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
  1. SGID (Set Group ID - s в позиции выполнения группы) - аналогично SUID, но для группы. Для каталогов: новые файлы наследуют группу каталога:
# Установка SGID на каталог
$ chmod g+s /shared-directory
  1. 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 используются дополнительные механизмы:

  1. ACL (Access Control Lists) - расширенные списки контроля доступа, позволяющие задавать права для конкретных пользователей и групп:
# Установка ACL
$ setfacl -m u:bob:rwx file.txt
$ setfacl -m g:contractors:r-- /data/

# Просмотр ACL
$ getfacl file.txt
  1. SELinux/AppArmor - системы принудительного контроля доступа (MAC - Mandatory Access Control), работающие поверх традиционных прав Linux.

Практические рекомендации по безопасности

  • Следуйте принципу наименьших привилегий - предоставляйте только необходимые права
  • Регулярно проводите аудит прав, особенно для SUID/SGID файлов: find / -type f -perm /6000
  • Для общих каталогов используйте SGID и соответствующие группы, а не открытые права
  • Избегайте использования прав 777 - это антипаттерн, указывающий на проблему в дизайне доступа
  • Для системных файлов и каталогов строго соблюдайте стандартные права, установленные дистрибутивом

Понимание системы прав Linux критически важно для администраторов и DevOps-инженеров, так как это основа безопасности и управления доступом в Unix-подобных системах. Правильная настройка прав предотвращает несанкционированный доступ, защищает целостность данных и обеспечивает корректную работу многопользовательской системы.