безопасность,open_basedir,safemode (apache22+suexec+fastcgi)

Проблемы с установкой, настройкой и работой системных и сетевых программ.

Модераторы: GRooVE, alexco

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
jeno
рядовой
Сообщения: 11
Зарегистрирован: 2009-11-30 23:28:15
Откуда: Украина - Киев

безопасность,open_basedir,safemode (apache22+suexec+fastcgi)

Непрочитанное сообщение jeno » 2009-12-04 16:20:48

Добрый день.

В Jail поднял хостинг по статье:
http://www.lissyara.su/articles/freebsd ... d_fastcgi/

С первого раза не получилось (php скрипты висели), но потом это исправил (путаница была с правами + suexec должен был запускаться от юзера www, а apache у меня запускался от юзера apache..это исправил вроде)

Так вот, все работает, РНР собрался правильно, пробую через НТТР какой-то файл запустить, выполняется верно...

вот что получается после запуска какого-то скрипта:
# ps -aux | grep php-cgi

Код: Выделить всё

my-host 22091  0.0  0.3 16824  9284  ??  SJ   11:36AM   0:00.04 /usr/local/bin/php-cgi
my-host 62644  0.0  0.3 16824  9292  ??  SJ   11:54AM   0:00.03 /usr/local/bin/php-cgi
my-host 63926  0.0  0.3 16824  9176  ??  IsJ  12:29PM   0:00.02 /usr/local/bin/php-cgi
my-host 63927  0.0  0.3 16824  9220  ??  IJ   12:29PM   0:00.00 /usr/local/bin/php-cgi
my-host 63928  0.0  0.3 16824  9340  ??  IJ   12:29PM   0:00.00 /usr/local/bin/php-cgi
my-host 63929  0.0  0.3 16824  9220  ??  IJ   12:29PM   0:00.00 /usr/local/bin/php-cgi
my-host 63930  0.0  0.3 16824  9292  ??  IJ   12:29PM   0:00.00 /usr/local/bin/php-cgi
# sockstat | grep /var/run/fastcg

Код: Выделить всё

my-hostphp-cgi    63930 0  stream /var/run/fastcgi/dynamic/055a7007326b77460dd216b4a60f2bcb
my-hostphp-cgi    63929 0  stream /var/run/fastcgi/dynamic/055a7007326b77460dd216b4a60f2bcb
my-hostphp-cgi    63928 0  stream /var/run/fastcgi/dynamic/055a7007326b77460dd216b4a60f2bcb
my-hostphp-cgi    63927 0  stream /var/run/fastcgi/dynamic/055a7007326b77460dd216b4a60f2bcb
my-hostphp-cgi    63926 0  stream /var/run/fastcgi/dynamic/055a7007326b77460dd216b4a60f2bcb
apache   httpd      62716 11 stream /var/run/fastcgi/dynamic/055a7007326b77460dd216b4a60f2bcb
my-hostphp-cgi    62644 0  stream /var/run/fastcgi/dynamic/055a7007326b77460dd216b4a60f2bcb
my-hostphp-cgi    62644 3  stream /var/run/fastcgi/dynamic/055a7007326b77460dd216b4a60f2bcb
my-hostphp-cgi    22091 0  stream /var/run/fastcgi/dynamic/055a7007326b77460dd216b4a60f2bcb
my-hostphp-cgi    22091 3  stream /var/run/fastcgi/dynamic/055a7007326b77460dd216b4a60f2bcb
# ps -aux | grep http

Код: Выделить всё

root      62715  0.0  0.1  7196  3812  ??  SsJ  11:54AM   0:00.04 /usr/local/sbin/httpd -DNOHTTPACCEPT
apache    62716  0.0  0.1  7132  3780  ??  IJ   11:54AM   0:00.00 /usr/local/sbin/httpd -DNOHTTPACCEPT
apache    63896  0.0  0.1  7196  3928  ??  IJ   12:25PM   0:03.83 /usr/local/sbin/httpd -DNOHTTPACCEPT
apache    63897  0.0  0.1  7196  3940  ??  IJ   12:25PM   0:03.35 /usr/local/sbin/httpd -DNOHTTPACCEPT
apache    63898  0.0  0.1  7196  3876  ??  IJ   12:25PM   0:03.03 /usr/local/sbin/httpd -DNOHTTPACCEPT
apache    63899  0.0  0.1  7196  3876  ??  IJ   12:25PM   0:03.02 /usr/local/sbin/httpd -DNOHTTPACCEPT
apache    63900  0.0  0.1  7196  3928  ??  IJ   12:25PM   0:02.86 /usr/local/sbin/httpd -DNOHTTPACCEPT
apache    63901  0.0  0.1  7196  3876  ??  IJ   12:25PM   0:02.85 /usr/local/sbin/httpd -DNOHTTPACCEPT
apache    63902  0.0  0.1  7196  3876  ??  IJ   12:25PM   0:02.86 /usr/local/sbin/httpd -DNOHTTPACCEPT
apache    63903  0.0  0.1  7196  3876  ??  IJ   12:25PM   0:02.85 /usr/local/sbin/httpd -DNOHTTPACCEPT
root      64022  0.0  0.0  3336   936  p1  R+J  12:33PM   0:00.00 grep http
# httpd -V

Код: Выделить всё

server version: Apache/2.2.13 (FreeBSD)
Server built:   Dec  4 2009 11:52:28
Server's Module Magic Number: 20051115:23
Server loaded:  APR 1.3.8, APR-Util 1.3.9
Compiled using: APR 1.3.8, APR-Util 1.3.9
Architecture:   32-bit
Server MPM:     Prefork
  threaded:     no
    forked:     yes (variable process count)
Server compiled with....
 -D APACHE_MPM_DIR="server/mpm/prefork"
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_USE_FLOCK_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=128
 -D HTTPD_ROOT="/usr/local"
 -D SUEXEC_BIN="/usr/local/sbin/suexec"
 -D DEFAULT_PIDLOG="/var/run/httpd.pid"
 -D DEFAULT_SCOREBOARD="/var/run/apache_runtime_status"
 -D DEFAULT_LOCKFILE="/var/run/accept.lock"
 -D DEFAULT_ERRORLOG="/var/log/httpd-error.log"
 -D AP_TYPES_CONFIG_FILE="etc/apache22/mime.types"
 -D SERVER_CONFIG_FILE="etc/apache22/httpd.conf"

# /usr/local/sbin/suexec -V

Код: Выделить всё

 -D AP_DOC_ROOT="/usr/home/"
 -D AP_GID_MIN=900
 -D AP_HTTPD_USER="apache"
 -D AP_LOG_EXEC="/var/log/httpd/suexec.log"
 -D AP_SAFE_PATH="/usr/local/bin:/usr/local/bin:/usr/bin:/bin"
 -D AP_UID_MIN=900
 -D AP_USERDIR_SUFFIX="apache"

вот еще права на директории:
/home
dr-xr-x--x 7 apache apache 512 Nov 30 18:58 home

/home/my-host
dr-xrwx--- 4 my-host my-host 512 Dec 4 12:59 my-host.com


Проблема в том что скрипты других пользователей или даже с других хомов могут выполнятся (я пробовал через include в php) + я могу просматривать директории на сервере которые вне хома текущего пользователя (функциями dir и т.д.) =\

как я понял, тут дело в настройке PHP, в php.ini поправил:

Код: Выделить всё

 safe_mode = On
 safe_mode_gid = On
 

перезагрузил сервер, нечего не изменилось (сделал проверочный скрипт, который делает include другого скрипта, который находится в чужом хоме)...погуглив, понял что одного safe_mode недостаточно, надо еще и "open_basedir"

делаю:

Код: Выделить всё

 open_basedir = On
 

потом в apache добавляю к виртуалхосту несколько параметров:

Код: Выделить всё

<VirtualHost *:80>
        ServerAdmin     admin@my-domain.ru
        DocumentRoot    /usr/home/my-host.com/www/data
        ServerName      my-host.com
        SuexecUserGroup my-host  my-host
        Alias           /php-fcgi/      /usr/home/my-host.com/www/cgi-bin/
        CustomLog       /var/log/httpd/httpd-access.log       combined
        ErrorLog        /var/log/httpd/httpd-error.log

        php_admin_flag safe_mode on
        php_admin_flag safe_mode_gid on
        php_admin_value open_basedir /usr/home/my-host.com/www
        php_admin_value upload_tmp_dir /usr/home/my-host.com/temp
        php_admin_flag session.auto_start off
        php_admin_value session.save_path /usr/home/my-host.com/temp
</VirtualHost>
 

перезагружаю apache, а он мне ошибку:

Код: Выделить всё

 Performing sanity check on apache22 configuration:
Syntax error on line 530 of /usr/local/etc/apache22/httpd.conf:
Invalid command 'php_admin_flag', perhaps misspelled or defined by a module not included in the server configuration
 

что означает ошибка я понимаю...apache не знает что такое php_admin_flag...начал разбиратся, люди говорят что нужно подключить modphp...
но у меня php собран как CGI и использую я его как CGI а не как модуль для apache.....

есть какие-то варианты решения? или использовать open_basedir с CGI php не получится? =\

Спасибо!

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
jeno
рядовой
Сообщения: 11
Зарегистрирован: 2009-11-30 23:28:15
Откуда: Украина - Киев

Re: безопасность,open_basedir,safemode (apache22+suexec+fastcgi)

Непрочитанное сообщение jeno » 2009-12-05 19:09:03

вариант решения нашел, в вышеупомянутой статье для каждого пользователя в его хоме создается php.sh, в этом файле инициализируется интерпретатор РНР, вообщем, для каждого пользователя я загружаю свой конфиг php:

было:

Код: Выделить всё

exec /usr/local/bin/php-cgi
стало:

Код: Выделить всё

exec /usr/local/bin/php-cgi -c /usr/home/my-domain.com/php.ini
и в отдельном конфиге, под каждый хост свои пути к open_basedir и т.д.

если кто-то знает более изящное решение, буду признателен )