bitlvl
RU

Шпаргалка по chmod и правам доступа

Вся система прав доступа умещается на одной странице. Распечатайте её или держите открытым калькулятор chmod для всего интерактивного.

Помещается на одну вертикальную страницу A4 / Letter; выберите «Сохранить как PDF» в диалоге печати, чтобы оставить себе копию.

Чтение прав

-rwxr-xr-xтип, владелец rwx, группа r-x, остальные r-x
r = 4, w = 2, x = 1сложите в каждой группе → восьмеричная цифра
rwx r-x r-x= 7 5 5 = 755
d l c b p sкаталог, символическая ссылка, символьное устройство, блочное устройство, канал, сокет

Типичные режимы

644файлы: владелец rw, все r
755каталоги, скрипты, бинарники
600 / 700приватный файл / каталог (ключи SSH, .env, ~/.ssh)
664 / 775файл / каталог с записью для группы
2775общий каталог: новые файлы наследуют группу (setgid)
1777/tmp: пишут все, удаляют только владельцы (sticky)
4755бинарник с setuid (passwd, sudo)
777почти всегда ошибка

Символьный chmod

u g o auser (владелец), группа, остальные, все
+ - =добавить, убрать, задать точно
chmod u+x fвладелец может выполнять
chmod go-w fгруппа и остальные теряют запись
chmod a=r fвсем только чтение
chmod u=rwx,g=rx,o= f= 750
chmod -R u=rwX,go=rX dirрекурсивно; X = выполнение только для каталогов и уже исполняемых файлов
chmod g+s dirsetgid на каталоге
chmod +t dirбит sticky
chmod --reference=a bскопировать режим a на b

Специальные биты (ведущая восьмеричная цифра)

4 setuidзапуск от владельца файла; показывается как s в x владельца
2 setgidзапуск от группы; на каталогах: наследование группы; s в x группы
1 stickyв каталогах: удалять может только владелец; t в x остальных
S / Tзаглавная = специальный бит установлен без выполнения (обычно ошибка)

Владение

chown user fileсменить владельца (только root)
chown user:group fileвладелец и группа
chown -R www-data: /var/wwwрекурсивно; пустая группа = основная группа пользователя
chgrp group fileтолько группа (может участник группы)
chown -hизменить саму символическую ссылку, а не цель

umask

umask 022файлы 644, каталоги 755 (по умолчанию)
umask 077файлы 600, каталоги 700 (приватно)
umask 002файлы 664, каталоги 775 (работа в группе)
UMask=0077в секции [Service] systemd

Поиск и исправление

find . -type f -perm -o+wфайлы, доступные на запись всем
find / -perm -4000 -type fбинарники с setuid
find . -type d -exec chmod 755 {} +исправить только каталоги
find . -type f -exec chmod 644 {} +исправить только файлы
stat -c '%a %U %G %n' *восьмеричный режим, владелец, группа, имя
ls -ld dirсам каталог, а не его содержимое

ACL (когда rwx недостаточно)

getfacl fileпоказать; + в ls -l означает, что ACL есть
setfacl -m u:alice:rw fileдать alice rw
setfacl -m d:g:dev:rwx dirACL по умолчанию для новых файлов в dir
setfacl -b fileудалить все ACL

Помните

  • x на каталоге = можно войти; r = можно вывести список; w = можно создавать/удалять записи.
  • Для удаления файла нужен w на каталоге, а не на файле.
  • root игнорирует rwx (но не бит выполнения при запуске).
  • «Permission denied» часто связано с владением; проверьте ls -l, прежде чем делать chmod 777.

Результаты и сообщения этого инструмента выводятся на английском языке.

Вопросы

Как безопасно исправить права на весь веб-корень?

find /var/www -type d -exec chmod 755 {} + и find /var/www -type f -exec chmod 644 {} +, затем chown -R www-data: /var/www. Никогда не делайте chmod -R 777.