Настройка proftpd + LDAP

Материал из DvoWiki
Перейти к: навигация, поиск

Подготовка окружения

Допустим у нас уже есть развёрнутый LDAP сервер и нам надо настроить доступ к FTP директориям для пользователей, аккаунты которых там храняться. Прежде всего, перейдём на машину, на которой у нас будет развёрнут proftpd и установим необходимое программное обеспечение.

emerge -av proftpd

Проверяем, что ldap стоит в USE флагах. Для версии 1.3.3 он влючён по умолчанию. При установке proftpd, также должны установиться openldap и openssl, но приведу команды здесь для справки

emerge openldap
emerge openssl

После того как процесс установки закончен, можно приступать к настройке системы.

Настройка системы

Все настройки proftpd будут делаться для случая, когда нам необзрдимо нас троить LDAP доступ к виртуальному домену. При обычной настройке, директивы определяющие виртуальный домен можно просто опустить. Здесь приведён пример куска конфигурационного файла с комментариями.

emacs /etc/proftpd/proftpd.conf
 <VirtualHost ftp.your.host.ru> #Объявление виртуального хоста
   Port                      121 #Если 21 порт уже занят, используем какой-нибудь другой
   AuthOrder   mod_ldap.c        #Аутентифициремся сугубо через LDAP   
   DefaultRoot  /home/ftproot    #chroot в корень директории доступной по сети (полезная штука для того чтобы человек имеющий доступ к FTP  не лазил по всей файловой системе)
   #DefaultRoot ~                #Эту опцию можно испльзовать если вы хотите чтобы пользователь видел только свою домашнюю папку и ничего более
   
   LDAPUseTLS on   #Общаемся с LDAP сервером в зашифрованном соединении
   LDAPServer     "ldap.your_domain.ru" #Адрес LDAP сервера
   LDAPDNInfo     "uid=proftpd,ou=serv_accounts,ou=users,ou=department,dc=your_domain,dc=ru" "ПАРОЛЬ_СЛОЖНЫЙ" #системный пользователь, которым вы подключаетесь для поиска других пользователей в системе.
   LDAPDoAuth on  "ou=users,ou=department,dc=your_domain,dc=ru" "(&(uid=%v)(objectclass=posixAccount))" #Хитрый фильтр, который позволяет выбирать пользователей. 
   LDAPAuthBinds on         #Опция, которая говорит proftpd подключаться сперва системным пользователем (смотрим наверх), это позволяет нам использовать фильтры.
   LDAPDoUIDLookups            on "ou=users,ou=department,dc=your_domain,dc=ru"  #Где смотреть UID пользователя 
   LDAPDoGIDLookups            on "ou=groups,ou=department,dc=your_domain,dc=ru" #Где смотреть GID пользователя

   CreateHome on 755   #Создавать домашние директории пользователя, если их ещё нет. Директории создаются с правами 755

   LDAPGenerateHomedir       on  #Создавать домашние директории пользователя, если их ещё нет.(Да повторяет предыдущую функциональность)
   LDAPForceGeneratedHomedir on  #При заходе пользователя автоматически позиционировать его в домашнюю директорию
   LDAPGenerateHomedirPrefix /home/ftproot  #Директория в которой создаются домашние директории пользователей

 <IfModule mod_tls.c>   #Настраиваем подключение по tls           
   TLSEngine                       on   #включаем tls
   TLSLog                          /var/log/proftpd_tls.log #Лог файл
   #TLSProtocol                     TLSv1 #Эта директива не работает в виртуальном домене
   TLSOptions                      NoCertRequest

   #Пути до сертификатов
   TLSCACertificateFile            /etc/ssl/proftpd/cacert.pem                   
   TLSRSACertificateFile           /etc/ssl/proftpd/ftp.your.host.ru.crt
   TLSRSACertificateKeyFile        /etc/ssl/proftpd/ftp.your.host.ru.key

   TLSVerifyClient                 off #не проверять сертификат клиента
   TLSRequired                     off #Отключим соединение через TLS  по умолчанию, для улучшения безопасности стоит включить
   TLSRenegotiate                  required off
 </IfModule>


   <Directory /home/ftproot/*>
       <Limit ALL>
         AllowAll
       </Limit>

       <Limit SITE_CHMOD>
         AllowAll
       </Limit>
   </Directory>

</VirtualHost>

Теперь настроим LDAP клиент так, чтобы он мог общаться с сервером по зашифрованному TLS каналу. В настройках proftpd.conf мы уже прописали "LDAPUseTLS on". Отредактируем файл /etc/openldap/ldap.conf

emacs /etc/openldap/ldap.conf
TLS_CACERT /etc/ssl/proftpd/cacert.pem #путь до Certificate Authority
TLS_CERT        /etc/ssl/proftpd/ftp.your.host.ru.crt #путь до клиентского сертификата
TLS_KEY         /etc/ssl/proftpd/ftp.your.host.ru.key #путь до клиентского закрытого ключа 
TLS_REQCERT allow
URI ldap://ldap.your_domain.ru #адрес вашего лдап сервера
BASE ou=department,dc=your_domain,dc=ru # базовый путь в LDAP сервере