LinuxNotes
← Все статьи

Права доступа Linux: chmod без магии 777

Читаем права файлов и каталогов, настраиваем приватные данные и проверяем результат.

Безопасность систем2 мин чтения

Модель доступа

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

Посмотрите текущие права

id
mkdir -p ~/permissions-lab
ls -ld ~/permissions-lab

id показывает пользователя и его группы. У ls -ld первый символ обозначает тип объекта, затем идут три набора прав: r, w и x. Для каталога r позволяет читать список имён, x - проходить к объектам, w вместе с x - создавать и удалять записи.

Приватный каталог

chmod 700 ~/permissions-lab
printf '%s
' 'private note' > ~/permissions-lab/note.txt
chmod 600 ~/permissions-lab/note.txt
ls -ld ~/permissions-lab
ls -l ~/permissions-lab/note.txt

700 оставляет доступ только владельцу. Для файла 600 разрешает владельцу чтение и запись. Остальные пользователи не смогут пройти в каталог обычным способом. Это не защита от root и не шифрование диска.

Символьная форма

chmod u+x ~/permissions-lab/note.txt
chmod u-x ~/permissions-lab/note.txt

Первый пример добавляет владельцу право исполнения, второй убирает. Текстовая заметка не становится осмысленной программой из-за флага x. Для скрипта нужен корректный текст, интерпретатор и, при прямом запуске, строка shebang.

Символьная форма удобна, когда требуется изменить отдельный флаг, сохранив остальные. Числовая форма задаёт набор разрешений целиком.

Права по умолчанию

umask

Маска убирает разрешения при создании новых объектов. Во временном Bash-подпроцессе можно проверить приватную маску:

(umask 077; touch ~/permissions-lab/new-note.txt)
ls -l ~/permissions-lab/new-note.txt

Подпроцесс не меняет маску основного терминала. Пример предполагает отсутствие дополнительных default ACL. Уже существующие файлы umask не меняет.

Если доступ всё равно запрещён

Проверьте владельца файла, права каждого родительского каталога, ACL и режим монтирования. chmod 777 может скрыть исходную причину и открыть данные всем. Не применяйте рекурсивное изменение прав ко всему домашнему каталогу: SSH и другие программы ожидают разные права для разных объектов.

Практическое применение: SSH и вход по ключам.

Документация: GNU chmod.

Читайте дальше