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

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


    Similar posts

    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 8

      0
      > «и при вашем желании слушать дальше этот перевод.»
      Да, спасибо, давайте дальше
        0
        Мне кажется этой статье много неточностей например: iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 2049 -j ACCEPT открывает один TCP порт, NFS же по умолчанию работает по UDP причем большому диапазону портов.
          0
          NFS <= 3 но не NFS 4. В 4-й один TCP порт является новшеством и фишкой позволяющей наконец настроить фаервол.
            0
            Насколько я помню в в NFS 3 тоже можно настроить через один TCP порт. Если честно точно не знаю, но мне казалось что в NFS 4 также по умолчанию UDP.
        +1
        Я понял чем мне не нравятся эти статьи.

        Статья рассчитана на новичков, а по мне, так там ничего не объясняется. Описывается как сделать что-то, без объяснения зачем это делать, и почему именно так.

        За перевод традиционное спасибо. Такие статьи полезны обществу. :)
          0
          Такие статьи тоже не бесполезны для общества *
            0
            У меня не меньше «претензий» к материалу. Т.е. мы либо учимся, взвешивая варианты, либо читаем такик tutorial'ы. Зачем оно лично мне надо? Комментарии. Ваш в том числе. Например, в прошлой статье этого цикла вы мне «подарили» аббревиатуру «NOC», и по этому тэгу я на одном только хабре нашел много интересного материала.

            Критика тех или иных подходов в архитектуре сервера, основанная на вашей практики, порождает точки входа в google. По моему это уже ценно. Выше в комментариях вылезли вопросы о портах в различных версиях протокола NFS, хотя само использование этого протокола, как наиболее/наименее подходящего для работы никем еще не обсуждалось, а камни в прошлой статье уже кидались в нее.

            Было бы интересно послушать альтернативные взгляды на архитектуру. Меня не покидает чувство, что автор текста, так же как и я, когда сидит на сервере, то протоколирует putty в лог-файл, исправляет ошибочные шаги, удаляет лишнее и получается вот такой вот пошаговый инструктаж. Честь ему за то и хвала, т.к. у меня не хватило сил довести свои протоколы настройки до цельной статьи.

            Сами cyberciti.biz, авторы этого текста, позиционируют себя как большой FAQ. На него же похож howtoforge.com И у первых и у вторых я смотрю доп.материалы по возникающим вопросам и было бы здорово, если у меня получилось бы зацепить этим материалом темы для следующих переводов. Перевести многостраничные гайды по линуксу или фре — ну это вообще не формат сайта, хотя переводя вчитываешься гораздо глубже.

            Я побоялся делать интро от себя, рассказывая, с какой проблемой столкнулся и для чего меня понесло в виртуализацию, которую в данном материале и виртуализацией назвать не выходит. Найду материал по своей тематике — сразу сюда притащу.

            Если в общих чертах, то есть дефицит доступной информации, best practics от серьезных администраторов. Т.е. у меня есть задача — сайт с немаленькой аудиторией. Есть серверное хозяйство, которое нужно не только настроить раз в 5 лет и забыть, но и мониторить. Почему об этом никто из администраторов, настраивавших этот сервер прежде, не говорил владельцам ресурсов? Ну, потому что они — специалисты и они решили, что в нашем случае это не нужно. А когда настанет глубокая попа, когда кто-нибудь обнаружит, что есть проблемы в файловой системе, а SMART сыпет ошибки уже пол-года, тогда придет следующий администратор, перенесет все хозяйство на правильную архитектуру, поставит системы аналитики и мониторинга и до следующего «абзаца» все будут прибывать в неведении, что скрипт-кидиз давно и с любовью льют шелы через дырявый загрузчик картинок сайта в исполняемую директорию, а в движке сайта используется один популярный шелл в качестве менеджера файлов.

            В прошлом материале завязался небольшой диалог с пользователем EugeneBond, который мне может оказаться более полезным, чем всякие туториалы. Ваш комментарий окажется более информационным чем вся статья. Т.е. переводится только ради разговора на эту тему. Если есть темы и нюансы, о которых есть что почитать на английском, но хотелось бы пообсуждать на русском языке — «бери, переводи, читай комменты». Мне ссылку можно бросить, если это по теме и будет интересно — почитаю, переведу, запощу, обсудим. Вот такой я хитрец. Ваши знания в обмен на мои переводы. ;)

        Only users with full accounts can post comments. Log in, please.