четверг, 24 октября 2013 г.

vsftpd + ldap на Debian Wheezy

Здесь будет дано описание того, как настроить FTP-сервер vsftpd на работу с базой пользователей из LDAP(при необходимости можно легко интегрировать в структуру Active Directory)

Прежде, чем приступим к установке необходимых пакетов, сделаем копии файлов:

root@srv:~# cp /etc/pam.d/common-* /root

Это необходимо сделать потому, что установка следующих пакетов приведёт к изменению этих файлов, следовательно в системе можно будет аутентифицироваться аккаунтами фтп-пользователей. Нам требуется только аутентификация пользователей vsftpd через ldap, но никак не возможность входа в систему под этими пользователями.

Установим необходимые пакеты:

root@srv:~# aptitude update && aptitude install vsftpd libnss-ldapd libpam-ldapd nslcd

Теперь необходимо сконфигурировать систему. Начнём с nslcd.conf:

# пользователь и группа от имени которых будет работать демон nslcd
uid nslcd
gid nslcd

# адрес, по которому доступен сервер LDAP
uri ldap://192.168.1.254/

# где искать пользователей и пароли
base dc=standart,dc=dn,dc=ua
base passwd ou=FTP,dc=example,dc=com
base shadow ou=FTP,dc=example,dc=com
# использовать протокол версии 3
ldap_version 3

# пользователь, от имени которого совершать запросы в ldap(должен иметь соответствующие разрешения)
binddn cn=authuser,dc=example,dc=com
bindpw secret

# включим поддержку tls
ssl start_tls
tls_reqcert allow

# область поиска
scope sub

# число процессов, обслуживающих запросы к серверу ldap
threads 5

Следующим этапом настроим/проверим файл nsswitch.conf. Он должен иметь такой вид:

hosts: files dns
networks: files

protocols: db files
services: db files
ethers: db files
rpc: db files

netgroup: nis

passwd: files ldap
group: files ldap
shadow: files ldap

Теперь настроим vsftpd на то, чтобы он брал пользователей из ldap. Для этого внесём изменения в файл /etc/pam.d/vsftpd. Закомментируйте в этом файле всё, что было на момент начала изменения или лучше создайте новый с таким содержимым:

account [success=1 default=ignore] pam_ldap.so
account requisite pam_deny.so
account required pam_permit.so

auth [success=2 default=ignore] pam_unix.so nullok_secure
auth [success=1 default=ignore] pam_ldap.so minimum_uid=1000 use_first_pass
auth requisite pam_deny.so
auth required pam_permit.so

#если вы желаете, чтоб домашний каталог создавался автоматом, то оставьте эту опцию
session optional pam_mkhomedir.so umask=0077

Теперь вернём на место оригинальные файлы common-auth, common-session, common-password и common-account(мы их копировали в самом начале):

root@srv:~# mv /root/common-* /etc/pam.d/

Осталась последняя часть - настроить сам vsftpd. Для этого редактируем /etc/vsftpd.conf:

# запускать как службу
listen=YES
# отключить анонимных пользователей
anonymous_enable=no
# разрешить локальных пользователей
local_enable=YES
# разрешить запись
write_enable=YES
# маска по-умолчанию для создаваемых файлов
local_umask=077
# активировать сообщения при переходах в каталогах
dirmessage_enable=YES
# использовать локальное время
use_localtime=YES
# включить логгирование загрузок/скачиваний
# Activate logging of uploads/downloads.
xferlog_enable=YES
# открыть 20 порт
connect_from_port_20=YES
# ограничить пользователей домашними каталогами(включим chroot)
chroot_local_user=YES
# использовать модуль pam для аутентификации пользователей
pam_service_name=vsftpd
# поддержка сессий(необходимо для автоматического создания домашнего каталога)
session_support=YES

Теперь нам надо позаботится о фаерволе(ведь мы же не будем выставлять в интернет "открытый" сервак, правда?). Нам необходимо подгрузить специальный модуль для ftp, чтобы iptables функционировало для ftp-соединений. Добавим этот модуль в /etc/modules и он будет загружаться при старте системы:

nf_conntrack_ftp

Добавим правило для iptables и перезапустим vsftpd:

root@srv:~# iptables -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
root@srv:~# /etc/init.d/vsftpd restart

Теперь наш сервер выполняет нужные для нас функции :)

P.S.


Всё бы хорошо, но! На данный момент в репозитории Debian Wheezy версия vsftpd, которая имеет неисправленный баг. И у вас в логах по этому поводу будут сыпаться ошибки:

500 OOPS: vsftpd: refusing to run with writable root inside chroot()
Login failed.

Вот здесь дано описание со ссылкой на исправленный пакет. Решением в данной ситуации будет установка пакета с патчем и добавлением опции "разрешения записи в корень chroot":

root@srv:~# wget http://ftp.cyconet.org/debian/pool/main/v/vsftpd/vsftpd_2.3.5-10~update.1_i386.deb
root@srv:~# dpkg -i vsftpd_2.3.5-10~update.1_i386.deb
root@srv:~# echo "allow_writeable_chroot=YES" >> /etc/vsftpd.conf && /etc/init.d/vsftpd restart

Вот теперь всё работает как часы. Удачи!

Комментариев нет:

Отправить комментарий