Повышаем безопасность стека web-приложений (виртуализация LAMP, шаг 1/6)

в 7:28, , рубрики: Apache, CentOS, lamp, nfs, nfsv4, nginx, Веб-разработка, Серверная оптимизация, Серверное администрирование, метки: , , , , ,

Настройка доступа web-сервера Apache/Lighttpd/Nginx к файлам сетевой файловой системы (NFS)

Мы продолжаем переводить серию уроков о виртуализации и настройке LAMP сервера с сайта www.cyberciti.biz и переходим к первому практическому шагу — созданию сетевого хранилища файлов

Создание хранилищ общего сетевого доступа NFSv4.0 (Network File System) в ОС Linux и Unix не сильно отличается от создания иных общих сетевых ресурсов Apache/Lighttpd/Nginx. Для этого произведем следующие настройки нашего файлового сервера/VM vm05 с IP-адресом 192.168.1.14.

Linux NFS-сервер: синхронный или асинхронный режим работы

Вам нужно выбрать наиболее подходящий для вас режим работы NFS-сервера. В асинхронном режиме (async option) ответы на запросы к серверу происходят без ожидания окончания записи или изменений в файлах диска (если запись происходят в момент обращения). Производительность такого режима более высокая, но достигается она ценой целостности данных и грубая перезагрузка сервера (в случаи системного сбоя или иных причин) может привести к потере данных или их повреждению. В синхронный режиме работы (sync option) ответ  на запрос к серверу происходят лишь по окончанию записи. Мы настоятельно рекомендую вам использовать именно этот –  второй режим синхронизации с включенным NFS-кэшированием на локальных узлах Apache/Lighttpd/Nginx, т.е. серверах vm01 и vm02.

Как создать «расшаренный» сетевой ресурс

Для начала, с помощью yum-менеджера, установим пакеты ПО сервера NFS:

# yum groupinstall "NFS file server"

или же так…

# yum install nfs-utils nfs4-acl-tools portmap

…и активируем установленные службы:

# chkconfig nfs on
# chkconfig rpcbind on
# chkconfig rpcidmapd on
# chkconfig nfslock on

Создание учетной записи пользователя NFS-сервера.

Для организации общего доступа к файлам NFS-сервера мы будем использовать учетные данные пользователя Apache. Те же самые учетные записи будут использоваться на серверах vm01, vm02, vm03 и vm05. Чтобы создать учетную запись пользователя на сервере NFSv4 мы воспользуемся командой useradd:

##################################################################################
### Отметим, что на серверах CentOS/RHEL, правами по умолчанию для apache      ###
### являются UID/GID 48, настроим права apache на машинах vm01 и vm02 в        ###
### соответствии с этим                                                        ###
##################################################################################

# /usr/sbin/groupadd -g 48 apache
# /usr/sbin/useradd -s /sbin/nologin -g 48 -u 48 -M -d /var/www apache
# /usr/bin/passwd -l apache

Не устанавливайте веб-сервера Apache2 на сервер NFSv4.

/etc/idmapd.conf настройка nfs сервера

Демон имен служб NFSv4 ID (rpc.idmapd) обеспечивает работу ядра клиента и сервера NFSv4, связывая последних через запросы и преобразуя ID в имена, а имена в ID. Для настройки демона отредактируем файл /etc/idmapd.conf:

# vi /etc/idmapd.conf

Следующие настройки будут прописаны для локального домена NFSv4. Имя DNS хоста по умолчанию следует заменить на доменное имя вашего хоста.

Domain = cyberciti.biz

Так же убедитесь, что настройки маппинга прописаны следующим образом:

[Mapping]

Nobody-User = nobody
Nobody-Group = nobody

Сохраните и закройте файл.

Общий доступ к файловой системе

Чтобы создать общий сетевой ресурс /var/www/static и /var/www/html, выполним следующие действия. Используйте команду mkdir, чтобы создать нужную директорию на сервере NFSv04:

# mkdir -p /exports/{static,html}

Установим связь между созданными директориями с директорией /exports:

# mount --bind /var/www/html /exports/html
# mount --bind /var/www/static /exports/static

Отредактируем файл /etc/fstab:

# vi /etc/fstab

Добавив к нему следующие записи:

/var/www/html /exports/html none bind
/var/www/static /exports/static none bind

Сохраните и закройте файл. Отредактируем теперь файл /etc/exports:

# vi /etc/exports

Добавим к нему следующие параметры:

#################################
### Экспорт для vm01 и vm02 ###
### by vivek Thu June 21,2012 ###
#################################
## Корневая папка nfs, fsid=0 означает NFSv4 ##
/exports  192.168.1.10(rw,fsid=0,no_subtree_check,async) 192.168.1.11(rw,fsid=0,no_subtree_check,async)

### Конфигурация NFS для домена www.cyberciti.biz ###
/exports/html  192.168.1.10(rw,no_subtree_check,async,nohide) 192.168.1.11(rw,no_subtree_check,async,nohide)

# Статические файлы экспортируем в режиме «только-чтение» (ro).                   #
# Если пользователь может загружать файлы, смените режим на «чтение-и-запись» (rw)#
	/exports/static 192.168.1.10(ro,no_subtree_check,async,nohide) 192.168.1.11(ro,no_subtree_check,async,nohide)

Сохраним и закроем файл. Теперь можно запустить nfs и связанные с ней службы:

# /sbin/service rpcbind start
# /sbin/service rpcidmapd start
# /sbin/service nfslock start
# /sbin/service nfs start

Обеспечение безопасности сервера NFSv04

Вы можете установить межсетевой экран (firewall) и настроить TCPWrapper по приведенному по ссылке сценарию. Или же настроить таблицу iptables, используя фиксированные порты на сервере NFS. Вы, также, можете использовать сетевое представление или маскированное (network/mask) машин (vm01, vm02) в вашей сети, подняв файловую систему NFS с этого сервера. Отредактируйте файл /etc/sysconfig/iptables, добавив следующие параметры. Убедитесь, что эти параметры прописаны до строк LOG и DROP:

## открыть порт nfsv4-серверва для локальных узлов и машин                      ##
-A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 2049 -j ACCEPT

Сохраним и закроем файл. Перезапустим службу iptables:

# service iptables restart

«Расшаренные» ресурсы

Теперь вы можете загрузить статические файлы в /var/www/static и php/html файлы в /var/www/html директории сервера. Не ставьте Unix-сокеты на расшаренной файловой системе NFS. Если вы используете SELinux необходимо настроить стандартные права доступа и права владельца файлов с учетом требований безопасности SELinux, но для проверки работы системы можно (временно) отключить SELinux. Подробнее смотри в материалах cyberciti.biz:

  1. Временное отключение SELinux [eng]
  2. Отключение SELinux для Apache/httpd в Linux (не рекомендуется) [eng]

Последнее замечание об NFS

  • В приведенном примере конфигурации NFS является «точкой отказа» для внутреннего RAID массива дисков. Однако разрешить эту задачу вы можете установкой устройств SAN или NAS хранения. Высокая избыточность хранения увеличить стоимость проекта.
  • Кроме того, убедитесь в том, что каждая настроенная нами виртуальная машина выступает либо клиентом, либо сервером, а не тем и другим одновременно.
  • Дабы избежать проблем с обслуживанием и безопасностью, NFS должна быть развернута в простейшей конфигурации.
  • Вводная часть
  • Шаг №1: Настройка / Установка: NFS файловый сервер
  • Шаг №2: Настройка / установка: сервер баз данных MySQL
  • Шаг №3: Настройка / Установка: Memcached сервера кэширования
  • Шаг №4: Настройка / Установка: Apache + php5 приложение веб-сервера
  • Шаг №5: Настройка / Установка: веб-сервер Lighttpd для статических активов
  • Шаг №6: Настройка / Установка: Nginx обратный прокси-сервер

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

Автор: danielnewman

* - обязательные к заполнению поля