Строим оборону для Apache2, PHP, MySQL Скрываем информацию об операционной системе, версии apache, php на страницах 404, 500, 403 и т.д.
/etc/apache2/conf.d/security ServerSignature Off ServerTokens Off (Отвечает за отображение информации о сервере в http заголовках)
ServerTokens Prod Редактирем файл php.ini: expose_php = Off (Отвечает за показ версии интерпретатора php. Может принимать значения Off/On.
Его тоже убираем с глаз долой) Защита через ограничение ряда функций в PHP. В конфигурационном файле /etc/php5/apache2/php.ini, и редактируем следующие переменные:
safe_mode_exec_dir=/home/http
разрешаем запуск программ только из специального каталога.
disable_functions=system;— отключаем unix функции (killall, chown, rm и т.д.)
safe_mode on;— запретить выполнять команды на сервере с помощью php, но мы все равно сможем просматривать и редактировать шеллом файлы на которые у нас есть доступ. А доступ у нас есть на все файлы на которые есть доступ у Apache.
В Ubuntu и в Debian Apache работает от имени пользователя www-data и группы www-data.Так что мы имеем доступ на чтение на все файлы c правами 644, даже если они пренадлежат другим пользователям и полный доступ на файлы и директории, принадлежащие www-data.
Защита через ограничение ряда функций в Apache. Hахожу файл конфигурации виртуального хоста, и внутри директивы VirtualHost добавляю разрешение обработки скриптов 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 /srv/~php_admin_value include_path .:/srv/~ php_admin_value upload_tmp_dir /srv/~/www/tmp php_admin_value safe_mode_include_dir /srv/~/www/tmp
Запуск виртуальных хостов от разных учетных записей
Необходимо разграничить доступ на уровне apache. По сути, нужно, что бы Apache запускался для каждого пользователя под своим логином, для чего это нужно?
Ситуация: У нас есть сервер, где много разных хостов и нужно разграничить доступ. Установка apache2-mpm-itk может удалить apache2 и apache2-mpm-prefork Устанавливаем: $ sudo apt-get install apache2-mpm-itk Далее, прописываем к каждому виртуальному хосту следующее: <IfModule mpm_itk_module> AssignUserId USER GROUP /IfModule> Создаем новую группу: $sudo groupadd friend Создаем пользователя vasya в группе friend:
$sudo useradd -s /bin/false -d /home/vasya -m -g friend vasya Далее, необходимо установить права владения файлов у виртуальных хостов: $sudo chown MYUSER:MYGROUP /var/www/my-virtualhost/ -R Активировать этот модуль через a2enmod НЕ нужно. Перезапускаем Apache2:
$ sudo /etc/init.d/apache2 reload Вот и все! По крайней мере от дурака мы с вами защитились =)