Я хочу перестать использовать sudo
каждый раз, когда я работаю в /var/www
. Как я могу это сделать? Я просто хочу поместить все свои сайты в этот каталог и работать с ними без особых усилий.
Попробуй пройти бота-учителя. Он научит тебя Linux в виде игры: Курсы Linux и DevOPS Бесплатный урок
Большинство ответов здесь написаны не с учетом соображений безопасности. Приятно чувствовать, что бег sudo
каждый раз это не очень мудро. Если вы допустили опечатку (например, один пробел в неправильном месте, например, рекурсивное удаление / var/www/dir
, что означает /
и var/www/dir
, вместо того , чтобы /var/www/dir
—пожалуйста, не пытайтесь), вы можете испортить свою систему.
Примечание: Начиная с Apache 2.4.7 / Ubuntu 14.04, /var/www
был перемещен в /var/www/html
Соответствующим образом измените команды в этом ответе.
Видеть:
Где разместить мой локальный веб-сайт, начиная с версии apache2 2.4.7?
Изменение корневого каталога документа по умолчанию для HTTP-сервера
Плохие идеи:
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-данные. Веб-контент не должен принадлежать этому пользователю, иначе скомпрометированный веб-сервер сможет переписать веб-сайт. Данные, записанные с веб-серверов, будут принадлежать www-data.
Там, где это возможно, делайте нет предоставьте разрешения на запись в www-data
группа. www-data
нужно только уметь читать файлы, чтобы веб-сервер мог их обслуживать. Единственный случай, когда www-data
необходимые разрешения на запись предназначены для каталогов, хранящих загружаемые файлы, и других мест, которые необходимо записать.
Решение 1
Добавьте себя в www-data
сгруппируйте и установите бит setgid на /var/www
каталог таким образом, чтобы все вновь созданные файлы также наследовали эту группу.
sudo gpasswd -a "$USER" www-data
Исправьте ранее созданные файлы (при условии, что вы являетесь единственным пользователем /var/www
):
sudo chown -R "$USER":www-data /var/wwwfind /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
Если в вашем домашнем каталоге нет бита выполнения (descend), установленного для other
(по соображениям безопасности) измените его группу на www-data
, но установите только бит выполнения (нет чтения /записи). Сделайте то же самое для ~/projects
папка, поскольку она может содержать другие проекты, кроме www. (Вам не нужно sudo
если вы ранее добавили своего пользователя в www-data
группа.)
sudo chgrp www-data ~ ~/projectschmod 710 ~ ~/projects
Установите для группы значение www-data
на ~/projects/foo
и разрешить веб-серверу читать и записывать файлы и файлы + каталоги и спускаться в каталоги:
sudo chgrp www-data ~/projects/foofind ~/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
.