Заметки по созданию хостинга на базе панели ISP Control: различия между версиями

Материал из Linux Wiki
Перейти к навигацииПерейти к поиску
(добавил ссылки)
(Про ограничение на количество групп пользователя)
Строка 44: Строка 44:
  $cmd = "/usr/sbin/usermod -a -G $sys_group www-data";
  $cmd = "/usr/sbin/usermod -a -G $sys_group www-data";
  sys_command($cmd);
  sys_command($cmd);
Внимание: в разных системах существуют разные ограничения на количество групп, в которые может входить пользователь. В BSD<!-- RIP! :D --> это вроде как 16 (соответственно, для более-менее крупного хостинга такой способ неприменим), в современном Linux'e дефолтно это 65536 (и вроде как [http://linux.derkeiler.com/Mailing-Lists/Kernel/2004-07/6074.html может быть легко увеличен при необходимости]).


* При аплоаде файлов через FTP-клиент могут возникать случаи, когда права на файлы выставляются не такие, как указаны в конфиге proftpd.conf (параметр Umask 022 022). Проблема в FTP-клиенте, который пытается сохранить на сайте те же unix'овые права, что и в файловой системе. Лучше сменить FTP-клиент, чем запрещать SITE_CHMOD.
* При аплоаде файлов через FTP-клиент могут возникать случаи, когда права на файлы выставляются не такие, как указаны в конфиге proftpd.conf (параметр Umask 022 022). Проблема в FTP-клиенте, который пытается сохранить на сайте те же unix'овые права, что и в файловой системе. Лучше сменить FTP-клиент, чем запрещать SITE_CHMOD.

Версия 09:14, 27 июля 2011

Бэкап

Использование многопоточной архивации на SMP

Для улучшения использования многоядерных процессоров есть смысл поставить pbzip2. Для его использования в /etc/ispcp/ispcp.conf изменить параметр ZIP на bzip2, а CMD_BZIP на

CMD_BZIP = /usr/bin/pbzip2
ToDo: Проверить, что ничего не сломалось

это затронет архивирование баз данных (как для доменов, так и для самой панели). Для многопоточной архивации контента придется немного изменить скрипт /var/www/ispcp/engine/backup/ispcp-backup-all, 297-я строка - надо сжатие напрямую через tar сменить на внешнюю команду. Скрипт в этом месте выглядит так (закомментированный старый и новый вариант):

#$backup_cmd = "$cmd_tar --create --directory=$dmn_dir --$zip --file=$www_dir/$backup_filename --exclude=logs --exclude=phptmp --exclude=backups . 2> $www_dir/$backup_filename.log";
$backup_cmd = "$cmd_tar --create --directory=$dmn_dir --exclude=logs --exclude=phptmp --exclude=backups . 2> $www_dir/$backup_filename.log | pbzip2 -9c > $www_dir/$backup_filename";

Как (более правильный) вариант - переделать скрипт, добавив новый тип сжатия - pbzip2, обрабатывающийся по тем же правилам, что и обычный bzip2, тогда в правке выше можно использовать переменную $zip.

Править ispcp-backup-ispcp, думаю, нет смысла, ибо база данных и так обрабатывается pbzip2'ом, а сжатие конфигов не настолько ресурсоемко, чтобы ради этого переделывать скрипт

Конфиги

Настройки PHP

  • /etc/ispcp/fcgi/parts/php5/php.ini - тут находятся дефолтные настройки PHP (а рядом и другие дефолтные файлы), которые копируются юзеру при создании домена.
  • Настройки аплоада файлов: в php.ini для нужного домена (в частности для phpmyadmin, net2ftp):
# лимит для выполнения скриптов
memory_limit = 64M
post_max_size = 64M
# лимит для аплоада файлов
upload_max_filesize = 64M

Кроме того, в /etc/apache2/mods-enabled/fcgid_ispcp.conf изменить (добавить) параметр MaxRequestLen:

MaxRequestLen 128000000

Без него может появляться 500-я ошибка при аплоаде больших файлов (в частности дампов баз в phpmyadmin), ошибку можно отловить в error_log сервера.

Скрытие версий серверов

Апач
/etc/apache2/conf.d/security
ServerTokens Prod
ServerSignature Off
proftpd
/etc/proftpd/proftpd.conf
ServerIdent                on "любая строка"

При просто "on" отдается внутренний IP-адрес и имя сервера. При off - только адрес. Чтобы убрать все, надо вставить свой идентификатор по примеру выше.

Права доступа

  • Включаем Апач в группу каждого создаваемого домена. Это позволит ставить на файлы и каталоги более секьюрные права - вплоть до 400 на скрипты и 440 на обычный html. Для этого надо поправить скрипт /var/www/ispcp/engine/ispcp_common_methods.pl на строке 2275:
# Добавляем Апач в группу домена
$cmd = "/usr/sbin/usermod -a -G $sys_group www-data";
sys_command($cmd);

Внимание: в разных системах существуют разные ограничения на количество групп, в которые может входить пользователь. В BSD это вроде как 16 (соответственно, для более-менее крупного хостинга такой способ неприменим), в современном Linux'e дефолтно это 65536 (и вроде как может быть легко увеличен при необходимости).

  • При аплоаде файлов через FTP-клиент могут возникать случаи, когда права на файлы выставляются не такие, как указаны в конфиге proftpd.conf (параметр Umask 022 022). Проблема в FTP-клиенте, который пытается сохранить на сайте те же unix'овые права, что и в файловой системе. Лучше сменить FTP-клиент, чем запрещать SITE_CHMOD.

Недоработки

  • При вынесении FTP-сервера на отдельный хост может возникнуть проблема с тем, что при создании FTP-аккаунта в панели нельзя выбрать произвольный каталог - возникает ошибка "Невозможно сменить каталог, обратитесь к администратору" при нажатии кнопки-ссылки "Выбрать каталог". Проблема в том, что панель для данного запроса создает временного FTP-пользователя, который подключается к системе и получает содержимое домашнего каталога, после чего строит виртуальную файловую систему. При этом в скрипте создания этой файловой системы жестко забито подключение к localhost. Поэтому при вынесении FTP-сервера на другой хост следует в файле /var/www/ispcp/gui/include/ispCP/VirtualFileSystem.php найти строки
// 'localhost' for testing purposes. I have to study if a better
// $this->_domain would work on all situations
$this->_handle = @ftp_connect('localhost');

и вписать вместо localhost нужный IP-адрес или домен.

Особенности настройки

PHP

  • Дефолтно в PHP отключен ряд функций, в частности
disable_functions = show_source, system, shell_exec, passthru, exec, phpinfo, shell, symlink, popen, proc_open

(иначе говоря, не пугаться, когда в файлике с phpinfo () будет белый экран)

Просто мысли

База данных и phpmyadmin

  • Потенциально для MySQL-сервера можно включить опцию skip-show-database, которая отключает для пользователей вывод списка доступных баз, что может быть полезно в плане безопасности - получив параметры подключения к одной базе, злоумышленник не знает про остальные, хотя доступ к ним и есть. Однако в таком случае phpmyadmin тоже не может получить спискок баз, соответственно, после авторизации выдает, что базы отсутствуют. Для этих целей заводится специальный пользователь, имеющий readonly-доступ к некоторым таблицам базы mysql (соответственно, имеющий доступ к списку всех баз сервера). Что является бОльшим злом - возможное получение списка баз одного пользователя при взломе сайта или получение списка всех баз при последующем возможном взломе PHPMyAdmin (который славится дырявостью) - выбирать вам.

Ссылки