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