Лидерами среди FTP-серверов на сегодняшний день являются pure-ftpd и proftpd. В последнее время использую proftpd с хранением списка пользователей в MySQL (как-то неохота заводить системных пользователей, если нужен всего лишь доступ по FTP. Итак, приступаем к установке. Переходим в каталог портов и запускаем установку.
# cd /usr/ports/ftp/proftpd/ # make install clean
Мой набор опций следующий:
Options for proftpd 1.3.4b [ ] IPV6 IPv6 protocol [ ] MEMCACHE Memcache support using libmemcached [ ] HTMLDOCS Include HTML documentation [*] NLS Native Language Support [*] PCRE Use Perl Compatible Regular Expressions
После этого необходимо собрать так же модуль, отвечающий за поддержку mysql
# cd /usr/ports/databases/proftpd-mod_sql_mysql # make install clean
Редактируем /usr/local/etc/proftpd.conf и приводим его к следующему виду:
# cat /usr/local/etc/proftpd.conf ServerName "TradeNarK Ftp Server" ServerType standalone DefaultServer on ServerIdent on "FTP Server ready" DeferWelcome off Port 21 Umask 022 TimeoutLogin 300 TimeoutIdle 36000 TimeoutNoTransfer 36000 TimeoutStalled 36000 TimeoutSession 0 User proftpd Group proftpd MaxInstances 100 MaxClientsPerHost 100 AllowRetrieveRestart on AllowStoreRestart on AllowOverwrite on AllowOverride off RootLogin off IdentLookups off UseReverseDNS off DenyFilter \*.*/ TimesGMT off DefaultRoot ~ RLimitCPU 1200 1200 RLimitMemory 256M 256M RLimitOpenFiles 1024 1024 PassivePorts 50000 60000 LogFormat default "%h %l %u %t \"%r\" %s %b" LogFormat auth "%v [%P] %h %t \"%r\" %s" LogFormat write "%h %l %u %t \"%r\" %s %b" SystemLog /var/log/proftpd/proftpd.log TransferLog /var/log/proftpd/xfer.log ExtendedLog /var/log/proftpd/access.log WRITE,READ write ExtendedLog /var/log/proftpd/auth.log AUTH auth LoadModule mod_sql.c LoadModule mod_sql_mysql.c <Global> SQLConnectInfo proftpd@localhost proftpd proftpd_password SQLAuthTypes Crypt SQLUserInfo users username password uid gid homedir NULL SQLDefaultGID 1112 SQLDefaultUID 1112 RequireValidShell off SQLAuthenticate users* SQLLogFile /var/log/proftpd.log SQLNamedQuery getcount SELECT "count, username from users where username='%u'" SQLNamedQuery updatecount UPDATE "count=count+1 WHERE username='%u'" users SQLShowInfo PASS "230" "You've logged on %{getcount} times, %u" SQLLog PASS updatecount </Global>
Мы указали в настройках что сервер будет работать на 21 порту в активном режиме и на диапазоне 50000-60000 в пассивном
Эти порты следует открыть в фаерволе. Для PF это делается следующим правилом:
pass in quick on $ext_if proto tcp from any to $ext_if port { 21, 50000:60000 }
Стоит отметить, то, что в целях безопасности, Proftpd мы будем запускать от имени непривилегированного пользователя. Соответственно займемся созданием этого пользователя
# adduser
Username: proftpd
Full name: FTP User
Uid (Leave empty for default):
Login group [proftpd]:
Login group is proftpd. Invite proftpd into other groups? []:
Login class [default]:
Shell (sh csh tcsh bash nologin) [sh]: nologin
Home directory [/home/proftpd]:
Home directory permissions (Leave empty for default):
Use password-based authentication? [yes]: no
Lock out the account after creation? [no]:
Username : proftpd
Password : <disabled>
Full Name : FTP User
Uid : 1112
Class :
Groups : proftpd
Home : /home/proftpd
Shell : /usr/sbin/nologin
Locked : no
OK? (yes/no): yes
adduser: INFO: Successfully added (proftpd) to the user database.
Add another user? (yes/no): no
Goodbye!
ВАЖНО!
Идентификатор пользователя и группы proftpd у вас будет свой. Соответственно при добавлении пользователя необходимо использовать его. Определить UID можно следующим способом:
# cat /etc/passwd | grep proftpd proftpd:*:1112:1112:FTP User:/home/proftpd:/usr/sbin/nologin
Далее необходимо создать каталог, где будут храниться логи нашего FTP-сервера.
# mkdir /var/log/proftpd
Далее создаем БД MySQL и пользователя с полными правами доступа на созданную БД и…
# fetch https://tradenark.com.ua/files/proftpd.sql # mysql -u proftpd -p proftpd < proftpd.sql
Далее создадим каталог и тестового пользователя FTP, указав директорией пользователя созданный каталог:
# mkdir -p /home/gleb/ftp # chown -R proftpd:proftpd /home/gleb/ftp # mysql -u proftpd -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 74435 to server version: 4.1.22 Type 'help;' or '\h' for help. Type '\c' to clear the buffer. INSERT INTO `proftpd`.`users` (`username` , `descr` , `password` , `uid` , `gid` , `homedir` , `shell` , `count` ) VALUES ('test', 'Test user', ENCRYPT( 'FTP-password_here' ) , '1112', '1112', '/home/gleb/ftp', NULL , '0' ); Query OK, 1 row affected (0.00 sec); quit Bye
Далее добавляем в /etc/rc.conf параметры запуска демона Proftpd:
# echo '# FTP' >> /etc/rc.conf # echo 'proftpd_enable="YES"' >> /etc/rc.conf
Вроде все, взлетаем:
#/usr/local/etc/rc.d/proftpd start Starting proftpd.
Теперь проверим, как функционирует наш FTP-сервер:
# telnet localhost 21 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 FTP Server ready quit 221 Goodbye.
Отлично. Сервер успешно отвечает на запросы.
Советую каждому пользователю назначать отдельный каталог. «Выше» своего каталога они не выйдут (опция DefaultRoot в конфигурационном файле).
Записал небольшую инструкцию для наглядности.
пруфлинк тут
Уведомление: FTP сервер с виртуальными пользователями в MySQL на Ubuntu 12.04 | Воронов Глеб | TradeNarK LLC