Apache + PHP + MySQL

Вопросы настройки и работы с этой ОС.
Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
MT-Team
проходил мимо

Apache + PHP + MySQL

Непрочитанное сообщение MT-Team » 2009-03-10 11:44:02

Не особо давно мне потребовалось на одном предприятии мигрировать с сервера построенного на базе Windows 2003 на бесплатную и очень безопасную OpenBSD, с организацией на ней защищённого WEB-сервера. И так, поехали…
В моём случае была выбранна OpenBSD 4.4. Скачиваем пакеты c ftp://ftp.openbsd.org/pub/OpenBSD/4.4/packages/i386/

Код: Выделить всё

gettext-0.17.tgz		jpeg-6bp3.tgz			libiconv-1.12.tgz
libltdl-1.5.26.tgz		libmcrypt-2.5.7p1.tgz		libxml-2.6.32p1.tgz
mysql-client-5.0.51ap0.tgz	mysql-server-5.0.51ap1.tgz	p5-DBD-mysql-4.005.tgz
p5-DBI-1.604.tgz		p5-Net-Daemon-0.43.tgz		p5-PlRPC-0.2018p0.tgz
php5-core-5.2.6.tgz		php5-gd-5.2.6-no_x11.tgz	php5-mbstring-5.2.6.tgz
php5-mcrypt-5.2.6.tgz		php5-mysql-5.2.6.tgz		png-1.2.28.tgz
t1lib-5.1.0p1.tgz
Или скачайте http://www.mt-team.ru/soft/files.lst файл для пакетной загрузки через wget:

Код: Выделить всё

# wget -i files.lst
Далее, разрешаем запуск Apache в chroot-е, для этого правим конфиг rc.conf:

Код: Выделить всё

httpd_flags=""
Если в качестве параметра указать -u то Apache будет выведен из chroot-а, то в случае взлома WEB-сервера будет доступна вся файловая система сервера.

Прим. Masty: Нужно учесть, что chroot-окружение не видит ничего выше своего каталога. В данном случае корнем WEB сервера у нас будет /var/www/.
Устанавливаем MySQL, в процессе установки автоматически будут удовлетворенны все зависимости:

Код: Выделить всё

# pkg_add mysql-server-5.0.51ap1.tgz
Устанавливаем PHP. После установки создадим символьную ссылку на конфиг PHP:

Код: Выделить всё

# pkg_add php5-core-5.2.6.tgz
# ln -s /var/www/conf/modules.sample/php5.conf /var/www/conf/modules
Устанавливаем дополнительные расширения для PHP, и так же создаём ссылки.
Библиотека для работы с изображениями:

Код: Выделить всё

# pkg_add php5-gd-5.2.6-no_x11.tgz
# ln -fs /var/www/conf/php5.sample/gd.ini /var/www/conf/php5/gd.ini
Библиотека для работы с многобайтными кодами символов и строками:

Код: Выделить всё

# pkg_add php5-mbstring-5.2.6.tgz
# ln -fs /var/www/conf/php5.sample/mbstring.ini /var/www/conf/php5/mbstring.ini
Библиотека для шифрования. Алгоритмы: DES, TripleDES, Blowfish (по умолчанию), 3-WAY, SAFER-SK64, SAFER-SK128, TWOFISH, TEA, RC2 и режимов шифровки GOST в CBC, OFB, CFB и ECB.:

Код: Выделить всё

# pkg_add php5-mcrypt-5.2.6.tgz
# ln -fs /var/www/conf/php5.sample/mcrypt.ini /var/www/conf/php5/mcrypt.ini
Библиотека для работы с MySQL:

Код: Выделить всё

# pkg_add php5-mysql-5.2.6.tgz
# ln -fs /var/www/conf/php5.sample/mysql.ini /var/www/conf/php5/mysql.ini
Теперь, когда всё что нужно нам установилось, создадим 2 каталога: 1-й для временных файлов...

Код: Выделить всё

# mkdir -p -m 777 /var/www/tmp/
... а 2-й для сокета MySQL:

Код: Выделить всё

# mkdir -p -m 777 /var/www/var/run/
С установкой мы разобрались. И теперь переходим к самому главному – настройка. Настроим MySQL. Для автоматического запуска MySQL добавим данный скрипт в rc.local:

Код: Выделить всё

if [ -x /usr/local/bin/mysqld_safe ] ; then
	/usr/local/bin/mysqld_safe > /dev/null 2>&1 &
	echo -n ' mysql'
fi
Для подготовки сервера к первому запуску выполним следующий скрипт:

Код: Выделить всё

# ./mysql_install_db
Перезагружаем сервер для запуска MySQL. Ага, перезагрузились, демон mysqld стартовал. Дальше нужно выполнить скрипт для установки пароля для root пользователя в MySQL, и настроить основные параметры безопасности:

Код: Выделить всё

# ./mysql_secure_installation

Enter current password for root (enter for none): (нажимаем Enter, т.к. по умолчанию пароля нет)
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MySQL
root user without the proper authorisation.

Set root password? [Y/n] y (Отвечаем Yes - чтобы установить новый пароль)
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
 ... Success!

By default, a MySQL installation has an anonymous user, allowing anyone
to log into MySQL without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y (Отвечаем Yes - чтобы удалить анонимных пользователей)
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] y (Отвечаем Yes, чтобы запретить root-у удалённый вход)
 ... Success!

By default, MySQL comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y (Отвечаем Yes, чтобы удалить тестовую базу данных)
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y (Отвечаем Yes, чтобы перезагрузить привилегии)
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MySQL
installation should now be secure.
Теперь самое главное без чего вся эта конструкция толком в chroot-е не заработает. Меняем в конфиге my.conf путь к папке с сокетом:

Код: Выделить всё

[client]
socket          = /var/www/var/run/mysql/mysql.sock
[mysqld]
socket          = /var/www/var/run/mysql/mysql.sock
Для перезапуска MySQL нужно писать так:

Код: Выделить всё

# kill -HUP `cat /var/mysql/{полное_доменное_имя_сервера}.pid`
Теперь перезагружаем сервер или делаем рестарт mysqld и если всё отлично, то по пути /var/www/var/run/mysql/ должен лежать файл сокета: =mysql.sock, и слушать порт 3306. Проверить можно так:

Код: Выделить всё

# netstat -a | grep mysql
tcp	0	0	*.mysql	*.*	LISTEN
0xd6032428 stream	0	0 0xd601e794	0x0	0x0	0x0 /var/www/var/run/mysql/mysql.sock
С MySQL сервером - всё. Идём дальше. Теперь будем настраивать Apache. Добавим индексные файлы в конфиг httpd.conf:

Код: Выделить всё

DirectoryIndex	index.html index.htm index.php
Отредактируем дополнительный конфиг php5.conf. Объясним PHP, что нужно обрабатывать и HTML файлы:

Код: Выделить всё

AddType application/x-httpd-php .php .phtml .php3 .htm .html
AddType application/x-httpd-php-source .phps
DirectoryIndex index.html index.htm index.php
С Apache - всё. Теперь подправим конфиг php.ini:

Код: Выделить всё

session.save_path = "/tmp"
session.cookie_path = "/tmp"
... и в последний раз перезагружаем сервер. Всё, задача по поднятию WEB-сервера выполнена на 100%. Идём пить пиво...

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

MT-Team
проходил мимо
Сообщения: 1
Зарегистрирован: 2009-03-10 11:45:31
Откуда: Кострома
Контактная информация:

Re: Apache + PHP + MySQL

Непрочитанное сообщение MT-Team » 2009-03-10 11:48:00

Статью писал сам, всё реально рабочее. Оригинал на http://www.mt-team.ru/phpbb/viewtopic.php?t=3. Если есть желание выкладывайте в статьи по OpenBSD.

Аватара пользователя
Useroff
мл. сержант
Сообщения: 113
Зарегистрирован: 2008-09-21 7:11:09

Re: Apache + PHP + MySQL

Непрочитанное сообщение Useroff » 2009-03-10 15:27:52

Еще довно написал, http://servmast.ru/index.php?newsid=19
LOL

t1m0n
проходил мимо
Сообщения: 8
Зарегистрирован: 2008-08-10 12:34:52

Re: Apache + PHP + MySQL

Непрочитанное сообщение t1m0n » 2009-11-12 5:02:12

сдала всё по статье
Celeron 1.7Ghz, оперативки 762mb
движок wordpress
тормазит нереально + грузит проц
один юзер может через браузер завалить сервак
в чём может быть дело?