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

162

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

    
задан TaylorOtwell 01.06.2011 в 03:43
источник

8 ответов

229

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

Some web servers run as www-data. Web content should not be owned by this user, or a compromised web server would be able to rewrite a web site. Data written out by web servers will be owned by 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

Если ваш домашний каталог не имеет бита выполнения (descend), установленного для 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 .

См. также

  • Права доступа: как Apache может получить доступ к файлам в моем домашнем каталоге?
  • Причины, по которым / var / www не должны иметь chmod 777
ответ дан Lekensteyn 01.06.2011 в 09:48
источник
7

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

    
ответ дан fragos 01.06.2011 в 07:06
6

Если вы создаете / 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 , вторая строка очищает все файлы с испорченным правом собственности, а третья делает ее так, чтобы все пользователи, являющиеся членами группы www-data , могли читать и писать все файлов в /var/www .

    
ответ дан Azendale 01.07.2011 в 00:41
5

Этикет

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

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

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

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

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

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

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

Dos

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

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

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

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

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

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

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

ответ дан thomasrutter 23.11.2016 в 23:43
5

Все просто. Вам также не нужно включать 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 :)

    
ответ дан Gayan Weerakutti 06.08.2016 в 07:49
1

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

    
ответ дан Daniel 01.06.2011 в 03:59
1

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

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

    
ответ дан user unknown 01.06.2011 в 15:49
-1

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

sudo chown -R pi /var/www

, то перезапуск apache

sudo service apache2 restart
    
ответ дан Nathan Dickson 23.11.2016 в 23:27

Ознакомьтесь с другими вопросами по меткам