Ошибка: Failed to parse the Currency Converter XML document.
$26 595.72


Ошибка: Failed to parse the Currency Converter XML document.
$21 581.24


Ошибка: Failed to parse the Currency Converter XML document.
$1 906.36


Безопасная настройка PHP для виртуального хостинга на UNIX

Предисловие

Приходится признать, что операционные системы Windows не собираются уходить в небытие. Игнорировать этот факт нельзя, поэтому нужно научиться мирно сосуществовать с таковыми. Как известно, UNIX предоставляет удобные средства работы с TCP/IP и Internet, тогда как именно в Windows работают миллионы пользователей. А на долю системных администраторов выпадает управление всем этим «сатанинским шабашем».
«UNIX. Руководство системного администратора. Издание 3», предисловие к главе 26.

Hашла на меня блажь настроить на моем сервере модуль PHP к вэб серверу Apache. Я, конечно, успела наслушаться о том, что там какие-то запутки с настройками безопасности использования PHP, некоторые определила в процессе стряпания страничек и тут, как нельзя кстати, мне подвернулся в каком-то форуме Phil, очень мило помогший не наступить на грабли трижды. Собственно, эта страничка — наш с ним совместный труд к общей пользе. Hе могу сказать, что тут что-то изобретено нами, но зато все собрано нами любимыми в одну кучку.


Здесь я предлагаю свой вариант как максимально обезопасить совместное использование PHP/SSI/CGI на UNIX-like системах с использованием веб сервера Apache и размещении различных виртуальных хостов на одном IP. Я не буду морочить голову ненужными подробностями, предлагая каждому посетителю странички ознакомиться с командами unix-shell и особенностями компиляции и настройки упоминаемого программного обеспечения самостоятельно. Если кто-то найдет это для себя сложным, то ему лучше перейти на какую-нибудь другую, более увлекательную страничку, поиграть в сисадмина.


Я намеренно обошла вниманием запуск PHP-скриптов как CGI — там и так все ясно. В ту же кучу я отмела и проблемы PHP на выделенном сервере.

День первый

Итак, я прыгаю в мягкое кресло, пристраиваю клаву у себя коленках и бодренько так стукаю по кнопке питания (не меня, а компа :). У меня стоит FreeBSD (для пингвиноидов буду делать специальные коментарии, если чего забуду — дергайте за рукав), свеженький Apache, настроенный для работы от имени пользователя apache, входящего только в группу apache, с приложенными к Apache«у suexec»ом и PHP. Сейчас я настрою для пользователя stricty, входящему только в группу stricty и имющему домашний каталог /home/stricty, систему, чтобы stricty могла размещать свой сайт, не боясь злых «соседей» — таковые объявятся. Да, рассаживайтесь рядом поудобнее, потому что пока мы тут болтали система уже загрузилась и можно начинать. Все устроились? Отлично! Теперь дружно отвернулись, так как я собираюсь залогиниться 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:~#

Очень нежно подходим к домашнему каталогу для stricty — это мой дом, в котором будут жить мои mp3шки, рассказы и сайт. Печальный опыт показал, что придется пожертвовать домашний каталог /home/stricty пользователю apache, но оставить в группе stricty. Что и делаем. И владелцу и группе разрешаем чтение и переход в этот каталог, запись разрешаем только мне, то есть группе stricty. Всем остальным ничего не разрешаем. Внимательно смотрим! Hасмотрелись? Так, отводим взгляды от меня, смотрим на экран и осознаем — ниже каталога stricty могут перемещаться только пользователь apache и члены группы stricty — собственно, сама stricty. Без дополнительных ухищрений ни один сосед не может теперь пролезть ко мне в дом и я могу смело размещать в нем интимную информацию — например, фотографию моей любимой кошечки.
root@strict:~# chown apache:stricty /home/stricty
root@strict:~# chmod ug=rx,g+w,o-rwx /home/stricty
root@strict:~# ls -l /home
dr-xrwx-- — 2 apache stricty 512 Jan 17 02:35 /home/stricty
root@strict:~#

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

Вот и все. Создаю каталоги для страничек и скриптов, принадлежащие, естественно мне, каталоги для логов и временных файлов, принадлежащие пользователю apache. Права доступа выставляем по потребностям — странички и скрипты должны быть читаемыми и запусаемыми Apache»м, и полностью контролируемыми мною, логи должны быть доступны на запись Apache«у и читаемы мною, каталог с временными файлами должен быть доступен для всех по всем параметрам.
root@strict:~# mkdir /home/stricty/www/html
root@strict:~# mkdir /home/stricty/www/cgi
root@strict:~# chown stricty:stricty /home/stricty/www/html /home/stricty/www/cgi
root@strict:~# chmod u=rwx,go=rx /home/stricty/www/html /home/stricty/www/cgi
root@strict:~# mkdir /home/stricty/www/logs
root@strict:~# mkdir /home/stricty/www/tmp
root@strict:~# chown apache:apache /home/stricty/www/logs /home/stricty/www/tmp
root@strict:~# chmod u=rwx,go=rx /home/stricty/www/logs
root@strict:~# chmod a=rwx /home/stricty/www/tmp
root@strict:~# ls -l /home/stricty/www
drwxr-xr-x 2 stricty stricty 512 Jan 17 02:57 /home/stricty/www/html
drwxr-xr-x 2 stricty stricty 512 Jan 17 02:57 /home/stricty/www/cgi
drwxr-xr-x 2 apache apache 512 Jan 17 02:57 /home/stricty/www/logs
drwxrwxrwx 2 apache apache 512 Jan 17 02:57 /home/stricty/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 для сервера stricty добавляю разрешение обработки скриптов 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/stricty/
php_admin_value include_path .:/home/stricty
php_admin_value upload_tmp_dir /home/stricty/www/tmp
php_admin_value safe_mode_include_dir /home/stricty/www/tmp

Пусть всегда будет так ужасно!

Все настроено, можно перезапустить Apache и смело идти пить кофе. Проходите к столу и пока я варю божественный напиток, послушайте. Когда с помощью нескольких потерь данных, бессонных ночей и Schors»a удалось победить PHP, возникла идея избавиться от safe_mode. Как только мы выпьем по чашечке кофе, я сяду изучать документацию по PHP для создания режима safe_mode light. Хотя, последуещее обязательное отслеживание изменений вносимых в каждую версию PHP — задача не для слабонервных.

 

Интересное

19 секретов Windows XP
1. Если предыдущие версии Windows скрывали, как долго они способны работать без перезагрузки, то ХР в этом плане есть чем гордиться. Войдите в командную строку из меню Accessories, которое...
Подробнее...
Настройка VPN-сервера с...
Для начала: данная статья не претендует на роль полноценного руководства или панацеи на все случаи жизни, посему все вопросы и пожелания по исправлению и дополнению статьи шлем на.
Подробнее...
12 языков...
Существует около 8 500 языков программирования (не удивляйтесь, данные не преувеличены), однако, несмотря на такое разнообразие, число языков, на которых пишет большинство, с трудом переваливает...
Подробнее...
Delphi и Flash. Совмещение...
Разве возможно совместить Флэш-ролики и Дельфи-приложения. Раньше я думал что НЕТ. Но теперь я знаю не только, что это возможно, но и знаю как это делается!!! И сейчас я вам расскажу об этом....
Подробнее...
Загрузка FreeBSD 5.0 на...
Введение За последние годы порт FreeBSD-sparc64 привлек значительное внимание разработчиков. За годы было сделано многое; тем не менее, еще много предстоит сделать в области поддержки устройств и...
Подробнее...
Продвижение сайта
Для того чтобы привлечь посетителей на созданный вами сайт, недостаточно только лишь презентабельного дизайна вашего ресурса. Необходимо проведения ряда определенных мероприятий, которые...
Подробнее...
Как сгенерировать файл...
Рано или поздно любой веб-мастер сталкивается с необходимостью защиты своего сайта, более тонкой настройки доступа к различным его параметрам. Один из вариантов — использовать специальный...
Подробнее...
Руководство по TCP/IP для...
Большинство из нас знает TCP/IP как «клей», связующий Internet. Но не многие способны дать убедительное описание того, что этот протокол представляет собой и как работает. Итак, что же такое...
Подробнее...
Новый способ удаления Msn...
Не секрет, что жесткая инсталляция и невозможность простого удаления программы Msn Messenger не очень радует многих пользователей Windows XP. Какой бы хорошей не была эта программа, большинство из...
Подробнее...
10 советов по защите лэптопов
Ноутбук конечного пользователя, оказавшись в чужих руках (неважно, в физических или виртуальных), может принести организации серьёзные неприятности, если на нём хранилась важная информация. Ниже...
Подробнее...