Більшість відповідей тут не написані з урахуванням безпеки. Добре почувати, що 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
.
Дивитися також