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


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


160
2018-06-01 03:43


Источник


Вы используете apache? - Rinzwind
После прочтения здесь это также поможет в разрешении: askubuntu.com/questions/20105/... - Luis Alvarado♦
Еще одним способом обеспечения безопасности является продолжение использования sudo -u www-data но ограничьте себя sudoers файл, чтобы иметь возможность sudo www-data (а не sudo root). Видеть serverfault.com/questions/295429/... - Simon Woodside


Ответы:


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

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


227
2018-06-01 09:48



Что вы думаете о www-сессии в терминале sudo su www-data? В сочетании с по-разному цветным приглашением, чтобы сделать его более очевидным, что это оболочка другого пользователя, и политика всегда ставить соответствующий xterm на - например - виртуальный рабочий стол 4, чтобы вы привыкли к нему, чтобы Во избежание путаницы? - user unknown
@user неизвестен: если вы все делаете на терминале, так как у вас есть четкое разделение между учетными записями пользователей. Но это не сработает, если вы используете графическую программу, например gedit, Я никогда не исследовал, безопасен ли запуск программы GUI под другим пользователем в текущем сеансе или нет, это был бы интересный вопрос. - Lekensteyn
можете ли вы разделить свои 2 решения на отдельные ответы, чтобы их можно было избирать / выбирать независимо? - ImaginaryRobots
@imaginaryRobots: если бы я собирался публиковать различные решения для каждого вопроса, Askubuntu был бы заполнен ответами из трех строк. Я сохраню это, как если бы вы не смогли убедить меня разбить его. - Lekensteyn
@berbt setfacl -d u::rwX,g::rX /var/www имеет забавный эффект, что режим по умолчанию становится 0750 (или 0640), даже если umask равен нулю. Это может быть хорошей идеей, если вы хотите избежать файлов, записываемых в мире, но если /var/www уже недоступен миру, он не нужен. - Lekensteyn


Вместо того, чтобы хранить мои веб-сайты в / var / www, я размещаю ссылки на сайты, которые находятся в моей домашней папке. Я могу свободно редактировать или добавлять страницы на свои сайты. Когда я доволен изменениями, я затем передаю FTP хостинговой компании, где мое доменное имя связывается.


6
2018-06-01 07:06



Это разумная идея. - thomasrutter


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

sudo adduser <username> www-data
sudo chown -R www-data:www-data /var/www
sudo chmod -R g+rw /var/www

Затем вы сможете редактировать /var/www/ файлы без хлопот.

Первая строка добавляет вас к www-data group, вторая строка очищает все файлы с испорченной собственностью, а третья делает так, чтобы все пользователи, являющиеся членами www-data группа может читать и записывать все файлы в /var/www,


6
2017-07-01 00:41



Это очень плохая идея для безопасности, и этот совет не следует соблюдать по причинам, объясняемым в других ответах. Предполагается, что www-данные будут непривилегированный группа, без доступа на запись. - thomasrutter


Этикет

  • Не устанавливайте права доступа к файлам 777 (Мир перезаписываемые)

    Это существенный недостаток безопасности, особенно если вы включаете серверные скрипты, такие как PHP. Непривилегированные процессы не должны записываться в файлы, которые могут повлиять на веб-сайт, или, в случае использования скриптов на стороне сервера, выполнить произвольный код.

  • Не добавляйте себя в качестве члена WWW-данные группе и предоставить права на запись

    Цель этой группы состоит в том, что она является непривилегированный чтобы серверные процессы беги как. Они должны иметь доступ только к файлам веб-сайта, где это возможно, по тем же причинам, что и выше.

  • Не изменяйте разрешения процессов Apache

    Процессы дочерних процессов Apache выполняются как www-data пользователя и группы по умолчанию, и это не должно изменяться. Это всего лишь способ не дать им права на запись в файловую систему.

    В определенных обстоятельствах вы хотите, чтобы ваши серверные сценарии могли записывать файлы, и в этом случае только эти файлы должны быть доступны для записи www-data и необходимо принять меры для обеспечения безопасности.

ДОС

  • Установите файлы, которые будут принадлежать вам самим.

    Если вы являетесь единственным или обычным, чтобы модифицировать определенные файлы на веб-сайте, то имеет смысл просто взять на себя ответственность за эти файлы. Установите владельца <your username>,

    Вам не нужно изменять разрешения сервера для этого, так как сервер будет продолжать получать доступ только для чтения, даже если файлы принадлежат вам.

  • Выберите разумное место для размещения файлов (используя DocumentRoot)

    Если /var/www не имеет смысла, вы можете разместить их в другом месте. Если они специфичны для вашей собственной разработки или тестирования, вы можете разместить их в своем домашнем каталоге. Или вы можете настроить некоторые каталоги в /srv,

  • Если вы хотите дать группа писать, создавать новый группа для этой цели

    Не используйте повторно системную группу, потому что они, как правило, предназначены для доступа к ним в настоящее время и не более, по соображениям безопасности.


5
2017-11-23 23:43





Все просто. Вам также не нужно включать apache 'UserDir' (не рекомендуется) и не вмешиваться в группы 'www-data' (группа apache в случае с Fedora)

Просто создайте каталог проекта внутри /var/www/html

cd /var/www/html
sudo mkdir my_project

Затем просто запустите каталог проекта для своего пользователя.

sudo chown your_username my_project

Теперь вы можете начать работать в своей папке проекта как обычный пользователь с любым редактором, IDE по вашему выбору. Больше не надо sudos :)


5
2017-08-06 07:49



+1 Это то, что я делаю: изменение собственности не /var/www но и подкаталогов. - fkraiem


chmod в / var на www, чтобы позволить владельцу доступа, и chown, чтобы убедиться, что вы его обладаете. Наверное, глупая идея, но это определенно сработает.


1
2018-06-01 03:59



Не глупая идея, это разумная идея безопасности. Примечание. Вам не нужно (и не должно) изменять разрешения /var, просто /var/www и / или его содержимое. - thomasrutter


Вы можете начать www-сеанс в терминале посредством

sudo su www-data

В сочетании с разноцветным приглашением *, чтобы сделать его более очевидным, что это оболочка другого пользователя, и политика всегда ставить соответствующий xterm (и редактор и т. Д.) На, например, на виртуальный рабочий стол 4, так что вы привыкаете к нему, чтобы избежать путаницы.

*) Для разного цвета приглашения с символом differnt создайте файл / etc / prompt, например:

# PROMPTING
#       When  executing  interactively, bash displays the primary prompt PS1 when it is ready to read a command, and the sec-
#       ondary prompt PS2 when it needs more input to complete a command.  Bash allows these prompt strings to be  customized
#       by inserting a number of backslash-escaped special characters that are decoded as follows:
#              \a     an ASCII bell character (07)
#              \d     the date in "Weekday Month Date" format (e.g., "Tue May 26")
#              \D{format}
#                     the  format is passed to strftime(3) and the result is inserted into the prompt string; an empty format
#                     results in a locale-specific time representation.  The braces are required
#              \e     an ASCII escape character (033)
#              \h     the hostname up to the first `.'
#              \H     the hostname
#              \j     the number of jobs currently managed by the shell
#              \l     the basename of the shell's terminal device name
#              \n     newline
#              \r     carriage return
#              \s     the name of the shell, the basename of $0 (the portion following the final slash)
#              \t     the current time in 24-hour HH:MM:SS format
#              \T     the current time in 12-hour HH:MM:SS format
#              \@     the current time in 12-hour am/pm format
#              \A     the current time in 24-hour HH:MM format
#              \u     the username of the current user
#              \v     the version of bash (e.g., 2.00)
#              \V     the release of bash, version + patchelvel (e.g., 2.00.0)
#              \w     the current working directory
#              \W     the basename of the current working directory
#              \!     the history number of this command
#              \#     the command number of this command
#              \$     if the effective UID is 0, a #, otherwise a $
#              \nnn   the character corresponding to the octal number nnn
#              \\     a backslash
#              \[     begin a sequence of non-printing characters, which could be used to embed a terminal  control  sequence
#                     into the prompt
#              \]     end a sequence of non-printing characters
#
#       The  command  number and the history number are usually different: the history number of a command is its position in
#       the history list, which may include commands restored from the history file (see HISTORY below),  while  the  command
#       number  is  the  position in the sequence of commands executed during the current shell session.  After the string is
#
# colors:
# \[...\]   wird benötigt, damit die shell weiß, daß hier kein printable output ist, und die Umbrüche richtig plaziert.
#
# ANSI COLORS
CRE="\[
[K\]"
NORMAL="\[[0;39m\]"
# RED: Failure or error message
RED="\[[1;31m\]"
# GREEN: Success message
GREEN="\[[1;32m\]"
# YELLOW: Descriptions
YELLOW="\[[1;33m\]"
# BLUE: System messages
BLUE="\[[1;34m\]"
# MAGENTA: Found devices or drivers
MAGENTA="\[[1;35m\]"
# CYAN: Questions
CYAN="\[[1;36m\]"
# BOLD WHITE: Hint
WHITE="\[[1;37m\]"
#
# default:
# postgres, oracle, www-data
#
# PS1=$BLUE"machine]->"$NORMAL\\w"$BLUE ø $NORMAL"
PS1=$BLUE"machine]:"$NORMAL\\w"$BLUE > $NORMAL"
#
# root, stefan:
#
case "$UID" in
    '0')
        PS1=$RED"machine:"$NORMAL\\w"$RED # $NORMAL"
    ;;
    '1000')
    PS1=$GREEN"machine:"$BLUE\\w$YELLOW" > "$NORMAL
    ;;
#    default)
#    ;;
esac

и источник из /etc/bash.bashrc например.

В качестве дополнительного инструмента для разграничения вы всегда можете редактировать свои файлы с помощью псевдонима «edit» или символической ссылки, которая указывает, в зависимости от вашей личности (taylor / www-data) на gedit или mousepad, vim или pico. Или вы можете использовать разные профили редактора, по крайней мере, в gedit вы можете настроить свои предпочтения на черный текст на белом фоне или белом тексте на черном фоне, например.

У меня есть такая политика для работы с правами root, поэтому я не уверен, насколько она хороша для работы с www-данными. В сочетании с ssh-сессиями для разных хостов, у которых есть свои собственные подсказки, это не мешало мне иногда ошибаться, но если это происходит, я быстро понимаю, что не так, и это происходит редко.

Примечание. Сценарий подсказки частично является копией справочной страницы bash.


1
2018-06-01 15:49



Это будет работать и не будет (если будет использовано тщательно) негативно повлиять на безопасность, но может быть не самым простым решением. Это действительно приемлемое решение для некоторых людей. - thomasrutter


На Эта страница моего сайта Я описываю команды для изменения разрешения в /var/www между apache и пользователем pi, но

sudo chown -R pi /var/www

затем перезапуск apache

sudo service apache2 restart

-1
2017-11-23 23:27



Ссылка теперь работает - Gadgetroid