Тема: «Установка и настройка Web-сервера Apache+php+Mysql»

Вид материалаДокументы

Содержание


Limit, метод Директива Limit
Limit можно использовать такие директивы: allow
Пример 4. Директивы
Пример 6. Использование директивы require
Пример 8. Блок
Виртуальные HTTP-серверы
Виртуальные серверы с идентификацией по имени
ServerAlias www.dhsilabs.com www2.dhsilabs.com
Виртуальные серверы с идентификацией по IP-адресу
Пример 10. Идентификация по
Конфигурирование Apache с помощью netconf
Установка MySQL
Flush privileges
Подобный материал:
1   2   3


Таблица 2 Допустимые опции директивы Options

Опция

Описание

None

He разрешается использование каких-либо функций

All

Разрешаются все функции

FollowSymLinks

Разрешается использовать символические ссылки. С точки зрения безопасности не рекомендуется использовать этот режим

SymLinkslfOwnerMatch

Разрешается использование символических ссылок, если ссылка указывает на объект, который принадлежит тому же пользователю, что и ссылка

ExecCGI

Разрешается выполнение CGI-сценариев

Indexes

Если эта опция выключена, сервер не будет передавать содержимое каталога при отсутствии файла index.phpl

Includes

Разрешено использование серверных включений. Реко­мендуется отключить эту опцию, поскольку это сильно нагружает сервер

IncludesNoExec

Разрешает использование серверных включений, но запрещает запуск из них внешних программ


Использование директивы Limit имеет следующий вид:

Limit, метод

Директива Limit ограничивает доступ к файлам в определенном катало­ге. Параметр метод определяет метод передачи, например, GET или POST. Директиву Limit можно использовать внутри блоков Directory, Location или в файле .htacccess.


Блок директив Limit

В блоке Limit можно использовать такие директивы: allow (разрешить), deny (запретить), order (порядок), require (требуется). После директивы allow следует слово from, после которого можно указать IP-адрес, адрес сети, домен или просто имя компьютера. Слово all обозначает все ком­пьютеры. Например, требуется запретить доступ всем компьютерам, кроме компьютеров, которые входят в домен ru (см. пример 4).

Пример 4. Директивы allow, deny

order deny, allow

deny from all

allow from ru

Следующий пример показывает, как разрешить доступ компьютерам толь­ко из вашей сети (см. пример 5). Пусть, при этом, сеть имеет адрес 192.168.1.0.


Пример 5. Разрешения доступа подсети 192.168.1.1.

order deny, allow

deny from all

allow from 192.168.1.1

Директива order определяет порядок выполнения директив allow и deny. Кроме значений allow, deny и deny, allow, директива order может содержать значение mutual-failure. В этом случае доступ будет отказан всем компьютерам, которые явно не указаны в списке allow.

Директиву require можно использовать для защиты каталога паролем. После названия директивы должен следовать список элементов: имена пользователей, групп, которые заданы в директивах AuthUserFile и AuthGroupFile. Можно использовать параметр valid-user, который укажет серверу предоставить доступ любому пользователю, имя которого имеет­ся в директиве AuthUserFile, если он введет правильный пароль (см. пример 6).


Пример 6. Использование директивы require



AuthUserFile /var/secure/.htpasswd

AuthName Security

AuthType Basic


order deny, allow


deny form all

allow from ссылка скрыта

require valid-user






В примере 6 для аутентификации используется файл паролей .htpasswd, который можно создать с помощью программы htpasswd. Директивы блока Limit разрешают доступ к любому каталогу сервера толь­ко пользователям домена ссылка скрыта

Кроме параметра valid-user допускается использование параметра users или grpoups. Данные параметры разрешают доступ только определенным пользователям или группам пользователей (см. пример 7).

Пример 7. Применения параметра users



AuthType Basic

AuthUserFile /var/users/ .htpasswd

AuthName UsersDir



require users denis igor evg






Блок директив Location


С помощью директив, расположенных в блоке Location, можно за­дать определенный URL-адрес, который предназначен для обозначе­ния каталогов, файлов или групп файлов. Обозначить группу файлов можно с помощью шаблонов, например, шаблон *.phpl определяет все файлы, имена которых заканчиваются на .phpl. В URL-адрес не вклю­чается протокол и имя сервера (см пример 8).

Пример 8. Блок Location



директивы управления доступом




Каталоги пользователей

Директива UserDir включает поддержку пользовательских каталогов. Эта директива определяет общее название подкаталога в домашних катало­гах всех пользователей. По умолчанию используется каталог public_html.

Доступ к файлам, расположенным в этих каталогах, производится с по­мощью указания через наклонную черту пользователя после имени сер­вера. Например, пусть имя сервера ссылка скрыта, имя пользователя — denis, тогда URL-адрес будет выглядеть так: http: //www. Server. com/ ~denis/. При этом сервер самостоятельно определит, где именно рас­положен домашний каталог пользователя. Если домашний каталог пользо­вателя /home/den, то сервер передаст клиенту файл /home/den/ public_html/index.phpl.

  1. Виртуальные HTTP-серверы


Концепция виртуальных хостов позволяет серверу Apache поддерживать несколько Web-узлов. Получается, что один Web-сервер заменяет несколь­ко серверов, и вместо одного узла пользователи видят отдельные Web-узлы. Это очень удобно, если нужно организовать персональные Web-узлы пользователей или собственные Web-узлы подразделений компании, на­пример, ссылка скрыта.

Сервер Apache можно настроить несколькими способами:
  1. чтобы запускался один сервер, который будет прослушивать ВСЕ обращения к виртуальным серверам,
  2. или запускать отдельный процесс для каждого виртуального сервера.

В первом случае один сервер будет одновременно обслуживать все вир­туальные. В этом случае нужно настраивать вирту­альные сервера с помощью директивы VirtualHost. Настройка отдельных процессов для каждого сервера осуществляется с помощью директивы Listen и BindAddress.

В зависимости от версии и от настроек Apache виртуальные узлы могут прописываться или в файле httpd.conf, или в файле vhosts.conf.

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

Виртуальные серверы с идентификацией по имени

Идентификация по имени имеет существенное преимущество перед иден­тификацией по IP-адресу: нет ограничения количества адресов, имею­щихся у вас

в распоряжении. Можно использовать любое количество виртуальных серверов, и при этом не потребуются дополнительные адреса. Такое возможно благодаря использованию протокола HTTP/1.1. Данный протокол поддерживается всеми современными браузерами.

Поддержка виртуальных хостов обеспечивается директивами VirtualHost и NameVirtualHost. Если ваша система имеет только один IP-адрес, его нужно указать в директиве VirtualHost. Внутри блока директивы VirtualHost записывается директива ServerName. Эта директива задает доменное имя для создаваемого виртуального сервера. Все директивы VirtualHost используют один и тот же IP-адрес, заданный директивой NameVirtualHost. В блоке VirtualHost записываются параметры виртуаль­ного сервера, причем они записываются для каждого виртуального сер­вера отдельно (см. пример 9).

Структура каталогов виртуального узла задается директивами DocumentRoot, ErrorLog и TransferLog. Из примера 9 видно, что кор­невым каталогом для нашего виртуального узла будет /var/httpd/ www/html, а протоколы будут находиться в каталоге /var/httpd/www/ logs/error.log.

Пример 9. Два виртуальных сервера – www и lib

ServerName den . dhsilabs.com







ServerName ссылка скрыта

ServerAdmin webmaster@den.dhsilabs.com

DocumentRoot /var/httpd/www/html

ErrorLog /var/httpd/www/logs/error.log

TransferLog logs/access.log






ServerName ссылка скрыта

ServerAdmin webmaster@den.dhsilabs.com

DocumentRoot /var/httpd/lib/html

ErrorLog /var/httpd/lib/logs/error.log

TransferLog logs/access.log




Если система имеет только один IP-адрес, значит доступ к основ­ному серверу станет невозможным, то есть вы не сможете использовать его напрямую. Можно основной сервер использовать в качестве вирту­ального. При наличии двух IP-адресов можно один присвоить основ­ному серверу, а другой — виртуальному.

Сервер Apache позволяет использовать несколько доменных имен для доступа к одному серверу, например:

ServerAlias ссылка скрыта ссылка скрыта

При этом запросы, посланные по IP-адресам, которые присвоены виртуальным хостам, должны соответствовать одному из указанных до­менных

имен. Чтобы зафиксировать запросы, не соответствующие ни одному их этих имен, нужно с помощью опции default:* создать вирту­альный хост, который будет обслуживать такие запросы:



Обратите внимание на то, что в рассмотренном примере адреса

www. dhsilabs . com и lib. dhsilabs . com должны быть прописаны в DNS.


Виртуальные серверы с идентификацией по IP-адресу

В директиве VirtualHost в качестве адресов можно использовать домен­ные имена, но лучше указывать IP-адрес, причем действительный, а не виртуальный. В этом случае вы не будете зависеть от DNS при разреше­нии имени. Также потребуется один IP-адрес для вашего основного сер­вера. Если же распределить все адреса между виртуальными серверами, то нельзя будет получить доступ к основному серверу.

Пример 10. Идентификация по IP-адресу




ServerName ссылка скрыта

ServerAdmin webmaster@den.dhsilabs.com

DocumentRoot /var/httpd/www/html

ErrorLog /var/https/www/logs/error .log





ServerName ссылка скрыта

ServerAdmin webmaster@den.dhsilabs.com

DocumentRoot /var/httpd/lib/html

ErrorLog /var/https/lib/logs/error.log



В приведенном примере (см. пример.10) сконфигурированы два вирту­альных сервера с идентификацией по IP-адресу. Один из них использует сам IP-адрес, а другой — доменное имя, соответствующее IP-адресу.

При конфигурировании виртуальных серверов можно использовать оп­цию ExecCGI, которая разрешает выполнение CGI-скриптов на вирту­альном сервере. Ниже приведен пример для почтового Web-интерфейса (см. пример 11)


Пример 11. Подключение почтового Web-интерфейса

# файл httpd.conf




order deny,allow

deny from all

allow from localhost

allow from 192.168

allow from 123.123.123.123

Options ExecCGI




#Файл vhosts.conf




ServerAdmin webmaster@den.dhsilabs.com

DocumentRoot /home/httpd/mail

ServerPath /mail

ServerName ссылка скрыта

ErrorLog logs/error_log

TransferLog logs/access_log

ErrorDocument 403 ссылка скрыта




#Error 403 — доступ извне, то есть почтовый интерфейс будет

#доступен только из локальной сети

  1. Установка Apache+PHP+MySQL под Linux (Unix)


Все необходимое программное обеспечение входит в состав Linux — сер­веры Apache и MySQL, PHP, а также дополнительные модули mod_php и php_mysql. Программное обеспечение находится:

ссылка скрыта — официальный сайт Apache Group;

ссылка скрыта — сайт разработчиков MySQL;

ссылка скрыта — официальный сайт разработчиков РНР.

Для установки сервера Apache необходимо установить пакеты apache и apache-docs. В первом из них находится сам сервер, а во втором — доку­ментация. В последних версиях нужно установить еще и пакет apache-common, содержащий необходимые файлы для запуска сервера. Проще всего установку Apache можно произвести, введя следующую команду: rpm -ih apache*

После установки сервер конфигурируется для запуска в режиме standalone, то есть он будет постоянно находиться в памяти. Для запуска и останова сервера Apache используются команды:


/etc/rc.d/init.d/httpd start;

/etc/rc.d/init.d/httpd stop.

или команды

service httpd start;

service httpd stop.

После успешной установки сервера необходимо отредактировать файл /etc/httpd/conf / httpd.conf.

В нем необходимо исправить директиву — ServerName. При этом, на данном этапе (пока новое имя сервера Apache не зарегистриро­вано на вашем сервере DNS), вместо того имени, которое будет исполь­зоваться в дальнейшем (например, ссылка скрыта), установите обыкновенное имя вашего сервера, например, server.firma.ru. Данное имя должно быть зарегистрировано на DNS-

сервере вашей сети. После этого запустите сервер. Затем откройте любой браузер и попробуйте обратить­ся к серверу ссылка скрыта

Теперь попробуйте обратиться к этому серверу с другого компьютера вашей сети: ссылка скрыта

Если вы увидите приветствие сервера в первом и во втором случаях, значит, сервер Apache нормально работает и можно приступать к его дальнейшему конфигурированию.

В отличие от Windows-версии Apache, в Linux-версии вам не нужно редактировать какие-либо другие директивы, поскольку стандартные значе­ния устраивают большинство пользователей. Вам также не нужно вручную прописывать РНР, поскольку он встраивается в Apache автоматически при установке пакета mod_php. Единственное, что вам нужно знать — это струк­туру каталогов — что и где лежит.

Корневым каталогом вашего Web-сервера является каталог /var/www/ html. Когда пользователь введет ссылка скрыта в строке браузера, ваш Web-сервер будет искать файл index.phpl именно в этом каталоге. Если данный каталог вас не устраивает, измените директиву DocumentRoot в файле конфигурации httpd.conf, после чего перезапус­тите Apache: service httpd restart.

Каталог /var/www/cgi-bin со­держит CGI-приложения: из этого каталога возможен запуск программ. Журналы сервера находятся в каталоге /var/log/httpd.


Конфигурирование Apache с помощью netconf

Практически все параметры Web-сервера Apache можно установить, ис­пользуя конфигуратор netconf (или linuxconf). Для этого запустите netconf и перейдите на вкладку Server Tasks, а затем нажмите на кнопку «Apache Web-server».

С помощью netconf устанавливаются основные параметры Apache (виртуальные хо­сты, параметры подкаталогов, спецификация каталогов и модулей, а также устанавливаются параметры модуля mod_ssl). Модуль mod_ssl обеспечивает поддержку защи­щенных SSL-соединений.


Установка MySQL

Благодаря своей про­стоте сервер MySQL приобрел широкое распространение в сети Интер­нет. MySQL идеально подходит практически для любого Интернет-проекта.

Прежде всего, нужно установить пакеты, необходимые для работы MySQL.
  1. MySQL_GPL-3.x.x
  2. MySQL_GPL-client-3.x.x
  3. MySQL_GPL-sharcd-libs-3.x
  4. MySQL_GPL-bench-3.x.x
  5. MySQL_GPL-resolveip-3.x.x

Проще всего воспользоваться командой rpm -ih MySQL* для установки серве­ра. После установки пакета нужно создать базу данных mysql:

mysql__install_db


Если основная база данных существует, программа сообщит об этом. Теперь нужно установить пароль для пользователя root. По умолчанию пользователь root не имеет пароля.

База данных mysql является системной базой данных и содержит следу­ющие таблицы:
  • таблицу db;
  • таблицу host;
  • таблицу user.

Таблица user содержит пароли всех пользо­вателей, которые имеют право работать с сервером. На данном (началь­ном) этапе в базу данных внесен только один пользователь — root. Для изменения пароля запустите сервер командой:

safe_mysqld &

Эта команда запустит сервер в режиме демона и освободит консоль. Если все пакеты были установлены правильно, вы увидите сообщение;

mysql: ready for connections

Затем введите команду:

mysql -u root mysql

Данная команда запускает клиент MySQL. При этом используется имя пользователя root. Последний параметр определяет базу данных — mysql.

Измените пароль суперпользователя с помощью команды:

UPDATE user SET Password=PASSWORD('new_password') WHERE user='root';

Теперь нужно, чтобы MySQL при­нял изменения. Для этого выполните еще один запрос SQL:

FLUSH PRIVILEGES;

Для принятия изменений можно также использовать программу mysqladmin с параметром reload:

mysqladmin -р reload

Выйти из клиента mysql вы можете, введя команду quit.

Установите права доступа к сценарию /etc/rc.d/init.d/mysql:

chmod +х /etc/rc.d/init.d/mysql

Теперь перезапустите сервер командой:

/etc/rc.d/init.d/mysql restart

Если вы забудете пароль, вы его уже не восстановите. Единственный выход из этого положения — удалить каталог /var/lib/mysql/mysql и создать базу mysql заново командой mysql_install_db.

Теперь вы уже не можете зарегистрироваться на сервере без пароля. Если вы введете команду mysql -u root mysql, то получите следующее сообщение:

ERROR: Access denied for user: ' root@localhost' (Using password: NO)

Для регистрации на сервере теперь нужно использовать команду

mysql -u root -р. Параметр -р запросит пароль при регистрации.

Последнее, что вам осталось сделать — это добавить сервер MySQL в ав­тозапуск. С этой целью перейдите в каталог /etc/rc.d/rc3.d/ и создай­те символическую ссылку на файл /etc/rc.d/init.d/mysql:

in -s S14mysql /etc/rc.d/init.d/mysql


Префикс S14 определяет очередность запуска сервера mysql. В данном случае он запустится после сервисов network (S10) и portmap (S11). У вас эти значения могут быть другими.

В своей работе демон mysqld использует файл журнала /var/log/ mysql.log. Именно в него заносятся все транзакции, а также все ко­манды, которые ввел пользователь. После установки сервера нужно вне­сти пользователей, которые имеют право работать с сервером баз дан­ных. Введите следующий запрос:

GRANT ALL PRIVILEGES ON *.* TO admin@localhost IDENTIFIED BY 'password' WITH GRANT OPTION;

Введенный запрос создаст пользователя admin, который будет иметь право выполнять любые операции со всеми базами данных. Данный пользователь будет иметь право подключаться к серверу с компьютера localhost, используя пароль password.

Маска *.* определяет, к каким базам данных и таблицам имеет право подключаться тот или иной пользователь. Первая звездочка определяет базу, а вторая — таблицу. Если нужно, чтобы пользователь admin имел право подключаться с любого хоста, используйте знак процента вместо имени хоста. В этом случае запрос будет выглядеть так:

GRANT ALL PRIVILEGES ON *.* TO admin@"%" IDENTIFIED BY

' password' WITH GRANT OPTION;

Вместо всех полномочий вы можете определить, какие действия может выполнять с базой тот или иной пользователь. Если вы являетесь хос­тинг-провайдером и предоставляете доступ пользователю к его базе дан­ных, то вы можете использовать следующий запрос:

GRANT CREATE, DROP, SELECT, INSERT, UPDATE, DELETE, INDEX ON user.* TO user@% IDENTIFIED BY 'user_password';

Перед выполнением данного запроса необходимо создать базу данных user.

Полный список полномочий представлен в табл. 3.


Таблица 3 Полномочия пользователей сервера MySQL

Полномочия

Описание

SELECT,

INSERT,

UPDATE,

DELETE

Одноименные операции с данными: пользователь имеет право просматривать, добавлять, модифи­цировать, удалять данные в таблицах базы данных

INDEX

Пользователь имеет право производить операции с индексами таблиц

REFERENCES

Пользователь имеет право работать со ссылками в базах данных и таблицах

CREATE,

DROP

Создание и удаление таблиц и баз данных

GRANT,

ALTER

Операции с полномочиями

RELOAD,

SHUTDOWN,

PROCESS

Пользователь имеет право перезагружать, останавливать сервер и просматривать все процессы (подключения)


Если запрос GRANT не работает, то можно внести пользовате­ля непосредственно в таблицу user базы данных mysql. Структура таблицы user выглядит следующим образом:


Host User Password Select_priv Insert_priv Update_priv Delete priv Create_priv Drop_priv Reload_priv Shutdown_priv Process_priv File_priv


Поля Host, User, Password — это, соответственно, узел, из которого пользователь может получить доступ, имя пользователя, пароль пользо­вателя. Все остальные поля задают полномочия для пользователя. Если выполнение какой-нибудь операции разрешено пользователю, соответ­ствующее поле должно быть равным «Y». В противном случае установите значение «N».

Например, нам нужно создать пользователя admin, который должен иметь все полномочия. Это можно сделать с помощью такого запроса SQL:

INSERT INTO user(Host,User,Password,Select_priv,Insert_priv, Update_priv, Delete_priv, Create_priv, Drop_priv, Reload_priv, Shutdown_priv, Process_priv, File_priv) VALUES ('localhost' , 'admin',

password('4td561sl2'),'Y','Y','Y','Y','Y','Y','Y','Y', 'Y','Y');

При вводе запроса обратите внимание на регистр названий полей. Сер­вер MySQL различает прописные и строчные буквы! С помощью выше­приведенного запроса был создан пользователь admin, который имеет право регистрироваться на сервере только из узла localhost. Если нужно разрешить регистрацию из любого узла сети, используйте знак процента, однако это не совсем корректно с точки зрения безопасности. Пользователь admin обладает всеми возможными привилегиями. Пароль пользователя — 4td561sl2.

Для создания обыкновенного пользователя используйте следующий запрос:

INSERT INTO user(Host, User, Password, Select_priv, Insert_priv, Update_priv, Delete_priv) VALUES('%', 'user', password (4234 5 6') , ' Y ' , ' У ' , ' Y ' , ' Y ' );