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

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

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

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

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

5 ответов

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

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

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

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

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

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

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

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