Права доступа chmod: чтение, запись, выполнение и umask

Права Linux отвечают не на вопрос «кто знает путь», а на вопрос «какую операцию ядро разрешит конкретному процессу». Для владельца, группы и остальных отдельно задаются чтение, запись и выполнение. У каталогов эти биты имеют особый смысл.

Чтение режима файла

ls -l показывает тип объекта и три тройки rwx. Команда stat выводит числовой режим и владельца без разбора форматированного списка.

mkdir -p /tmp/mode-demo/private
printf 'draft\n' >/tmp/mode-demo/private/note.txt
chmod 640 /tmp/mode-demo/private/note.txt
stat -c 'mode=%a owner=%U group=%G path=%n' /tmp/mode-demo/private/note.txt

640 даёт владельцу read/write, группе read, остальным ничего. Символьная форма показывает намерение: chmod u=rw,g=r,o= file. Она часто понятнее, чем вычисление цифр в уме.

Почему execute у каталога — это traversal

Для обычного файла x разрешает попытку исполнения. Для каталога он разрешает проход к именованному элементу. r у каталога позволяет перечислять имена, а w — менять записи каталога. Можно знать точное имя файла, но получать Permission denied из-за отсутствия x у одного родительского каталога.

chmod 700 /tmp/mode-demo/private
namei -l /tmp/mode-demo/private/note.txt 2>/dev/null || true

Для диагностики проверяйте всю цепочку родителей, а не только конечный файл.

umask задаёт права по умолчанию

Программа запрашивает базовый режим, а процессовая umask убирает из него биты. При umask 027 новый обычный файл обычно получается не шире 640, каталог — не шире 750.

(
  umask 027
  touch /tmp/mode-demo/generated.txt
  mkdir /tmp/mode-demo/generated-dir
  stat -c '%a %n' /tmp/mode-demo/generated.txt /tmp/mode-demo/generated-dir
)

Подоболочка ограничивает изменение umask этим блоком.

Ошибка и диагностика

chmod -R 777 маскирует причину и добавляет запись/исполнение всем пользователям. Вместо этого получите id, stat объекта и родителей, уточните требуемую операцию и измените минимальный бит. Если файл создаёт service, проверьте его пользователя и umask: ручной chmod будет потерян при следующем создании.

Практика

Создайте каталог группы с режимом 750 и файл 640. Предскажите доступ владельца, члена группы и остальных к чтению и изменению. Затем снимите execute с каталога, оставив read, и объясните различие между выводом списка и открытием файла по имени.

Что важно запомнить

Источники