Я дополню ответы Рахму и М.В. техническим решением. Все, что следует, действительно только для UNIX-подобных систем.
Прокрутите раздел chmod / chown для примера, используя ACL - более мощный инструмент, чем режимы файлов UNIX.
Поиск имени пользователя вашего веб-сервера
Во-первых, вам нужно знать имя пользователя, под которым работает ваш веб-сервер. Если вы используете Apache, это может быть apache
или httpd
, www-data
и т. Д. На большинстве подобных Debian систем Apache есть www-data
. Для nginx, как правило, это также www-data
.
Чтобы проверить это, попробуйте:
ps aux | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\ -f1
Убедитесь, что имя пользователя, которое возвращает эта команда, является логичным (например, я использую nginx 99% времени, но эта команда возвращает tomcat7
, веб-сервер Java, который я установил один раз) .
Предоставление разрешений веб-серверу: использование chmod
иchown
Выполнение chmod
666 или 777 (решение для такого рода проблем в плохих документациях / руководствах) может волшебным образом заставить вещи работать, но небезопасно. Предоставление разрешений 666 или 777 даст доступ к «другим». Так что не только Apache, но также grandmother
и nsa
(при условии, что эти учетные записи пользователей существуют на вашем компьютере - но на самом деле нет, пожалуйста, избегайте этого, если это не только для тестирования / устранения неполадок).
Лучше быть более конкретным и дать разрешения только вам и Apache. Измените группу ваших файлов, чтобы предоставить полный контроль над вашими файлами веб-серверу. Для этого рекурсивно измените владельца:
chown -R www-data:www-data your/folder/
Но, скорее всего, вы можете сохранить полный доступ к своим файлам, изменив только группу:
chown -R yourusername:www-data your/folder/
Затем сделайте все возможное, chmod
чтобы дать группе www-data
те же права, что и у вас. Например, если текущий режим равен 640 (6 для вас, 4 для www-данных, 0 для других, переводя на -rw-r -----) , установите его на 660 (6 для вас, 6 для www- данные, 0 для других, перевод на -rw-rw ----) . Посмотрите ответ Рахму, чтобы узнать больше о файловых режимах, это старый, но элегантный механизм.
Чтобы избежать манипуляции с загадочными числами chmod
, вы также можете использовать этот синтаксис:
chmod -R g+rw your/folder/
Это означает, что «для группы ( g
), добавить +
( rw
) разрешения на чтение и запись ( ) для папки your/folder/
, рекурсивно ( -R
)».
В 90% случаев этого должно быть достаточно.
Мой предпочтительный метод: использование ACL (Access Control List)
Иногда первого решения недостаточно. Я возьму пример Symfony Framework, который регистрирует и кэширует много данных. Так что для этого нужен доступ на запись в соответствующую папку.
И метод chmod
/ chown
может оказаться недостаточным, если вы параллельно используете консоль Symfony в CLI (под моей учетной записью пользователя) и в Интернете (пользователь веб-сервера). Это вызывает много проблем, потому что Symfony постоянно изменяет разрешения.
В этом случае мы будем использовать ACL (Access Control List), который является более продвинутым способом управления разрешениями во многих системах UNIX.
Вот команды, приведенные в официальной документации Symfony ( пожалуйста, измените app/cache
и app/logs
под свои нужды ):
В системе, которая поддерживает chmod +a
(т.е. не Debian / Ubuntu)
sudo chmod +a "www-data allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs
sudo chmod +a "`whoami` allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs
В системе, которая не поддерживает chmod +a
(чаще всего)
Вам понадобится setfacl
инструмент; возможно, он установлен в вашей системе по умолчанию, поэтому попробуйте setfacl -v
проверить, доступна ли команда.
Если команда недоступна и вы используете Ubuntu 14.04+, вам просто нужно установить инструмент:
sudo apt install acl
В противном случае следуйте документации по вашей ОС, потому что вам может потребоваться изменить способ монтирования вашего раздела ( документация по Ubuntu здесь ).
И вот мы здесь:
sudo setfacl -R -m u:"www-data":rwX -m u:`whoami`:rwX app/cache app/logs
sudo setfacl -dR -m u:"www-data":rwX -m u:`whoami`:rwX app/cache app/logs
У меня никогда не было проблем с этим методом, доволен или ваши деньги обратно.