На сайте неправильные права на файлы: нет доступа (права 750) к папке upload/
для всех (а это нужно для nginx), у некоторых файлов слишком широкие права на запись (664 или 666, а у некоторых вообще 777), в разных папках сайта во многих местах.
Как это поправить?
Есть комбо-команда. Она устанавливает более-менее (см. в конце подробности) правильные права НА ВСЕ ФАЙЛЫ И ПАПКИ в текущей папке и ниже.
НЕ ЗАПУСКАТЬ ОТ ROOT.
ЗАПУСКАТЬ ТОЛЬКО В ПАПКЕ ПРОЕКТА/САЙТА (не выше!!!) (см. в конце подробности).
Вот сама команда:
# переходим в папку www сайта, и там запускаем
chmod -R u+rwX,g+rX-w,o+rX-w .
После этой команды права на файлы станут примерно 644
, а на папки 755
. На некоторые файлы могут установиться права 755
, если они ранее были исполняемыми.
Вот что делает эта команда:
-R
- рекурсивно поменять праваu+rwX
- пользователю разрешить права на чтение и запись, а также на выполнение-если-необходимо*.g+rX-w
- группе добавить чтение, убрать запись, добавить выполнение-если-необходимо*.o+rX-w
- всем остальным также добавить чтение, убрать запись, добавить выполнение-если-необходимо*..
- менять права от текущей папки.
*
Хитрая штука здесь - это выполнение-если-необходимо, которое задается заглавной буквой X
в указании прав.
+X
значит, что:
- Если это директория, то добавляем права на выполнение (чтобы можно было в нее заходить).
- Если это файл является исполняемым хоть для кого-то (владелец/группа/остальные), то ставим права на выполнение. Например, если были права 654, то после
chmod -R u+rwX,g+rX-w,o+rX-w
права станут 755. - Если ни то, ни то, то не добавляем права на выполнение.
Почему итоговые права не правильные, а только более-менее правильные, и почему запускать только в папке сайта
Потому что:
- Почему только в папке сайта - если какой-то файл намеренно был закрыт от чтения группой или остальными (например,
chmod 600
), то на него все равно будут установлены разрешающие права. Как правило на сайтах все файлы являются общедоступными, поэтому это не проблема в нашем случае. Но для папки.ssh/
, например, это критично - доступ на сервер по ключу перестанет работать с широкими правами в этой папке на чтение. Поэтому команду изменения прав и нужно запускать только в папке сайта, а не выше. - Почему "более-менее правильные" - если у какого-то файла ошибочно были установлены права на исполнение (например, у
*.php
или*.txt
), то файл останется исполняемым. Это не проблема, просто некрасиво.