Что значат rwx и цифры 644, 755, 600, как поменять права и владельца, как разложить права на файлы сайта и чем опасен chmod 777.
Содержание
У каждого файла в Linux есть владелец, группа и три набора прав: для владельца, для группы и для всех остальных. Посмотреть их — ls -l:
$ ls -l
-rw-r--r-- 1 ubuntu www-data 1520 Oct 12 10:15 index.php
drwxr-xr-x 3 ubuntu www-data 4096 Oct 12 10:15 uploadsПервый знак — тип: - файл, d папка, l ссылка. Дальше три тройки букв: права владельца (ubuntu), группы (www-data) и всех остальных.
| Буква | У файла | У папки |
|---|---|---|
| r | читать | видеть список файлов |
| w | изменять | создавать, удалять и переименовывать файлы внутри |
| x | запускать | входить в папку и открывать файлы в ней |
Обратите внимание на x у папки: без него не открыть ни один файл внутри, даже если у самого файла права есть.
Цифры: 644, 755, 600
Каждой букве соответствует число: r = 4, w = 2, x = 1. Их сумма — права одной тройки: 7 = rwx, 6 = rw-, 5 = r-x, 4 = r--, 0 = ---. Три цифры подряд — владелец, группа, остальные.
| Права | Буквами | Для чего |
|---|---|---|
| 644 | rw-r--r-- | обычный файл: владелец правит, остальные читают |
| 755 | rwxr-xr-x | папки и скрипты, которые запускают |
| 640 | rw-r----- | настройки с паролями: владелец правит, группа читает, остальные не видят |
| 600 | rw------- | то, что видит только владелец: закрытый ключ, файл с паролем |
| 700 | rwx------ | личная папка, например ~/.ssh |
chmod: поменять права
chmod 644 index.php
chmod 755 deploy.sh
chmod 600 ~/.ssh/id_ed25519Буквами удобнее, когда нужно добавить или убрать одно право, не трогая остальные. u — владелец, g — группа, o — остальные, a — все:
chmod +x deploy.sh # разрешить запуск
chmod g+w uploads # группе — запись
chmod o-rwx config.php # остальным — ничегоКлюч -R меняет права у папки со всем содержимым. Но chmod -R 755 сделает исполняемыми и все файлы, а папкам и файлам нужны разные права. Разведите их так:
find /var/www/example.ru -type d -exec chmod 755 {} +
find /var/www/example.ru -type f -exec chmod 644 {} +Или одной командой: chmod -R u=rwX,go=rX /var/www/example.ru. Большая X даёт запуск только папкам и тем файлам, которые уже были исполняемыми.
chown: сменить владельца
Отдать файл другому пользователю может только администратор, поэтому — через sudo:
sudo chown ubuntu index.php # владелец
sudo chown ubuntu:www-data index.php # владелец и группа
sudo chown -R www-data:www-data uploads # папка со всем содержимымПрава на файлы сайта
Веб-сервер и PHP работают от своего пользователя: в Ubuntu и Debian это www-data, в AlmaLinux у nginx — nginx, у PHP-FPM — apache. Проверить у себя: ps -eo user,comm | grep -E 'nginx|php|apache|httpd'.
Надёжная схема — файлы сайта принадлежат вам, а не веб-серверу. Тогда PHP может их только читать, а писать — лишь в папки, куда сайт складывает загрузки и кэш:
sudo chown -R ubuntu:ubuntu /var/www/example.ru
find /var/www/example.ru -type d -exec chmod 755 {} +
find /var/www/example.ru -type f -exec chmod 644 {} +
sudo chown -R www-data:www-data /var/www/example.ru/wp-content/uploadsЕсли сайт взломают через уязвимость, злоумышленник получит права PHP — и не сможет переписать код сайта. Цена — обновлять движок придётся по SSH, а не кнопкой в админке: для обновлений из админки PHP нужна запись во все файлы.
Почему не 777
Права 777 разрешают изменять файл кому угодно на сервере — любой программе, от любого пользователя. Обычно их ставят, когда «ничего не работает, а с 777 заработало». Но на деле у файла просто не тот владелец, и правильное лечение — chown, а не 777.
Бывает и наоборот: часть программ отказывается работать со слишком открытыми файлами. Например, SSH не примет ключ, если папка ~/.ssh или файл authorized_keys доступны на запись другим, — в журнале будет bad ownership or modes. Правильные права: chmod 700 ~/.ssh и chmod 600 ~/.ssh/authorized_keys.
Permission denied, хотя права верные
- Нет
xна одной из папок по пути.namei -l /var/www/example.ru/index.phpпокажет права на каждом шаге — от корня до файла. - AlmaLinux: мешает SELinux — у файла не та метка. Как исправить — в справочнике AlmaLinux.
- Скрипт не запускается с ошибкой
bad interpreterи^Mв конце — файл сохранён в Windows: Файлы из Windows: окончания строк.
Права на хостинге с cPanel — в отдельной статье: Права на файлы и папки, CGI-скрипты.
Не нашли ответ? Напишите в поддержку — подскажем.


