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