Как избежать использования sudo при работе в /var/www?

Я хочу перестать использовать sudo каждый раз, когда я работаю в /var/www. Как я могу это сделать? Я просто хочу поместить все свои сайты в этот каталог и работать с ними без особых усилий.

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

Смотрите также