Здесь будет дано описание того, как настроить FTP-сервер vsftpd на работу с базой пользователей из LDAP(при необходимости можно легко интегрировать в структуру Active Directory)
Прежде, чем приступим к установке необходимых пакетов, сделаем копии файлов:
Это необходимо сделать потому, что установка следующих пакетов приведёт к изменению этих файлов, следовательно в системе можно будет аутентифицироваться аккаунтами фтп-пользователей. Нам требуется только аутентификация пользователей vsftpd через ldap, но никак не возможность входа в систему под этими пользователями.
Установим необходимые пакеты:
Теперь необходимо сконфигурировать систему. Начнём с nslcd.conf:
Следующим этапом настроим/проверим файл nsswitch.conf. Он должен иметь такой вид:
Теперь настроим vsftpd на то, чтобы он брал пользователей из ldap. Для этого внесём изменения в файл /etc/pam.d/vsftpd. Закомментируйте в этом файле всё, что было на момент начала изменения или лучше создайте новый с таким содержимым:
Теперь вернём на место оригинальные файлы common-auth, common-session, common-password и common-account(мы их копировали в самом начале):
Осталась последняя часть - настроить сам vsftpd. Для этого редактируем /etc/vsftpd.conf:
Теперь нам надо позаботится о фаерволе(ведь мы же не будем выставлять в интернет "открытый" сервак, правда?). Нам необходимо подгрузить специальный модуль для ftp, чтобы iptables функционировало для ftp-соединений. Добавим этот модуль в /etc/modules и он будет загружаться при старте системы:
Добавим правило для iptables и перезапустим vsftpd:
Теперь наш сервер выполняет нужные для нас функции :)
Всё бы хорошо, но! На данный момент в репозитории Debian Wheezy версия vsftpd, которая имеет неисправленный баг. И у вас в логах по этому поводу будут сыпаться ошибки:
Вот здесь дано описание со ссылкой на исправленный пакет. Решением в данной ситуации будет установка пакета с патчем и добавлением опции "разрешения записи в корень chroot":
Вот теперь всё работает как часы. Удачи!
Прежде, чем приступим к установке необходимых пакетов, сделаем копии файлов:
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
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
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
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
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
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.
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
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
Вот теперь всё работает как часы. Удачи!
Комментариев нет:
Отправить комментарий