Я доповни відповіді rahmu та MV технічним рішенням. Все, що випливає, діє лише для 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 ----) . Дивіться відповідь rahmu, щоб дізнатися більше про режими файлів, це старий, але елегантний механізм.
Щоб уникнути маніпулювання прихованими числами chmod
, ви також можете використовувати цей синтаксис:
chmod -R g+rw your/folder/
Це означає "до групи ( g
), додати +
( rw
) дозволу на читання і запис ( ) в папці your/folder/
, рекурсивно ( -R
)".
У 90% випадків цього має бути достатньо.
Мій бажаний метод: використання ACL (Список контролю доступу)
Іноді першого рішення недостатньо. Я візьму приклад Symfony Framework, який записує в журнал і кешує багато даних. Тому для запису потрібен доступ до відповідної папки.
І chmod
/ chown
методу може бути недостатньо, коли ви паралельно використовуєте консоль Symfony в CLI (під моїм обліковим записом користувача) та Web (користувач веб-сервера). Це спричиняє багато проблем, оскільки Symfony постійно змінює дозволи.
У цьому випадку ми будемо використовувати ACL (Список контролю доступу), що є більш досконалим способом управління дозволами для багатьох систем 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
Я ніколи не мав жодних проблем із цим методом, задоволений чи повернув гроші.