VestaCP — vesta-nginx failed with «libc.so.6: version `GLIBC_2.14′ not found»

После очередного автоматического обновления, панель перестала отзываться.
Причиной тому были ошибки:

/usr/local/vesta/nginx/sbin/vesta-nginx: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.14' not found (required by /usr/local/vesta/nginx/sbin/vesta-nginx)

/usr/local/vesta/php/sbin/vesta-php: /usr/lib/x86_64-linux-gnu/libxml2.so.2: version `LIBXML2_2.9.0' not found (required by /usr/local/vesta/php/sbin/vesta-php)

/usr/local/vesta/php/sbin/vesta-php: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.14' not found (required by /usr/local/vesta/php/sbin/vesta-php)

Фикс простой и написан на форуме Весты:

# apt-get update && apt-get --reinstall install vesta-nginx vesta-php

proxmox: qm list — нулевой размер диска

После обновления версии Proxmox до v2.2 (pve-manager/2.2/e94e95e9)
qm list стал показывать нулевой размер диска виртуальных машин:

~# qm list
      VMID NAME                 STATUS     MEM(MB)    BOOTDISK(GB) PID
       101 vm1.linevps.net      running    1024               0.00 162695
       102 vm2.linevps.net      stopped    512                0.00 19795
       103 vm3.linevps.net      running    2048               0.00 55934
       ....
       116 vm14.linevps.net     running    2048               0.00 63224

Фикс простой: Читать дальше proxmox: qm list — нулевой размер диска

Домены *.ua и whois

с 15 мая сервер whois.net.ua, который использовался для whois-а украинских доменов, теперь выдает информацию только о доменах *.net.ua (что в принципе, как бы логично).
В этой связи, при попытке проверить информацию о любом украинском домене можно видеть такой текст:

# whois test.ks.ua
% This server contains information for .net.ua only.
% Please, refer to whois.ua for information on other .ua subdomains.

Отныне, официальным адресом whois-сервера по доменам .UA является WHOIS.UA

А пока пакет whois не обновился (whois-сервера прописаны непосредственно в коде), проверить домены можно так:
whois -h whois.ua имя_домена.ua

В результате получим ожидаемый ответ:

# whois -h whois.ua test.ks.ua
% This is the Ukrainian Whois query server #I.
% Rights restricted by copyright.
%
% % .UA whois
% Domain Record:
% =============
domain:     test.ks.ua
admin-c:    SP999-UANIC
tech-c:     SP999-UANIC
status:     OK-UNTIL 20120309140546
nserver:    ns1.linevps.net
nserver:    ns2.linevps.net
nserver:    ns3.linevps.net
created:    0-UANIC 20090309140547
changed:    UARR169-UANIC 20110514194558
source:     UANIC

apache и htaccess

Итак, дано: сервер с директадмином и стандартными настройками apache.
До определенного момента все прекрасно работало и "вдруг" перестало.

Симптомы:
у одного из юзеров перестали выполняться cgi скрипты, на многих доменах вместо сайта - 404 ошибка или 403.
В корне доменов (domain/public_html/...) файла htaccess нет, но такое впечатление, что делается переопределение с index.php на index.html и другие манипуляции с типами.
Конфиги апачи правильные, ничего подозительного нет. У пользователя в аккаунте более 300 доменов, подумалось, может какие грабли у апачи при таком количестве доменов на одном пользователе.
Оказалось что проблема совсем в другом и достаточно тривиальна.

Фикс проблемы.
Выяснил, что в корне хомки (/home/username/) лежит файлик .htaccess, где все и реврайтилось.
После переименования /home/username/.htaccess все заработало как прежде.

Дополнение.
Точно также себя ведет вебсервер под ISPmanager-ом.

Вывод.
Не создавайте .htaccess выше public_html, т.е. выше корня сайта.
По крайней мере это касается серверов с directadmin-ом

mod_ruid2 и php mail() = sender verify failed

При использовании apache + mod_ruid2 в некоторых случаях может не доставляться почта, отправленная с помощью php-шной функции mail(), не смотря на все корректно заполненные заголовки.

При попытке отправить письмо приходит "отлуп":

Subject: Mail delivery failed: returning message to sender
This message was created automatically by mail delivery software. A message that you sent could
not be delivered to one or more of its recipients. This is a permanent error.
The following address(es) failed: remoteuser@domain.com
SMTP error from remote mail server after
RCPT TO:: host mx.domain.com.ua [89.1xx.xx.xx]: 550 Can't verify sender

Кто-то уже сталкивался с таким ?

Update:
Вылечилось легкой правкой конфига Exim-а

Причина проявления данного эффекта связана с тем, что вот эта директива, указанная в юзеровском httpd.conf:

    php_admin_value sendmail_path '/usr/sbin/sendmail -t -i -f user@domain.net'

полностью игнорировалась.

Фикс такой - добавляем в конфиг ексима следующее:

local_from_check = false
local_sender_retain = true
untrusted_set_sender = *

Перезапускаем и наслаждаемся отсутствием описанной выше проблемы.

Для справки.
до установки мода mod_ruid2 php скрипты работали под именем apache. В свою очередь, пользователь apache входит в trusted_users в конфигурации ексима.
Поэтому заголовок 'Sender:' изменялся с помощью "sendmail -t -i -f user@domain.net" вполне нормально.

После установки mod_ruid, скрипты выполняются уже от имени владельца, который не входит в trusted_users и естественно не мог сделать подмену 'Sender:' и 'From:'

vsftpd: No /usr/sbin/vsftpd found running; none killed.

Итак, сервер: Debian Squeeze + ISPmanager + vsftpd.
При попытке перезапуска фтп демона пишет:

# /etc/init.d/vsftpd restart
Stopping FTP server: No /usr/sbin/vsftpd found running; none killed.

При этом init-скрипт пишет номер процесса:

# cat /var/run/vsftpd/vsftpd.pid
4634

Но пишет неправильный PID.
По всей видимости, при установке ftp из панели ISPmanager, в конфиг /etc/vsftpd.conf была добавлена строка:

background=YES

Соответственно, в pid файл записывался некорректный пид процесса. Это древний баг, оказывается
Собственно, про это же написано и в /usr/share/doc/vsftpd/README.Debian:

The included init script uses start-stop-daemon's --background option to run
vsftpd in the background.  If you have "background=yes" in your configuration,
the wrong PID will be recorded in /var/run/vsftpd/vsftpd.pid, and the init
script may fail to restart or stop vsftpd later.  Just remove "background=yes"
from vsftpd.conf.

Т.е. комментируем или убираем вообще строку "background=yes", после чего init-скрипт начинает нормально запускать/останавливать vsftpd

PS. Как все таки, иногда, полезно почитывать документацию 🙂

Обновляем Exim для Directadmin

Все еще используете ексим 4.69 ?
Пора обновить версию.
Можно, конечно, собрать из исходников (как описано тут), а можно просто поставить уже готовый пакет.
Скачиваем и ставим пакет с сайта directadmin.
Для Debian:

# cd /usr/local/directadmin/custombuild
# wget http://files.directadmin.com/services/debian_5.0/da_exim-4.72.deb
# dpkg -i da_exim-4.72.deb

Для Debian 64bit:

http://files.directadmin.com/services/debian_5.0_64/da_exim-4.72.deb

Для CentOS:

# cd /usr/local/directadmin/custombuild
# wget http://files.directadmin.com/services/es_5.0/da_exim-4.72-2.i386.rpm
# rpm -Uvh da_exim-4.72-2.i386.rpm

Возможно понадобится доставить отсутствующие библиотеки (libperl5.10, db4 и т.д.).
Если отвалился TLS - выставить нужные права на /etc/exim.key (chown mail: /etc/exim.key)

Еще можно использовать dkim, достаточно поправить exim.conf и добавить проверки:

acl_smtp_dkim    = acl_check_dkim
.....
.....
###############################
#       ACL check_dkim        #
###############################
acl_check_dkim:
  defer dkim_status = fail
     logwrite   = DKIM test failed: $dkim_verify_reason
     message    = DKIM test failed: $dkim_verify_reason
     add_header = X-DKIM-FAIL: DKIM test failed: \
                  (address=$sender_address domain=$dkim_cur_signer), \
                  signature is bad.
  warn  dkim_status = invalid
     add_header = :at_start:Authentication-Results: \
                  $dkim_cur_signer ($dkim_verify_status); $dkim_verify_reason
     logwrite   = DKIM test passed (address=$sender_address domain=$dkim_cur_signer), \
                  but signature is invalid.
  accept dkim_status = pass
     add_header = :at_start:Authentication-Results: dkim=$dkim_verify_status, \
                  header.i=@$dkim_cur_signer
     logwrite   = DKIM test passed (address=$sender_address domain=$dkim_cur_signer), \
                  good signature.
  accept

Теперь ексим будет проверять цифровую подпись (если она есть) для входящих писем.
Для проверки можно отправить письмо с гугло- или mail.ru ящика. При получении письма в логе можно увидеть результат проверки:

2010-12-27 09:31:21 1PXxxx-000xxx-PR DKIM: d=gmail.com s=gamma c=relaxed/relaxed a=rsa-sha256 [verification succeeded]
2010-12-27 09:31:21 1PXxxx-000xxx-PR DKIM test passed (address=user@gmail.com domain=gmail.com), good signature.
...
2010-12-27 12:01:26 xxxx-xxx-FX DKIM: d=mail.ru s=mail c=relaxed/relaxed a=rsa-sha256 [verification succeeded]
2010-12-27 12:01:26 xxxx-xxx-FX DKIM test passed (address=user@mail.ru domain=mail.ru), good signature.

DKIM можно использовать как дополнительную проверку для фильтрации почты.

[warn] [client x.x.x.x] mod_fcgid: HTTP request length 138329 (so far) exceeds MaxRequestLen (131072)

Установлен apache + mod_fcgi. При аплоаде файлов свыше 128к получаем 500-ю ошибку, а в логе пишется сабж.
Фикс простой. Открываем конфиг mod_fcgi и увеличиваем максимальный размер, например в 10 мб:

# nano /etc/apache2/mods-enabled/fcgid.conf
<IfModule mod_fcgid.c>
  AddHandler    fcgid-script .fcgi
  FcgidConnectTimeout 20
  MaxRequestLen 10485760
</IfModule>

после релоада апачи - все работает.

apache и mod_ruid — исполнение скриптов от имени пользователя

При использовании mod_php все скрипты исполняются от имени веб-сервера (www-data, apache, etc), из-за чего довольно трудно определить чем занят тот или иной процесс и кто делает нагрузку.
Да, можно использовать suPHP, fastCGI и т.д. Но в таком случае можно забыть про выставление параметров в .htaccess, потеря производительности, невозможность использования mod_php и другие фишки.
Можно использовать peruser или mpm-itk. В первом случае будут плодиться процессы, каждый из которых будет кушать память, что не особо хорошо.
Во втором случае - нужно пересобирать апач.

Как же быть ?
Как вариант - использовать модуль mod_ruid2. Почему именно mod_ruid ? Одна из причин - модуль поддерживается и развивается. Последний коммит в svn сделан неделю назад (от даты данного поста), это вселяет определенную надежду, что модуль и дальше будет развиваться, а найденные баги будут исправляться. mod_ruid не требует пересборки ни apache ни чего либо еще, будут нормально работать акселераторы (eAccelerator, xcache).

Читать дальше apache и mod_ruid — исполнение скриптов от имени пользователя