Большинство ответов здесь написаны не с точки зрения безопасности. Приятно чувствовать, что бегать 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-данные. Веб-контент не должен принадлежать этому пользователю, иначе скомпрометированный веб-сервер сможет переписать веб-сайт. Данные, записанные веб-серверами, будут принадлежать www-данным.
Где это возможно, не предоставляйте права на запись 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/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.
Смотрите также