Установка Apache + PHP + MySQL под OpenBSD 5.0

archive view archive save

openbsd2 Здесь приводятся детальные инструкции по установке и настройке 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
 

Если будете получать сообщения типа:

could not determinate the servers fully qualified domian name, using ... for ServerName

тогда в конфиге /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:

UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root';
FLUSH PRIVILEGES;
 

выполните команду:

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" и хоть там все разрешено в смысле РНР функций и пр., но из-за бардака с правами там не возможно находится!

А поскольку планирование регистрации пользователей и прав доступа дело серьезное и здесь нам бардак незачем, то мы постараемся прямо вытянув руки настроить всё должным, безопасным и функциональным образом, а именно:

  1. Файлы на хост будем заливать через SFTP;
  2. За-chroot-тим SSH чтобы юзеры не гуляли по всему дереву системы;
  3. Создадим отдельную группу vuser для пользователей виртуального хостинга;
  4. Пользователей создаем и добавляем в группу с именем самого пользователя и в группу vuser;
  5. В группу каждого нового пользователя добавляем пользователь www;
  6. Установим umask 002 на пользовательские SFTP процессы дабы при загрузке пользователями своих файлов выставлять нужные нам права на каталоги 775 и 664 на файлы;
  7. Установим 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
 

Автор: Олег Головский


Об авторе
Иван Шаман
Меня нет ни в Инстаграмме ни в Фейсбуке, я просто хожу по улицам и рассказываю первым встречным: сколько зарабатываю; с кем дружу; где живу и чем дышу. У меня даже появилось несколько подписчиков: ПСИХоЛОХ и участковый полицай!
Ещё статьи автора
Комментарии в блоге
Новое на форуме