apache и mod_ruid

 

В кратце – собирается модуль mod_ruid, с помощью которого каждый вирт. хост будет работать под именем своего владельца. Это снимает проблему выставления прав 777, файлы и каталоги будут создаваться с тем же владельцем, которому принадлежит аккаунт.
При автообновлении из админки разного рода Joomla!, WordPress и т.д. больше не будут ругаться на невозможность создать каталог или файл.
Значительно повышается безопасность – можно выставить на каталоги права 750 и 640 на файлы, что исключит возможность доступа пользователей к чужим данным.
Стоит заметить, что производительность немного упадет, но все же это будет быстрее чем при использовании suPHP/CGI.

Ставим mod_ruid на сервер виртуального хостинга под управлением панели DirectAdmin.
Для сборки модуля необходима библиотека libcap.

# yum install libcap-devel # RHEL

или

# aptitude install libcap2-dev # debian

Качаем исходники модуля и собираем

# cd /usr/local/directadmin/custombuild

wget -O mod_ruid2-0.9.7.tar.bz2 "http://downloads.sourceforge.net/project/mod-ruid/mod_ruid2/mod_ruid2-0.9.7.tar.bz2?r=&ts=1335638772&use_mirror=kent"

# tar xvf mod_ruid2-0.9.7.tar.bz2

# cd mod_ruid2-0.9.7/

Читаем README и собираем модуль

# apxs -a -i -l cap -c mod_ruid2.c

Модуль будет собран, проинсталирован и в httpd.conf будет добавлена строка

LoadModule ruid2_module /usr/lib/apache/mod_ruid2.so

Теперь необходимо изменить httpd.conf. Открываем /etc/httpd/conf/httpd.conf, находим строки
User apache
Group apache
и добавляем ниже следующие директивы:

RMode config

RUidGid apache apache

RGroups apache

Копируем шаблоны виртуального хоста:

# cd /usr/local/directadmin/data/templates

# cp virtual_host2* custom/

# cd custom

Открываем шаблон и после |USECANONICALNAME| добавляем следующие директивы:

# SuexecUserGroup |USER| |GROUP|

RMode config

RUidGid |USER| |GROUP|

RGroups apache

Строку с SuexecUserGroup необходимо закоментировать.

Чтобы пользователи могли нормально работать с phpmyadmin / webmail добавим описание директорий с указанием владельца webapps:

<location /phpMyAdmin>

RMode config

RUidGid webapps webapps

RGroups apache

</location>

<location /phpmyadmin>

RMode config

RUidGid webapps webapps

RGroups apache

</location>

<location /squirrelmail>

RMode config

RUidGid webapps webapps

RGroups apache

</location>

Эти изменения нужно сделать во всех 4-х шаблонах. После чего, пересоздаем httpd.conf виртуальных хостов:

# echo “action=rewrite&value=httpd” >> /usr/local/directadmin/data/task.queue

# /usr/local/directadmin/dataskq d800

Проверяем синтаксис конфигурации apache, если все нормально – рестартуем веб-сервер:

# apachectl configtest

Syntax OK

# /etc/init.d/httpd restart

Stopping httpd: Remaining processes: 16003 16118 32155

Stopping httpd: OK

Starting httpd: OK

Смотрим ‘top’ и видим какой пользователь сколько и чего потребляет.

top - 15:03:17 up 76 days,  1:12,  1 user,  load average: 0.19, 0.43, 0.38
Tasks:  68 total,   1 running,  67 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.3%us,  0.0%sy,  0.0%ni, 98.3%id,  1.3%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:    906284k total,   708884k used,   197400k free,   145488k buffers
Swap:  2097144k total,      756k used,  2096388k free,   398276k cached
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
21785 adminco   16   0  162m  42m  26m S   43  4.1   0:14.56 httpd
 4029 adminco   15   0  161m 113m  99m S   31 11.1   4:55.01 httpd
23944 adminco   15   0  161m  29m  12m R   24  2.8   0:01.86 httpd
30611 mysql     15   0  173m 137m 6056 S    8 13.5   7:32.19 mysqld
 7313 adminco   15   0  163m 106m  90m S    5 10.4   4:46.85 httpd
23954 apache    15   0  155m  22m  10m S    4  2.2   0:00.09 httpd
13837 apache    10  -5 64032 6920 1844 S    1  0.7   1:39.20 nginx

Необходимо запретить использование функции dl() в php.ini.

А еще желательно восстановить владельца файлов/каталогов в public_hml
Можно так:

# cd /usr/local/directadmin/scripts ; ./set_permissions.sh user_homes

# find /home/*/domains/*/public_html -type d -print0 | xargs -0 chmod 711

# find /home/*/domains/*/public_html -type f -print0 | xargs -0 chmod 644

# cd /usr/local/directadmin/data/users

# for i in `ls`; do { chown -R $i:$i /home/$i/domains/*/public_html;}; done;

Если используются perl-скрипты, то этим файлам также надо поправить права:

find /home/. -type f -name ‘*.cgi*’ -exec chmod 755 {} \;

find /home/. -type f -name ‘*.pl*’ -exec chmod 755 {} \;

find /home/. -type f -name ‘*.pm*’ -exec chmod 755 {} \;

# chown -R webapps:webapps /var/www/html/

# find /var/www/html -type f -print0 | xargs -0 chmod 644

# find /var/www/html -type d -print0 | xargs -0 chmod 711

 

Теги: ,

Ви повинні залогінитися ,щоб залишити коментар.