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. Как все таки, иногда, полезно почитывать документацию 🙂

/lib/libc.so.6: version ‘GLIBC_2.11’ not found

Попал в руки сервер Debian Lenny 5.0.7 со следующими симптомами:
не добавляются юзеры,  часть сервисов отвалилась (exim и dovecot, в частности, остальное не проверял), а при попытке что-ли установить получаем:

dpkg: /lib/libc.so.6: version `GLIBC_2.8' not found (required by dpkg)
dpkg: /lib/libc.so.6: version `GLIBC_2.11' not found (required by dpkg)
E: Sub-process /usr/bin/dpkg returned an error code (1)

Смотрим почему:

# ldd -v /usr/bin/dpkg
/usr/bin/dpkg: /lib/libc.so.6: version `GLIBC_2.8' not found (required by /usr/bin/dpkg)
/usr/bin/dpkg: /lib/libc.so.6: version `GLIBC_2.11' not found (required by /usr/bin/dpkg)
linux-vdso.so.1 => (0x00007fffeccfd000)
libc.so.6 => /lib/libc.so.6 (0x00007f4a09e8d000)
/lib64/ld-linux-x86-64.so.2 (0x00007f4a0a1e0000)

Version information:
/usr/bin/dpkg:
libc.so.6 (GLIBC_2.4) => /lib/libc.so.6
libc.so.6 (GLIBC_2.8) => not found
libc.so.6 (GLIBC_2.3) => /lib/libc.so.6
libc.so.6 (GLIBC_2.3.4) => /lib/libc.so.6
libc.so.6 (GLIBC_2.11) => not found
libc.so.6 (GLIBC_2.2.5) => /lib/libc.so.6
/lib/libc.so.6:
ld-linux-x86-64.so.2 (GLIBC_2.3) => /lib64/ld-linux-x86-64.so.2
ld-linux-x86-64.so.2 (GLIBC_PRIVATE) => /lib64/ld-linux-x86-64.so.2

Примечательный факт: /lib/libc.so.6 был не симлинком на libc-2.7.so, а был самостоятельным файлом.
Мдааа.. ))
На всякий случай попросил клиента заказать ipkvm и liveCD, а также показать /etc/apt/source.list (Откуда в lenny libc-2.11 ??).
После увиденного я вообще удивился как оно еще жило. Были подключены репы stable и sid (жуть !), да в придачу еще и от убунты репа. Apt-Pinning , естественно не использовался.

Пришлось хаком приводить систему в чувства.
Убрал лишние репы, скачал нормальный штатный deb пакет dpkg.
Так как установить его все равно не получится, подменил файл /usr/bin/dpkg на тот который из deb-пакета.
dpkg заработал, уже лучше.

Ну а дальше пошли уже мытарства по вычистке системы от всего лишнего и чуждого для этой версии. Вот тут как раз и пригодился ipkvm.
Загрузился в rescue режиме, поднял сеть, потом chroot /dev/sda1 (диск был разбит на root и swap)
Перелинковал libc.so.6 на libc-2.7.so ну и на всякий случай переустановил libc6, а то мало ли откуда там файл вместо симлинка взялся.
После чего попытка взлететь с родного винта.

Скажу, что на этот раз повезло и система поднялась удачно.
Правда, после этого было потрачено пару часов на вычистку и переустановку пакетов.
Но в итоге, все заработало как и должно работать, клиент доволен.
Ну и я доволен, что смог помочь )

Обновляем 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>

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

/dev/null: Permission denied

Попался тазик, где происходит сабж.
Клиент чудным образом выставил на /dev/null левые права:

# ls -la /dev/null
-rw-r--r-- 1 root munin 38 2010-12-23 21:01 /dev/null

Фикс простой – получаем root-овые права и чиним:

# rm /dev/null && mknod -m 0666 /dev/null c 1 3
# ls -la /dev/null
crw-rw-rw- 1 root root 1, 3 2010-12-24 01:53 /dev/null

Вот теперь правильно и все работает.

На всякий случай нужно убедиться, что udev при старте системы выставляет нужные права. В его правилах должна быть строка:

# grep null /etc/udev/rules.d/*permissions.rules 
KERNEL=="null",         MODE="0666"

Очередная лажа с ядром.

Итак, вот что я сегодня выкопал.
Локальная уязвимость в ядре позволяет устроить ДоС.

Проверил на ядрах центоса, дебиана. Результат везде один – отказ в обслуживани. Запущенный процесс не убивается, никак.
Помогает физический ребут 🙂

В оригинале:

Simple kernel attack using socketpair. easy, 100% reproductiblle, works under guest. no way to protect 🙁
Process become in state ‘Running’ but not killalble via kill -KILL.
eat 100% CPU, eat all available internal file descriptors in kernel

Вот так.
Найдено здесь.
фикс: использовать grsecurity или патчить ядро.

nginx 0.8.x – стабильная версия

Наконец-то свершилось 🙂

Статус версии 0.8.x изменён на стабильный.
Во время разработки этой версии, среди прочего, появились

    * поддержка именнованых выделений в регулярных выражениях,
    * поддержка файлового AIO во FreeBSD и Linux,
    * SSL CRL,
    * модули SCGI и uwsgi.

Источник: http://nginx.org/pipermail/nginx-ru-announce/2010/000027.html

Одновременно с изменением статуса ветки, вышла новая версия – 0.8.51

Изменения в nginx 0.8.51 27.09.2010 *) Изменение: директива secure_link_expires упразднена. *) Изменение: уровень логгирования ошибок resolver'а понижен с уровня alert на error. *) Добавление: теперь параметр "ssl" listen-сокета можно устанавливать несколько раз.