Здесь приводятся детальные инструкции по установке и настройке Apache + PHP + MySQL под OpenBSD 5.0, а также запирание пользователей (chroot) подключенных через SFTP (SSH) в их домашнем каталоге, настройка прав присваиваемых по умолчанию на загружаемые через SFTP файлы и каталоги.
Установка Apache
Apache — версия 1.3 поставляется с OpenBSD по дефолту, тоесть в системе он уже есть, надо только уговорить его запускаться. Для этого добавляем запись такого вида (httpd_flags="") в /etc/rc.conf.local. Если файл /etc/rc.conf.local отсутствует, то нужно его создать:
grep -i http /etc/rc.conf.local httpd_flags=""
Все! При следующей загрузке у нас стартонет apache автоматом. Имейте также в виду что по умолчанию он будет chroot-иться в /var/www — не забывайте что мы попали в консоль системы где все секюрно от рождения. Главное не нарушить гармонию безопасности этого точно слаженного организма своими шальными ручонками . Выше chroot-каталога /var/www сервер упорно ничего не будет видеть...
Для того чтобы apache мог читать другие каталоги, например каталог /home где у нас планируется виртуальный хостинг, нам нужно его запускать с ключом (флагом) "-u", тогда файл должен будет выглядеть вот так:
httpd_flags="-u"
Едем дальше! Можно управлять сервисом с помощью команд:
apachectl restart # или httpd -k restart # или apache2 -k start
Если будете получать сообщения типа:
тогда в конфиге /var/www/httpd.conf установите:
ServerName 127.0.0.1
Примечание: Апач работает только с файлами и каталогами находящимися в Server Root по умолчанию /var/www
Остановить запущенный в безопасном chroot-режиме сервер и запустить в обычном можно командами:
apachectl stop httpd -u
Установка PHP
Для установки РНР на нужно подключение к сети и выполнить команду:
pkg_add -v ftp://ftp.openbsd.org/pub/OpenBSD/4.9/packages/i386/php5-core-5.2.17.tgz php5-core-5.2.17:libiconv-113p2 php5-core-5.2.17:gettext-0.18.1p0 php5-core-5.2.17:libxml-2.7.8p1 php5-core-5.2.17: ok --- +php5-core-5.2.17 ------------------- To enable the php5 module please create a symbolic link from /var/www/conf/modules.sample/php.conf to /var/www/conf/modules/php.conf ln -s /var/www/conf/modules.sample/php5.conf \ /var/www/conf/modules/php5.conf The recommended php configuration has been installed to /var/www/conf/php.ini
Перед установкой РНР предварительно будут установлены необходимые библиотеки. Теперь установка РНР завершена и нам предлагается создать символьную ссылку для подключения файла конфигурации РНР, выполняем команду:
ln -s /var/www/conf/modules.sample/php5.conf /var/www/conf/modules/php5.conf
Символьная ссылка будет создана в каталоге /var/www/conf/modules и будет ссылатся на файл конфигурации РНР /var/www/conf/modules.sample/php5.conf Этой ссылкой будет пользоваться Apache при запуске, через директиву в /var/www/httpd.conf:
# # Include extra module configuration files # Include /var/www/conf/modules/*.conf
Ну это ещё не конец!))) Нам нужно ещё поставить как минимум расширение php5-mysql-5.2.17.tgz для работы РНР с MySQL иначе при попытке открытия phpMyAdmin будем получать сообщение: Невозможно загрузить расширение mysql! Проверьте настройки PHP.
pkg_add -v ftp://ftp.openbsd.org/pub/OpenBSD/4.9/packages/i386/php5-mysql-5.2.17.tgz You can enable this module by creating a symbolic link from /var/www/conf/php5.sample/mysql.ini to /var/www/conf/php5/mysql.ini ln -fs /var/www/conf/php5.sample/mysql.ini /var/www/conf/php5/mysql.ini
Далее создаем символическую ссылку на конфигурацию и желательно было бы установить дополнительные расширения выполнив команды:
pkg_add -v ftp://ftp.openbsd.org/pub/OpenBSD/4.9/packages/i386/php5-mcrypt-5.2.17.tgz pkg_add -v ftp://ftp.openbsd.org/pub/OpenBSD/4.9/packages/i386/php5-mbstring-5.2.17.tgz pkg_add -v ftp://ftp.openbsd.org/pub/OpenBSD/4.9/packages/i386/php5-curl-5.2.17.tgz pkg_add -v ftp://ftp.openbsd.org/pub/OpenBSD/4.9/packages/i386/php5-bz2-5.2.17.tgz pkg_add -v ftp://ftp.openbsd.org/pub/OpenBSD/4.9/packages/i386/php5-fastcgi-5.2.17.tgz pkg_add -v ftp://ftp.openbsd.org/pub/OpenBSD/4.9/packages/i386/php5-dba-5.2.17.tgz pkg_add -v ftp://ftp.openbsd.org/pub/OpenBSD/4.9/packages/i386/php5-dbase-5.2.17.tgz pkg_add -v ftp://ftp.openbsd.org/pub/OpenBSD/4.9/packages/i386/php5-extensions-5.2.17.tgz pkg_add -v ftp://ftp.openbsd.org/pub/OpenBSD/4.9/packages/i386/php5-gd-5.2.17.tgz pkg_add -v ftp://ftp.openbsd.org/pub/OpenBSD/4.9/packages/i386/php5-gmp-5.2.17.tgz pkg_add -v ftp://ftp.openbsd.org/pub/OpenBSD/4.9/packages/i386/php5-imap-5.2.17.tgz pkg_add -v ftp://ftp.openbsd.org/pub/OpenBSD/4.9/packages/i386/php5-ldap-5.2.17.tgz pkg_add -v ftp://ftp.openbsd.org/pub/OpenBSD/4.9/packages/i386/php5-mhash-5.2.17.tgz pkg_add -v ftp://ftp.openbsd.org/pub/OpenBSD/4.9/packages/i386/php5-mysqli-5.2.17.tgz pkg_add -v ftp://ftp.openbsd.org/pub/OpenBSD/4.9/packages/i386/php5-odbc-5.2.17.tgz pkg_add -v ftp://ftp.openbsd.org/pub/OpenBSD/4.9/packages/i386/php5-sqlite-5.2.17.tgz pkg_add -v ftp://ftp.openbsd.org/pub/OpenBSD/4.9/packages/i386/php5-sybase_ct-5.2.17.tgz pkg_add -v ftp://ftp.openbsd.org/pub/OpenBSD/4.9/packages/i386/php5-tidy-5.2.17.tgz pkg_add -v ftp://ftp.openbsd.org/pub/OpenBSD/4.9/packages/i386/php5-xmlrpc-5.2.17.tgz pkg_add -v ftp://ftp.openbsd.org/pub/OpenBSD/4.9/packages/i386/php5-xsl-5.2.17.tgz
Для активации каждого из расширений нужно будет создать символическую ссылку:
You can enable this module by creating a symbolic link from /var/www/conf/php5.sample/mcrypt.ini to /var/www/conf/php5/mcrypt.ini ln -fs /var/www/conf/php5.sample/mcrypt.ini /var/www/conf/php5/mcrypt.ini
Проверить список установленных расширений можно выполнив команду:
pkg_info | grep php5
Установка MySQL
Для установки MySQL на нужно подключение к сети и выполнить комманду:
pkg_add -v ftp://ftp.openbsd.org/pub/OpenBSD/4.9/packages/i386/mysql-server-5.1.54p3.tgz
Для того чтобы каждый раз не указывать полный путь к ФТП серверу можно определить переменную PKG_PATH
export PKG_PATH=ftp://ftp.openbsd.org/pub/OpenBSD/4.9/packages/`machine -a`/
Перед установкой MySQL предварительно будут установлены необходимые библиотеки:
mysql-server-5.1.54p3:p5-Net-Daemon-0.43p0: ok mysql-server-5.1.54p3:p5-P1RPC-0.2018p1: ok mysql-server-5.1.54p3:p5-DBI-1.609p1: ok mysql-server-5.1.54p3:mysql-client-5.1.54p0: ok mysql-server-5.1.54p3:p5-DBD-mysql-4.014p1: ok mysql-server-5.1.54p3: ok The following new rcscripts were installed: /etc/rc.d/mysqld See rc.d(8) for details. Look in /usr/local/share/doc/pkg-readmes for extra documentation.
Теперь установка MySQL завершена нам следует ознакомится с содержимым файла /usr/local/share/doc/pkg-readmes/mysql-server-5.1.54p3, рекомендации по дальнейшим действиям после установки. Так если мы установили mysql-server впервые, то нам нужно создать БД по умолчанию, для этого следует использовать команду:
# /usr/local/bin/mysql_install_db Installing MySQL system tables... .... OK Filling help tables... ... OK PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER ! To do so, start the server, then issue the following commands: /usr/local/bin/mysqladmin -u root password 'NewPass' /usr/local/bin/mysqladmin -u root -h TorbaSound password 'NewPass' Alternatively you can run: /usr/local/bin/mysql_secure_installation which will also give you the option of removing the test databases and anonymous user created by default. This is strongly recommended for production server. See the manual for more instructions. Please report any problems with the /usr/local/bin/mysqlbug
Теперь самое время запустить сервер:
/etc/rc.d/mysqld start
Управлять работой сервера можно командами /etc/rc.d/mysqld
Теперь нужно сменить (установить) пароль пользователя root:
/usr/local/bin/mysqladmin -u root password 'NewPass'
Для того что бы разрешить пользователю root подключатся отовсюду, а не только с локального хоста, выполните команды:
Дальше добавляем в конец файла /etc/login.conf такие строчки:
mysql:\ :openfiles-cur=1024:\ :openfiles-max=2048:\ :tc=daemon:
Это определяет ограничения для всех пользователей, а теперь пересобираем login.conf.db командой:
cap_mkdb /etc/login.conf
Если нужен автоматический запуск сервера при старте системы, то добавьте в файл такую строку:
/etc/rc.d/mysqld start
Для автоматического старта сервера добавим в файл /etc/rc.local такие строки:
Приведённый выше сценарий автоматического старта MySQL сервера применим только к OpenBSD версии 4.9, в OpenBSD версии 5.0 всё кардинально поменялось и теперь для автоматического старта MySQL сервера достаточно следующей комбинации:
Если вдруг забыли ранее установленный пароль, тогда для его восстановления воспользуйтесь следующей процедурой... Остановите сервер, например прибейте процесс:
kill 'cat /var/mysql/xxxxxx.pid' # или kill xxxxx
Где xxxxx название хоста(ИП) или ИД процесса, после чего создайте файл с содержимым и назовите его например sqlpass:
выполните команду:
mysqld_safe --init-file=/root/sqlpass &
Установка phpMyAdmin
Установка сводится в обычном копировании каталога phpMyAdmin в домашний каталог сервера, ниже приводится пример конфигурационного файла:
/* Authentication type */ $cfg['Servers'][$i]['auth_type'] = 'cookie'; /* Server parameters */ $cfg['Servers'][$i]['host'] = '127.0.0.1'; $cfg['Servers'][$i]['connect_type'] = 'tcp'; $cfg['Servers'][$i]['compress'] = false; /* Select mysqli if your server has it */ $cfg['Servers'][$i]['extension'] = 'mysql';
Директива конфигурационного файла должна содержать именно ИП аддрес, а не его доменное имя, в противном случае буд выдаватся ошибка: #2002 - Сервер не отвечает (либо сокет локального MySQL-сервера некорректно настроен).
Пользователи, SSH chroot и права Apache
Здесь начинается самый важный этап, на котором главное непротупить ибо иногда встречаются бесплатные и платные хостинги на которых имеется конфликт прав на каталоги и файлы между пользователем и сервером.
В чем это проявляется? После того как мы загрузили на сервер свои файлы, то в процессе загрузки на все наши файлы били установлены права владения, а после мы задумали установить через админ панель какой либо CMS какой то плагин и вот здесь сервер начинает загружать и распаковывать файл установки от своего имени и группы выставляя на файлы и каталоги свои права на которые у нас нет никаких полномочий и теперь созданные сервером файлы и каталоги мы со своими правами не сможем а ни прочитать, а ни скопировать созданные сервером файлы/каталоги - вот такая вот ботва!;) Одним из таких серверов является "freewebhostingarea.com" и хоть там все разрешено в смысле РНР функций и пр., но из-за бардака с правами там не возможно находится!
А поскольку планирование регистрации пользователей и прав доступа дело серьезное и здесь нам бардак незачем, то мы постараемся прямо вытянув руки настроить всё должным, безопасным и функциональным образом, а именно:
- Файлы на хост будем заливать через SFTP;
- За-chroot-тим SSH чтобы юзеры не гуляли по всему дереву системы;
- Создадим отдельную группу vuser для пользователей виртуального хостинга;
- Пользователей создаем и добавляем в группу с именем самого пользователя и в группу vuser;
- В группу каждого нового пользователя добавляем пользователь www;
- Установим umask 002 на пользовательские SFTP процессы дабы при загрузке пользователями своих файлов выставлять нужные нам права на каталоги 775 и 664 на файлы;
- Установим umask 002 на пользовательские HTTPD процессы Apache с той же целью что и для SFTP.
Группа vuser нам нужна для идентификации пользователей нашего виртуального хостинга, а также для других целей о которых будет упоминается ниже, эта группа не будет иметь никаких прав для доступа ни к каким файлам/каталогам или сервисам - это просто группа идентификатор пользователей нашего виртуального хостинга!
Потому как группа которой даются права это будет наша группа с именем регистрируемого пользователя, например user:user и в эту группу user будет входить только пользователь www который будет уполномочен записывать и переписывать/удалять все наши файлы, то мы соответственно сможем полностью распоряжаться своими файлами/каталогами и файлами и каталогами пользователя www. Пользоваться файлами (читать/писать) каждого отдельно зарегистрированного пользователя смогут только два пользователя: юзер и сервер www входящий в группу пользователя user.
Такую модель, в нашем случае, можно считать вполне удачной и безопасной, а если пользователь захочет дополнительно обезопасить свои файлы ограничив группу в правах, то он сможет сделать это самостоятельно, но в этом нет никакой необходимости, а по умолчанию будет полный сервис, без надобности после загрузки файлов на хост дополнительно выставлять права 0777 на каталоги или 664 на файлы - без геморроя, загрузили и забыли !;)
Chroot-тим SSH пользователей, umask 002 на SFTP процессы
Первое, что нам нужно, это запереть всех SFTP пользователей в их домашнем каталоге, но что бы эта штука работала то корневой домашний каталог и домашний каталог пользователя должны быть под владельцем root. Далее приводится последовательный список команд реализующий запланированное выше
Если возникли какие то проблемы, тогда анализируйте журналы:
grep drupal /var/log/authlog grep drupal /var/log/messages grep drupal /var/log/daemon
Установка umask 002 на HTTPD процессы Apache
По умолчанию в OpenBSD 4.9 сервер Apache работает под пользователем www и группой www и все скрипты запускаются именно под этим пользователем (www) и группой (www) при этом выставляя umask 022 на все создаваемые файлы/каталоги, что равняется 0755 на каталоги и 644 на файлы.
Для обычных пользователей umask на файлы создаваемые пользователями через оболочку можно установить обычным добавлением строки umask 002 в файлах:
- .cshrc - for the csh and tcsh shells;
- .profile - for the Korn shell;
- .bash_profile - for the bash shell.
Но ведь пользователь WWW под которым бегает вебсервер Apache 1.3 в OpenBSD 4.9 не пользуется ни одной из упомянутых выше оболочек и по этому подобные рекомендации неоднократно встречающиеся в сети можно считать инвалидными !;)
Как следствие, в нашей модели совместного доступа, сервер/пользователь www получает доступ к нашим файлам и каталогам используя полномочия данные ему группой нашего основного пользователя user но, создавая файлы и каталоги сервер/пользователь www становится их владельцем выставляя права umask 022 которые не позволяют группе user удалить или перезаписать этот файл или каталог.
Для исправления этого недостатка нам нужно установить umask 002 на HTTPD процессы Apache. Устанавливать umask 002 на HTTPD процессы Apache мы будем в нескольких местах из которых запускается сервер Apache автоматически при старте системы и в ручном режиме:
Устанавливать umask 002 на HTTPD процессы Apache в OpenBSD версии 5.0 нужно немного иначе нежели в OpenBSD версии 4.9. В OpenBSD версии 5.0 установка umask 002 на HTTPD процессы Apache будет выглядеть следующим образом:
Возможные проблемы
Проблемы с РНР
OpenBSD 4.9 + Apache 1.3 + PHP 5.2.17 не работают РНР скрипты
С настройкой сервера могут возникнуть трудности которые могут выражаться в неработоспособном РНР. А каким образом РНР не работает? В командной строке все работает нормально, а вот на сервере не пашет;(, а ведь работало гадина, работало, работало а потом бац.. и всё пропало:)
Конфиг апача остался тот же, до того как РНР перестало обрабатываться. К конфигу апача, в конце подключался файл с настройками виртуалхоста директивой:
Include /var/www/conf/modules/*.conf
Настройки РНР, а вернее конфиг его параметров подключения к серванту подгружается через simlink директивой:
# # Include extra module configuration files # Include /var/www/conf/modules/*.conf
Проблема заключалась в этой строке, а точнее в подключении модуля "/usr/lib/apache/modules/mod_mime_magic.so". Отключите этот модуль и тогда РНР заработает!:)
# determining the MIME type of a file by looking at a few bytes of its contents # !!! if enable this module may by problem running PHP script (5.2.17) !!! # LoadModule mime_magic_module /usr/lib/apache/modules/mod_mime_magic.so
Проблемы с phpMyadmin
Если будут неизвестные ошибки например с номером 2002:
#2002 - The server is not responding (or the local MySQL server's socket is not correctly configured)
тогда попробуйте в конфигурационном файле phpMyadmin изменить имя хоста с localhost на 127.0.0.1:
vi /var/www/htdocs/phpmyadmin/config.inc.php