Назад | Перейти на главную страницу

Учетная запись пользователя для запуска веб-сайтов в Linux

Я видел много блогов и статей, которые рекомендуют мне запускать сайт не в Linux под пользователем root.

Должен ли я создать другую учетную запись для запуска сайта? Как насчет бэкендов, таких как MySql, как база данных? Могут ли они работать как root, но я все же могу запустить веб-сайт как пользователь не root?

Позволит ли Linux привязать порт localhost к другой учетной записи?

Я использую Ubuntu 10.04 x64 server edition.

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

Apache запускается как root, но порождает детей как другого пользователя. Это указано User и Group в httpd.conf и по умолчанию не является корневым.

Пользователи без полномочий root могут подключаться к портам> 1024.

MySQL не нужно запускать с правами root и работает на порту 3306.

Взято из http://httpd.apache.org/docs/1.3/misc/security_tips.html#serverroot

Обычно Apache запускается пользователем root и переключается на пользователя, определенного в директиве User, для обслуживания обращений. Как и в случае с любой командой, выполняемой root, вы должны позаботиться о том, чтобы она была защищена от модификации пользователями без полномочий root. Не только сами файлы должны быть доступны для записи только root, но также каталоги и родительские файлы всех каталогов.

Например, если вы решите разместить ServerRoot в / usr / local / apache, тогда рекомендуется создать этот каталог как root с помощью таких команд:

mkdir /usr/local/apache
cd /usr/local/apache
mkdir bin conf logs
chown 0 . bin conf logs
chgrp 0 . bin conf logs
chmod 755 . bin conf logs

Предполагается, что /, / usr и / usr / local могут быть изменены только пользователем root. При установке исполняемого файла httpd убедитесь, что он защищен аналогичным образом:

cp httpd /usr/local/apache/bin
chown 0 /usr/local/apache/bin/httpd
chgrp 0 /usr/local/apache/bin/httpd
chmod 511 /usr/local/apache/bin/httpd 

Вы можете создать подкаталог htdocs, который могут изменять другие пользователи - поскольку root никогда не запускает никаких файлов оттуда и не должен создавать файлы там.

Похоже, вы используете debian / ubuntu. По умолчанию, по крайней мере, apache, mysql и postgresql работают от имени менее привилегированных пользователей. Вам по-прежнему нужны пользователи базы данных; один для обычного доступа к сайту и один для миграции схемы - вот что я использую.

Обычно вы должны запускать как можно больше сервисов для пользователей без полномочий root. Причина в том, что если служба каким-либо образом скомпрометирована, процессы в вашей системе могут быть запущены с повышенными привилегиями. Лучший способ, который я нашел в отношении требований к портам, при которых пользователи без полномочий root не могут прослушивать порты меньше 1024, - это использовать IPTABLES с цепочкой PREROUTING в таблице NAT. Таким образом, вы можете поддерживать безопасность при минимально необходимых разрешениях, но при этом отвечать на популярных портах.

Table: nat
Chain PREROUTING (policy ACCEPT)
num  target     prot opt source     destination         
1    REDIRECT   tcp  --  0.0.0.0/0  172.16.1.10  tcp dpt:80 redir ports 8080 

Chain POSTROUTING (policy ACCEPT)
num  target     prot opt source     destination         

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source     destination         
1    REDIRECT   tcp  --  0.0.0.0/0  172.16.1.10  tcp dpt:80 redir ports 8080 

Если вы устанавливаете с использованием официальных пакетов ubuntu - с помощью aptitude или apt-get; пользователь и привилегии устанавливаемой вами службы (например, apache2) будут отсортированы по пакету. У вас не должно быть никаких причин для сворачивания собственного. Сворачивание собственного может фактически нарушить процесс обновления пакета и лишить вас возможности устанавливать исправления безопасности.