Когда-то давно интересовался общей информацией по существующих панелях управления хостингом. Акцент, конечно-же, делался в сторону свободного ПО. Заинтересовало решение на базе SysCP. Ознакомиться с даной панелью управления рекомендую именно на оф. сайте, поскольку (как ни странно) информации в Интернете немного.
Что радует, так это то, что во время работы данная панель не создает системных пользователей, и сохраняются все стандартные пути FreeBSD, тоесть каталоги пользователей панели будут размещаться в /usr/local/customers/, а не в /home.
Сама система написана на PHP, а для хранения информации используется СУБД MySQL.
Итак, приступим к установке. Кстати, спешу обратить внимание, что поскольку SysCP максимально адаптирована под стандартный веб-сервер с ОС FreeBSD, то я установку буду производить на уже работающий веб-сервер, где крутится несколько сайтов. К конфликтам это не приведет, если обратить внимание на некоторые моменты.
Система, на которую будет производится установка:
# uname -a FreeBSD web0.muff.kiev.ua 7.2-STABLE FreeBSD 7.2-STABLE #0: Sat Aug 8 04:58:58 EEST 2009 muff [at] web0 [dot] muff [dot] kiev [dot] ua:/usr/obj/usr/src/sys/Web0 amd64 |
Диски разбиты следующим образом (настроен RAID 1 на основе gmirror):
# df -h Filesystem Size Used Avail Capacity Mounted on /dev/mirror/gm0s1a 1.9G 232M 1.6G 13% / devfs 1.0K 1.0K 0B 100% /dev /dev/mirror/gm0s1d 3.9G 54K 3.6G 0% /home /dev/mirror/gm0s1f 1.9G 52K 1.8G 0% /tmp /dev/mirror/gm0s1g 383G 3.6G 349G 1% /usr /dev/mirror/gm0s1e 58G 701M 53G 1% /var devfs 1.0K 1.0K 0B 100% /var/named/dev |
Опять же, есть еще одна приятность. SysCP есть в портах.
# cd /usr/ports/ # make search name='syscp' Port: syscp-1.4.2.1 Path: /usr/ports/sysutils/syscp Info: PHP-based ISP System Control Panel Maint: ek [at] purplehat [dot] org B-deps: apache-2.2.11_7 expat-2.0.1 gettext-0.17_1 libiconv-1.13.1 mysql-client-5.0.84 pcre-7.9 perl-threaded-5.8.9_3 postgresql-client-8.2.13 R-deps: apache-2.2.11_7 dovecot-1.2.3 expat-2.0.1 freetype2-2.3.9_1 gd-2.0.35_1,1 gettext-0.17_1 jpeg-7 libiconv-1.13.1 libxml2-2.7.3 mysql-client-5.0.84 mysql-server-5.0.84 pcre-7.9 perl-threaded-5.8.9_3 php5-5.2.10 php5-bcmath-5.2.10 php5-filter-5.2.10 php5-gettext-5.2.10 php5-mysql-5.2.10 php5-pcre-5.2.10 php5-posix-5.2.10 php5-session-5.2.10 php5-simplexml-5.2.10 php5-spl-5.2.10 php5-xml-5.2.10 pkg-config-0.23_1 png-1.2.38 postfix-2.6.3,1 postgresql-client-8.2.13 proftpd-mysql-1.3.2 webalizer-2.21.2_1 WWW: http://www.syscp.org/ |
Приступаем с установке...
# cd /usr/ports/sysutils/syscp |
По ходу установки подтягиваются необходимые для работы порты, если они еще не были установлены в системе. По завершению установки обновляем пути и добавляем необходимый алиас в httpd.conf:
Alias /syscp "/usr/local/www/syscp" <Directory "/usr/local/www/syscp"> AllowOverride None Order allow,deny Allow from all </Directory> |
Проверяем не допустили ли ошибок в конфигурации и перезапускаем apache.
# apachectl configtest |
Открываем браузер и в строке адреса набиваем путь http://ip_adress_servera/syscp/
Если не допустили ошибок, то в браузере откроется окно с уведомлением, что мы впервые принимаемся за настройку SysCP :)
Выбор у нас небольшой, поэтому княпаем на линк "configure SysCP".
В следующем окне будет немного интересней... Разработчики поблагодарили нас за выбор SysCP, а также предупреждают, что если мы выберем существующую на сервере БД, то все данные в этой БД будут уничтожены. Ну и чтобы немного наградить нас, предлагают на выбор три языка инсталяции:
Русского к сожалению нет :( Но отчаиваться не стоит, надеюсь с English более-менее все дружат.
Займемся настройкой коннекта к БД Mysql.
При работе syscp работает от имени двох пользователей: первый с ограниченными правами (только для редактирования данных БД самой панели), а второй с неограниченными правами (в целях безопасности всегда создаю своего пользователя и даю ему полные права, а пользователя root удаляю). Кстати, БД и пользователя для работы панель создаст автоматически. Необходимо только создать пользователя с неограниченными правами.
Пользователем с ограниченными правами у нас будет пользователь syscp, БД называться тоже будет syscp. Пользователя с полным доступом назовем syscp-root.
# mysql -u muff -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 18717 Server version: 5.0.84-log FreeBSD port: mysql-server-5.0.84 Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> create user 'syscp-root'@'localhost' identified by 'password1'; |
В следующем поле формы необходимо вбить имя сервера, его IP-адресс, какой именно веб-сервер установлено (предлагаются два варианта, это Lighttpd и Apache2. Также необходимо вписать имя пользователя и группу, от имени которых работает веб-сервер (обычно это пользователь www групы www).
Кажется все... Жмем "Next" и наблюдаем за результатом. Инсталяция прошла успешно, если не считать того, что дамп базы не был создан. Но и создаватьто было не с чего :)
Итак, инсталяция окончена, и внизу страницы появился линк с предложением "Нажми здесь, чтобы авторизоваться". Почему бы и не нажать?... ;) Теперь вспомните поле формы, где было предложено ввести логин пользователя и пароль? Вот сейчас они нам и пригодятся.
После авторизации рекомендую посетить пункт "Change language" и установить язык панели в русский.
Кстати... В целях безопасности, после установки рекомендую полностью удалить каталог install:
# rm -R /usr/local/www/syscp/install/
|
Далее начнем настраивать сервисы на работу с SysCP. SysCP в этом нам очень поможет. По порядку будем выбирать необходимые службы в разделе "Сервер", пункт "Настройки служб".
Для работы Apache в связке с SysCP (предполагается что Apache уже настроен инеобходимо выполнить следующие команды (будьте внимательны, возможно с новой версией они изменятся):
# mkdir -p /usr/local/etc/apache22/syscp/htpasswd/
# touch /usr/local/etc/apache22/syscp/vhosts.conf # touch /usr/local/etc/apache22/syscp/diroptions.conf # mkdir -p /usr/local/customers/webs/ # mkdir -p /usr/local/customers/logs/ # echo "Include etc/apache22/syscp/vhosts.conf" >> /usr/local/etc/apache22/httpd.conf |
Ну и перечитаем конфигурацию Apache для применения новых настроек:
# /usr/local/etc/rc.d/apache22 graceful
|
Настройка сервера имен Bind9 на работу с SysCP вообще минимальна (за условия, что Bind9 уже сконфигурирован и работает, если нет - смотри сюда).
Необходимо выполнить всего три команды в shell:
# echo 'include "syscp_bind.conf";' >> /var/named/etc/namedb/named.conf
# touch /var/named/etc/namedb/syscp_bind.conf # rndc reload
|
Dovecot
Здесь уже немного интерестней. Есть где развернуться, поскольку Dovecot - очень мощный POP3/IMAP-server. А файл конфигурации позволяет довольно гибко работать с почтовым сервером. Стоит отметить, что Dovecot разрабатывался в расчёте на безопасность, гибкость настройки и быстродействие.
Основные особенности:
Поддержка форматов почтовых ящиков mbox и Maildir, а так же собственные форматы dbox и Cydir
Высокое быстродействие благодаря индексации содержимого ящиков
Большое количество поддерживаемых механизмов хранения аутентификационой информации (включая LDAP) и самой аутентификации (поддерживается SSL).
Собственная реализация SASL. Postfix 2.3+ и Exim 4.64+ могут аутентифицироваться напрямую через Dovecot.
Полная поддержка IMAP ACL для гибкой настройки прав пользователей
Поддержка общих ящиков и папок (shared mailboxes and folders)
Расширяемость при помощи плагинов
Собственный MDA с поддержкой Sieve
Строгое следование стандартам - Dovecot один из немногих кто проходит тест на соответствие всем стандартам IMAP [3]
Возможность модификации индексов с нескольких компьютеров - что позволяет ему работать с NFS и кластерными файловыми системами
Поддерживает различные виды квот
Поддержка различных ОС: Linux, Solaris, FreeBSD, OpenBSD, NetBSD и Mac OS X
Простота настройки.
Приступаем к настройке. Во время установки SysCP, если Dovecot не был установлен в системе раньше, было доступно окно конфигурации. Надеюсь вы отметили работу с MySQL ;). Просмотреть, с какими опциями у вас собран Dovecot можно в файле /var/db/ports/dovecot/options.
Для начала создадим для Dovecot сертификат безопасности:
# mkdir -p /etc/ssl/dovecot
# cd /etc/ssl/dovecot
# openssl req -new -x509 -nodes -out cert.pem -keyout key.pem -days 3650
Generating a 1024 bit RSA private key
.....++++++ .....................++++++ writing new private key to 'key.pem' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:UA State or Province Name (full name) [Some-State]:Kiev Region Locality Name (eg, city) []:Kiev Organization Name (eg, company) [Internet Widgits Pty Ltd]:muff.kiev.ua Ltd. Organizational Unit Name (eg, section) []:IT department Common Name (eg, YOUR name) []:muff.kiev.ua Email Address []:admin'at'muff.kiev.ua # chmod 0600 *.pem |
Приступаем к редактированию основного конфигурационного файла Dovecot. Очистим послеустановочный вариант и добавляем необходимые опции. Предложенный SysCP вариант конфига был немного "подрихтован", было добавлено несколько строк. Выделено то, что изменялось, или на что необходимо обратить внимание.
# cat /dev/null > /usr/local/etc/dovecot.conf
# cat /usr/local/etc/dovecot.conf
protocols = imap imaps pop3 pop3s
disable_plaintext_auth = no log_path = /var/log/dovecot/dovecot.log
log_timestamp = "%b %d %H:%M:%S " syslog_facility = local0 ssl_disable = no ssl_cert_file = /etc/ssl/dovecot/cert.pem ssl_key_file = /etc/ssl/dovecot/key.pem login_process_size = 64 login_process_per_connection = yes login_processes_count = 3 login_max_processes_count = 128 login_max_connections = 256 login_log_format_elements = user=<%u> method=%m rip=%r lip=%l %c login_log_format = %$: %s login_greeting = Dovecot Ready. mail_uid = 125 mail_gid = 125 mail_privileged_group = mail dotlock_use_excl = yes verbose_proctitle = yes first_valid_uid = 125 first_valid_gid = 125 maildir_copy_with_hardlinks = yes protocol imap { mail_plugins = quota imap_quota login_greeting_capability = yes imap_client_workarounds = delay-newmail netscape-eoh tb-extra-mailbox-sep } protocol pop3 { pop3_uidl_format = %08Xu%08Xv mail_plugins = quota pop3_client_workarounds = outlook-no-nuls oe-ns-eoh } protocol lda { postmaster_address = postmaster_e-mail_here sendmail_path = /usr/sbin/sendmail } auth_username_format = %Lu auth default { mechanisms = plain login passdb sql { args = /usr/local/etc/dovecot-sql.conf } userdb sql { args = /usr/local/etc/dovecot-sql.conf } user = root socket listen { client { path = /var/spool/postfix/private/auth mode = 0660 user = postfix group = postfix } } } dict { } plugin { } |
Поскольку добавились некоторые опции для логирования, внесем изменения в syslogd для поддержки логов Dovecot.
Создадим каталог, где будут хранится логи:
# mkdir /var/log/dovecot
|
Добавим в syslogd перехват сообщений от Dovecot и настроим ротацию логов:
# echo 'local0.* /var/log/dovecot/dovecot.log' >> /etc/syslog.conf
# echo '/var/log/dovecot/dovecot.log 644 10 * $W6D0 JC' >> /etc/newsyslog.conf
# sh /etc/rc.d/syslogd restart
|
Далее создаем файл с конфигурацией обращений к MySQL-базе, на который ссылается основной конфиг и приводим его к следующему виду:
# touch /usr/local/etc/dovecot-sql.conf
# cat /usr/local/etc/dovecot-sql.conf
driver = mysql
connect = host=localhost dbname=syscp user=syscp password=MYSQL_PASSWORD default_pass_scheme = CRYPT password_query = SELECT username AS user, password_enc AS password \ FROM mail_users WHERE username = '%u' user_query = SELECT CONCAT(homedir,maildir) AS home, concat('maildir:',homedir,maildir) \ AS mail, uid, gid FROM mail_users where username = '%u' |
Кстати, если запамятовали, какой пароль SysCP для коннекта с MySQL-базой, то "подсмотреть" его можно в файле /usr/local/www/syscp/lib/userdata.inc.php.
Добавим загрузку Dovecot при запуске системы и стартуем Dovecot:
# echo '# Dovecot' >> /etc/rc.conf
# echo 'dovecot_enable="YES"' >> /etc/rc.conf
# sh /usr/local/etc/rc.d/dovecot start
|
В моем случае Dovecot ругнулся на неизвестные опции в 6 строке и 27, а именно:
- ssl_disable
- login_greeting_capability
После общения с google понял, что для версии Dovecot 1.2.х эта опция заменена на "ssl = no". Вносим необходимые изменения в конфигурационный файл.
Опция login_greeting_capability разрешает посылать возможности IMAP в приветственном сообщении. Это избавляет клиентов от необходимости запрашивать это в команде CAPABILITY, таким образом экономится один запрос. Но в нашем случае данная опция неизвестна - ф топку. Обойдемся без нее. То есть - комментируем!
Postfix
Приступим к настройке SMTP-сервера на базе Postfix. Конечно, Exim мне более милее, но в стандартной поставке SysCP использует именно Postfix. Возможно позже статья будет переписана с использованием именно MTA Exim.
Итак, начнем с редактирования /usr/local/etc/postfix/main.cf. Необходимо придать ему следующий вид:
# cat /usr/local/etc/postfix/main.cf
smtpd_sender_restrictions = permit_sasl_authenticated, permit_mynetworks
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_hostname, reject_non_fqdn_sender, reject_non_fqdn_recipient, reject_unauth_destination, reject_unauth_pipelining, reject_invalid_hostname smtpd_sasl_auth_enable = yes smtpd_sasl_authenticated_header = yes smtpd_sasl_local_domain = $myhostname smtpd_sasl_security_options = noanonymous broken_sasl_auth_clients = yes smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth smtp_use_tls = yes smtpd_use_tls = yes smtp_tls_note_starttls_offer = yes smtpd_tls_key_file = /etc/ssl/postfix/smtpd.pem smtpd_tls_cert_file = /etc/ssl/postfix/smtpd.pem smtpd_tls_CAfile = /etc/ssl/postfix/smtpd.pem smtpd_tls_loglevel = 0 smtpd_tls_received_header = yes smtpd_tls_session_cache_timeout = 3600s tls_random_source = dev:/dev/urandom virtual_alias_maps = proxy:mysql:/usr/local/etc/postfix/mysql-virtual_alias_maps.cf virtual_gid_maps = static:125 virtual_mailbox_base = /usr/local/customers/mail/ virtual_mailbox_domains = proxy:mysql:/usr/local/etc/postfix/mysql-virtual_mailbox_domains.cf virtual_mailbox_limit = 51200000 virtual_mailbox_maps = proxy:mysql:/usr/local/etc/postfix/mysql-virtual_mailbox_maps.cf virtual_minimum_uid = 125 virtual_transport = virtual virtual_uid_maps = static:125 virtual_create_maildirsize = yes virtual_mailbox_extended = yes proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks virtual_mailbox_limit_override = yes virtual_maildir_limit_message = Sorry, this user has overdrawn their diskspace quota. Please try again later. virtual_overquota_bounce = yes alias_maps = $alias_database queue_directory = /var/spool/postfix command_directory = /usr/local/sbin daemon_directory = /usr/local/libexec/postfix data_directory = /var/db/postfix mail_owner = postfix myhostname = muff.kiev.ua mydomain = muff.kiev.ua myorigin = $mydomain unknown_local_recipient_reject_code = 550 mynetworks_style = host debug_peer_level = 2 debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd $daemon_directory/$process_name $process_id & sleep 5 sendmail_path = /usr/local/sbin/sendmail newaliases_path = /usr/local/bin/newaliases mailq_path = /usr/local/bin/mailq setgid_group = maildrop html_directory = no manpage_directory = /usr/local/man sample_directory = /usr/local/etc/postfix readme_directory = no |
Далее на очереди - /usr/local/etc/postfix/master.cf. Раскомментируем, или добавим следующие строки:
smtps inet n - n - - smtpd
-o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject |
Создаем mysql-virtual_alias_maps.cf и приводим к следующему виду:
# touch /usr/local/etc/postfix/mysql-virtual_alias_maps.cf user = syscp |
Потом создаем файл /usr/local/etc/postfix/mysql-virtual_mailbox_domains.cf и наполняем его следующим содержимым:
# touch /usr/local/etc/postfix/mysql-virtual_mailbox_domains.cf user = syscp |
Еще один аналогичный файл:
# touch /usr/local/etc/postfix/mysql-virtual_mailbox_maps.cf user = syscp |
Создаем каталог для приходящей почты:
# mkdir -p /usr/local/customers/mail/ # chown -R postfix:postfix /usr/local/customers/mail/ |
Инициализируем базу данных псевдонимов:
# /usr/local/bin/newaliases |
Займемся сертификатом безопасности...
# mkdir -p /etc/ssl/postfix Generating a 1024 bit RSA private key |
Также позаботимся о том, чтобы никто не подсмотрел параметры соединения с MySQL-базой:
# chmod 640 /usr/local/etc/postfix/mysql-virtual_* # chgrp postfix /usr/local/etc/postfix/mysql-virtual_* |
Отменим старт Sendmail и добавим в /etc/rc.conf загрузку Postfix при старте системы:
# echo '# SMTP' >> /etc/rc.conf |
Отключим специфические для Sendmail опции:
# touch /etc/periodic.conf # cat /etc/periodic.conf daily_clean_hoststat_enable="NO" daily_status_mail_rejects_enable="NO" daily_status_include_submit_mailq="NO" daily_submit_queuerun="NO" |
Останавливаем Sendmail и запускаем Postfix:
# killall -9 sendmail |
ProFTPd
Следующим сервисом будет ФТП (демон ProFTPd).
Займемся созданием сертификата для даного демона:
# mkdir -p /etc/ssl/proftpd Generating a 1024 bit RSA private key |
Приступаем к редактированию конфигурационного файла ProFTPd - /usr/local/etc/proftpd.conf. Необходимо привести его к следующему виду:
# cat /usr/local/etc/proftpd.conf ServerName "muff.kiev.ua FTP Server" |
Добавим загрузку ProFTPd в /etc/rc.conf:
# echo '# ProFTPd' >> /etc/rc.conf |
Ну и, напоследок, запускаем саму службу:
# sh /usr/local/etc/rc.d/proftpd start Starting proftpd. |
Cron
Настроим планировщик заданий cron на выполнение следующих процедур:
# cat /etc/crontab | grep syscp */5 * * * * root /usr/local/bin/php -q /usr/local/www/syscp/scripts/cron_tasks.php 0 0 * * * root /usr/local/bin/php -q /usr/local/www/syscp/scripts/cron_traffic.php 30 0 * * * root /usr/local/bin/php -q /usr/local/www/syscp/scripts/cron_ticketarchive.php 0 1 * * * root /usr/local/bin/php -q /usr/local/www/syscp/scripts/cron_used_tickets_reset.php */5 * * * * root /usr/local/bin/php -q /usr/local/www/syscp/scripts/cron_autoresponder.php */5 * * * * root /usr/local/bin/php -q /usr/local/www/syscp/scripts/cron_apsinstaller.php */30 * * * * root /usr/local/bin/php -q /usr/local/www/syscp/scripts/cron_apsupdater.php |
Не забываем перезапустить cron после внесения изменений:
# killall -HUP cron |
Для подержки awstats (поддержку можно будет настроить в панели) необходимо установить порт. Перейдем в /usr/ports/www/awstats и начнем установку:
# cd /usr/ports/www/awstats |
По завершению установки необходимо добавить следующие строки в /usr/local/etc.apache22/httpd.conf:
Alias /awstatsclasses "/usr/local/www/awstats/classes/" <Directory "/usr/local/www/awstats/"> |
Создаем необходимые каталоги и файлы:
# mkdir /usr/local/etc/awstats/ |
Продолжение следует...
Здравствуйте,
Здравствуйте, автор!
Попытался установить шаг в шаг.
Вопрос всал на FTP. Не хочет авторизовываться. 530 ошибка. Может в вашем коде ошибка? Я его копировал.
Спасибо за ответ!
По поводу FTP
По ходу данный конфиг генерирует сама панель (поэтому его и разместил). Как всегда, приходится обрабатывать "напильником". При "разборе полетов" обнаружил, что не вполне корректно обрабатываются sql-запросы. Немножко потанцевал с бубном и добился успешного результата. При следующих параметрах все работает (навожу только строки, которые относятся к SQL-запросам).
SQLAuthTypes Crypt
SQLUserInfo ftp_users username password uid gid homedir shell
SQLGroupInfo ftp_groups groupname gid members
SQLAuthenticate users groups
SQLLog PASS login
SQLNamedQuery login UPDATE "last_login=now(), login_count=login_count+1 WHERE username='%u'" ftp_users
SQLLog RETR download
SQLNamedQuery download UPDATE "down_count=down_count+1, down_bytes=down_bytes+%b WHERE username='%u'" ftp_users
SQLLog STOR upload
SQLNamedQuery upload UPDATE "up_count=up_count+1, up_bytes=up_bytes+%b WHERE username='%u'" ftp_users
P.S. Извините за столь запоздалый ответ, как-то закрутился и не заглядывал в раздел коментариев. Надеюсь вопрос еще актуален.
Не подскаже, пожалуйста, а
Не подскаже, пожалуйста, а какие права на /usr/local/etc/apache22/syscp/vhosts.conf надо выставить, а то syscp не записывает в него.
Насколько помнится - права не
Насколько помнится - права не менял...
-rw-r--r-- 1 root wheel 72014 6 окт 21:30 /usr/local/etc/apache22/syscp/vhosts.conf
C доступом разобрался.
C доступом разобрался. Необходимо было поставить XML обработчик php5-xml
Ясно. А как так? Если
Ясно.
А как так? Если устанавливать из портов зависимости должны были тоже установиться. Их список можно увидеть в начале статьи, где идет описание порта.
Прошу прощения, что давно не
Прошу прощения, что давно не отвечал. был в командировке. XML не подтянулся, хотя странно. Все это хозяйство устанавливалось на свжеустановленную Фрю 8.2 x32
Добрый день! Подскажить есть
Добрый день! Подскажить есть в SYSCP менеджер файлов?
Нету. Предлагают использовать
Нету.
Предлагают использовать Web-FTP. Пример настройки web-ftp - здесь.
Спасибо)
Спасибо)