Права доступа 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.txt640 даёт владельцу 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, и объясните различие между выводом списка и открытием файла по имени.
Что важно запомнить
- Права проверяются относительно эффективных uid/gid процесса и всей цепочки пути.
- У каталога
xозначает traversal,w— изменение записей,r— список имён. - umask ограничивает начальный режим;
777почти никогда не является диагнозом.