Права доступа 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почти никогда не является диагнозом.
Частые вопросы
Почему исполняемый скрипт всё равно не запускается?
Возможны noexec mount, неверный shebang, отсутствующий интерпретатор или запрет на родительском каталоге. Бит x — только одна проверка.
chmod меняет владельца?
Нет. Владелец и группа меняются через chown или chgrp, если у пользователя есть соответствующее право.
Почему режим файла отличается после копирования?
Утилита, файловая система, mount и umask могут влиять на итог. Проверяйте документацию конкретной команды и stat результата.
Связанные исследования
- Confine: как найти нужные системные вызовы и не сломать редкий сценарий — Автоматическое построение seccomp-политик в Confine: статический анализ, неполнота трассировки и собственная модель достижимости с проверкой сценария восстановления.