Вопросы
Как безопасно исправить права на весь веб-корень?
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.
Вся система прав доступа умещается на одной странице. Распечатайте её или держите открытым калькулятор chmod для всего интерактивного.
| -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 | почти всегда ошибка |
| u g o a | user (владелец), группа, остальные, все |
| + - = | добавить, убрать, задать точно |
| 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 dir | setgid на каталоге |
| 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 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 | сам каталог, а не его содержимое |
| getfacl file | показать; + в ls -l означает, что ACL есть |
| setfacl -m u:alice:rw file | дать alice rw |
| setfacl -m d:g:dev:rwx dir | ACL по умолчанию для новых файлов в dir |
| setfacl -b file | удалить все ACL |
x на каталоге = можно войти; r = можно вывести список; w = можно создавать/удалять записи.w на каталоге, а не на файле.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.