Настройка PHP для Linux — HackZona.Ru

Настройка PHP для Linux

Настройка PHP для Linux

Тип статьи:
Со старой ХакЗоны.
Источник:
В данной статье рассматривается настройка PHP для Linux. Apache, настроенный для работы от имени пользователя apache, входящего только в группу apache, с приложенными к Apache'у suexec'ом и PHP. Создаем пользователя xxx, входящему только в группу xxx и имеющему домашний каталог /home/xxx, систему, чтобы xxx мог размещать свой сайт, не боясь злых «соседей» таковые объявятся :). Логинимся rootом и приступаем.
Я буду делать все по порядку. Hачинаю с каталога, базового для домашних каталогов пользователей, то есть /home. Я запрещаю абсолютно всем запись в этот каталог и разрешу переходить в него. Затем я назначаю владельцем /home пользователя apache и группу apache. Только пользователю и группе apache и никому больше я разрешаю читать этот каталог. Теперь изменить каталог сможет только суперпользователь, прочитать сможет еще и пользователь apache, а перейти ниже этого каталога любые пользователи.
root@strict:~# chown apache:apache /home
root@strict:~# chmod ug=rx,o=x /home
root@strict:~# ls -l / | grep home
dr-xr-x--x 2 apache apache 512 Jan 17 02:30 /home
root@strict:~#

После этого «жертвуем» домашний каталог /home/xxx пользователю apache и группе разрешаем чтение и переход в этот каталог, но запись разрешаем только пользователям группы xxx.
root@strict:~# chown apache:xxx /home/xxx
root@strict:~# chmod ug=rx,g+w,o-rwx /home/xxx
root@strict:~# ls -l /home
dr-xrwx--- 2 apache xxx 512 Jan 17 02:35 /home/xxx
root@strict:~#

Для того, чтобы ошибки моих скриптов не могли испортить структуры каталогов, используемых в служебных целях, и для придания аккуратности дому, создаю в нем каталог www, принадлежащий пользователю apache и группе apache.
root@strict:~# mkdir /home/xxx/www
root@strict:~# chown apache:apache /home/xxx/www
root@strict:~# chmod a=rx /home/xxx/www
root@strict:~# ls -l /home/xxx | grep www
dr-xr-xr-x 2 apache apache 512 Jan 17 02:43 /home/xxx/www
root@strict:~#

Вот и все. Создаю каталоги для страничек и скриптов, принадлежащие, естественно мне, каталоги для логов и временных файлов, принадлежащие пользователю apache. Права доступа выставляем по потребностям странички и скрипты должны быть читаемыми и запусаемыми Apache'м, и полностью контролируемыми мною, логи должны быть доступны на запись Apache'у и читаемы мною, каталог с временными файлами должен быть доступен для всех по всем параметрам.
root@strict:~# mkdir /home/xxx/www/html
root@strict:~# mkdir /home/xxx/www/cgi
root@strict:~# chown xxx:xxx /home/xxx/www/html /home/xxx/www/cgi
root@strict:~# chmod u=rwx,go=rx /home/xxx/www/html /home/xxx/www/cgi
root@strict:~# mkdir /home/xxx/www/logs
root@strict:~# mkdir /home/xxx/www/tmp
root@strict:~# chown apache:apache /home/xxx/www/logs /home/xxx/www/tmp
root@strict:~# chmod u=rwx,go=rx /home/xxx/www/logs
root@strict:~# chmod a=rwx /home/xxx/www/tmp
root@strict:~# ls -l /home/xxx/www
drwxr-xr-x 2 xxx xxx 512 Jan 17 02:57 /home/xxx/www/html
drwxr-xr-x 2 xxx xxx 512 Jan 17 02:57 /home/xxx/www/cgi
drwxr-xr-x 2 apache apache 512 Jan 17 02:57 /home/xxx/www/logs
drwxrwxrwx 2 apache apache 512 Jan 17 02:57 /home/xxx/www/tmp
root@strict:~#

Конфигурирование PHP

Приступим к правке файла php.ini. Обязательно ставим режим safe_mode (или у Вас не все дома?). Разрешаем запуск программ только из специального каталога и запрещаем функцию system(). Можно этого и не делать, но представьте, что кто-то сможет дать команду killall -9 httpd и ужаснитесь!
safe_mode=on
safe_mode_exec_dir=/home/http
disable_functions=system

Осталось поправить конфигурацию веб сервера. Hахожу файл конфигурации, у меня это /usr/local/etc/apache/httpd.conf, и внутри директивы VirtualHost для сервера xxx добавляю разрешение обработки скриптов PHP php_admin_flag engine on. Осталось задать значения переменных PHP-машины open_basedir, include_path, upload_tmp_dir, safe_mode_include_dir для ограничения области работы с файлами моим домашним каталогом.
php_admin_flag engine on
php_admin_value open_basedir /home/xxx/
php_admin_value include_path .:/home/xxx
php_admin_value upload_tmp_dir /home/xxx/www/tmp
php_admin_value safe_mode_include_dir /home/xxx/www/tmp

Вот и все :)
Нравится
Не нравится

Комментарии

Нет комментариев. Ваш будет первым!