Більшість відповідей тут не написані з урахуванням безпеки. Добре почувати, що sudoщоразу бігати не дуже мудро. Якщо ви робите помилку (наприклад, пробіл на одному місці в неправильному місці: sudo rm -rf / var/www/dir не виконуйте! ), Ви можете забруднити вашу систему.
Примітка. Починаючи з Apache 2.4.7 / Ubuntu 14.04, /var/wwwбуло переміщено відповідно до /var/www/htmlналаштування команд у цій відповіді.
Побачити:
Погані ідеї:
chmod 777(sagarchalise) - це дозволяє кожному, хто має доступ до вашої системи, записувати в каталоги та файли і тим самим дозволяє зловмиснику виконувати будь-який код під www-dataкористувачем
chgrp -R www-data $HOME(cob) - це дозволяє www-dataчитати або записувати будь-які файли в домашній каталог. Це не має на увазі правила найменшого привілею
chown -R $USER:$USER /var/www(kv1dr) - якщо світ не прочитав дозволи /var/www, веб-сервер, що працює під ним www-data, не зможе читати (обслуговувати) файли. Якщо файл є загальнодоступним простим HTML-документом, це може бути проблемою, якщо світ може прочитати файл. Але якщо файл - це PHP-файл, що містить паролі, він є.
ПРИМІТКА . У наведених нижче рішеннях я надав www-dataпільги на запис. Однак, /usr/share/doc/base-passwd/users-and-groups.txt.gzзазначено:
www-дані
Деякі веб-сервери працюють як www-data. Цей веб-контент не повинен належати цьому користувачеві, або компрометований веб-сервер зможе переписати веб-сайт. Дані, виписані веб-серверами, будуть належати www-data.
По можливості не надайте www-dataгрупі дозволів на запис . www-dataпотрібно лише вміти читати файли, щоб веб-сервер міг їх обслуговувати. Єдиний випадок, коли www-dataпотрібні дозволи на запис - це каталоги, що зберігають завантаження та інші місця, які потрібно записати.
Рішення 1
Додайте себе до www-dataгрупи та встановіть заданий біт у /var/wwwкаталозі таким чином, щоб усі новостворені файли успадковували і цю групу.
sudo gpasswd -a "$USER" www-data
Виправте створені раніше файли (припускаючи, що ви є єдиним користувачем /var/www):
sudo chown -R "$USER":www-data /var/www
find /var/www -type f -exec chmod 0660 {} \;
sudo find /var/www -type d -exec chmod 2770 {} \;
(навіть безпечніше: користуватися веб-сервером 640або 2750вручну, chmod g+w file-or-dirякий потрібно писати)
Рішення 2
Створіть символьне посилання кожного проекту до домашнього каталогу. Скажіть, що ваш проект розташований за адресою, ~/projects/fooі ви хочете, щоб його розмістили на /var/www/foo, запустіть:
sudo ln -sT ~/projects/foo /var/www/foo
Якщо у вашому домашньому каталозі не встановлено біт виконання (спадання) other(з міркувань безпеки), змініть групу його на www-data, але встановіть лише біт виконання (немає читання / запису). Зробіть те ж саме для ~/projectsпапки, оскільки вона може містити інші проекти, крім www. (Вам не потрібно, sudoякщо ви раніше додавали свого користувача до www-dataгрупи.)
sudo chgrp www-data ~ ~/projects
chmod 710 ~ ~/projects
Встановіть групу www-dataна ~/projects/fooі дозволяють веб - сервера для читання і запису для файлів і файлів + каталогів і спускається в каталоги:
sudo chgrp www-data ~/projects/foo
find ~/projects/foo -type f -exec chmod 660 {} \;
find ~/projects/foo -type d -exec chmod 2770 {} \;
Ще безпечніше: використовуйте 640 та 2750 за замовчуванням та вручну chmod-файли та каталоги, які потрібно писати користувачем веб-сервера. Біт setgid слід додавати лише в тому випадку, якщо ви хочете, щоб кожен новостворений файл ~/projects/fooбув доступний групі.
Відтепер ви можете отримувати доступ до свого сайту за адресою http://localhost/fooта редагувати файли свого проекту ~/projects/foo.
Дивитися також