ProFTPD
ProFTPD доступный по GPL ftp-сервер, который может выполняться на многих UNIX-платформах. Он поддерживает новые свойства типа виртуальных ftp, индивидуальной настройки каталогов (в каждом каталоге используется файл .ftpaccess, аналог файла .htaccess в Apache), выдыхающиеся логины и многое другое. Он также поддерживает действительно полезные свойства типа ограничения загрузок и намного более жесткие средства управления защитой, чем WU-FTPD.
Основной файл конфигурации ПроФТПДа называется /etc/proftpd.conf, он имеет Apache-стиль, который я нахожу приятным. ProFTPD может быть выполнен из inetd (и использовать TCP_WRAPPERS) или выполнен как самостоятельный сервер. Он также поддерживает файлы конфигурации каталога, чтобы ограничить доступ и т.д. ProFTPD также поддерживает виртуальные ftp (хотя в отличие от виртуального www-сервера нужен лишний IP-адрес), причем каждый сайт может быть конфигурировано по-своему (различный анонимный доступ и другие параметры). Файл proftpd.conf обычно имеет раздел глобальных параметров настройки (inetd или автономный, максимальное число процессов, от какого имени работать и тому подобное), сопровождаемый заданной по умолчанию конфигурацией плюс настройка для конкретного сайта (или набора вирьуальных сайтов).
Пример настройки сервера ProFTPD для запуска из inetd без анонимного доступа:
ServerName "ProFTPD Default Installation" ServerType inetd DefaultServer on Port 21 Umask 022 MaxInstances 30 User nobody Group nobody <Directory /*> AllowOverwrite on </Directory>
Доустим, Вы хотите управлять доступом к серверу ftp исходя из IP-адресов, имен хостов и доменов (хотя лучше полагаться только на IP). Вы могли бы достичь этого через правила firewall, но это имеет тенденцию замедлять машину (особенно, если Вы добавляете большое количество правил как обычно и бывает). Вы могли бы использовать TCP_WRAPPERS, но Вы не будете способны выборочно ограничить доступ к виртуальным и анонимным сайтам. Но всего этого можно достичь в файле proftpd.conf директивой ?<Limit LOGIN>?.
Пример ниже разрешает доступ всем машинам 10.1.*.* и машине 1.2.3.4, всем остальным доступ запрещен.
<Limit LOGIN> Order Allow,Deny Allow from 10.1., 1.2.3.4 Deny from all </Limit>
Если Вы помещаете это внутри директив ?<VirtualHost>? или ?<Anonymous>? это применяется только к соответствующему виртуальному или анонимному сайту, при помещении в директиву ?<Global>? это будет применено ко всем секциям ?< VirtualHost>? и ?<Anonymous>?, а при помещении в настройки сервера (с ?ServerName? и связанными данными) это будет вести себя подобно TCP_WRAPPERS, любая машина не из диапазона 10.1.*.*, и не 1.2.3.4 получат отказ ри соединении с портом 21, в противоположность тому, что им просто было бы отказано в соединении, если бы эти ограничения были бы в секциях ?<Global>?, ?<VirtualHost>? или ?<Anonymous>?.
Если нужен анонимный доступ, просто допишите:
<Anonymous ~ftp> User ftp Group ftp RequireValidShell off UserAlias anonymous ftp MaxClients 10 DisplayLogin welcome.msg DisplayFirstChdir .message <Directory *> <Limit WRITE> DenyAll </Limit> </Directory> </Anonymous>
Это назначит ?ftp? домашний каталог, как и прочим пользователям, (при нормальной настройке ?~ftp? скорее всего он будет /home/ftp) в качестве корневого каталога для анонимных пользователей, ProFTPD выполнится как пользователь ?ftp? группы ?ftp?, когда пользователь заходит анонимно (в противоположность регистрации нормального пользователя), и число анонимных входов в систему будет ограничено 10. Также будет отображен файл /home/ftp/welcome, а при переходе в любой каталог, содержащий файл .message, его содержимое также будет отображаться. Директива ?< Directory *>? охватывает /home/ftp/* и не дает заисывать что-либо в данную иерархию. Если нужен каталог incoming (для входящих файлов) просто допишите после директивы ?<Directory *>?:
<Directory incoming> <Limit WRITE> AllowAll </Limit> <Limit READ> DenyAll </Limit> </Directory>
Это позволит записывать файлы в /home/ftp/incoming/, но не читать их. ProFTPD с его богатыми возможностями требует больше времени на настройку, чем WU-FTPD, но, видимо, того стоит. Загрузить ProFTPD с документацией на английском можно с
http://www.protftpd.net.
proftpd-ldap
proftpd-ldap позволяет Вам управление паролем, используя LDAP. Доступен на
http://horde.net/~jwm/software/proftpd-ldap.