Лидерами среди FTP-серверов на сегодняшний день являются pure-ftpd и proftpd. В последнее время использую proftpd с хранением списка пользователей в MySQL (как-то неохота заводить системных пользователей, если нужен всего лишь доступ по FTP).
Итак, приступаем к установке. Переходим в каталог портов и запускаем установку.
# cd /usr/ports/ftp/proftpd-mysql/ |
Мой набор опций следующий:
Options for proftpd-mysql 1.3.2a [ ] BAN Include mod_ban (Requires CTRLS) [ ] CLAMAV Include mod_clamav [ ] CTRLS Include controls [ ] DIGEST Include mod_digest [X] IFSESSION Include mod_ifsession [ ] IPV6 Use IPv6 [ ] LDAP Use LDAP [ ] LDAP_TLS Use LDAP TLS (Requires LDAP, OPENSSL) [ ] NLS Use nls (builds mod_lang) [X] OPENSSL Include mod_tls [ ] PGSQL Postgres auth (Can be combined with MYSQL) [X] QUOTA Include mod_quota [ ] QUOTATAB_RADIUS include mod_quotatab_radius [ ] RADIUS Include mod_radius [X] RATIO Include mod_ratio [X] README Include mod_readme [X] REWRITE Include mod_rewrite [ ] TDS FreeTDS - Sybase & MS-SQL auth (Exclusive) [X] WRAP Include mod_wrap2 [ ] WRAP_FILE Include mod_wrap2_file [ ] WRAP_SQL Include mod_wrap2_sql [X] MYSQL MySQL auth (Can be combined with PGSQL) |
Обновляем пути:
# rehash |
Редактируем /usr/local/etc/proftpd.conf и приводим его к следующему виду:
# cat /usr/local/etc/proftpd.conf ServerName "Local Ftp Server" ServerIdent on "FTP Server ready" DeferWelcome off Port 21 User proftpd MaxInstances 100 AllowRetrieveRestart on RootLogin off DefaultRoot ~ RLimitCPU 1200 1200 PassivePorts 50000 60000 LogFormat default "%h %l %u %t \"%r\" %s %b" SystemLog /var/log/proftpd/proftpd.log <Global> |
Стоит отметить, что в файрволе должны быть разблокированы порты 50000-60000 для работы FTP в пассивном режиме. Диапазон портов можно изменить в конфигурационном файле (опция PassivePorts).
Стоит отметить, то, что в целях безопасности, 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]: Use password-based authentication? [yes]: no Lock out the account after creation? [no]: Username : proftpd Password : <disabled> Full Name : FTP User Uid : 1050 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! |
Далее необходимо создать каталог, где будут храниться логи нашего FTP-сервера.
# mkdir /var/log/proftpd |
Далее создаем БД MySQL и пользователя с полными правами доступа на созданную БД.
# mysql –u username –p Query OK, 1 row affected (0.00 sec) Query OK, 0 rows affected (0.06 sec) |
Далее загружаем уже готовый дамп БД и заливаем этот дамп в созданную БД от имени созданного пользователя :
# wget http://muff.kiev.ua/files/proftpd.sql
--17:43:01-- http://muff.kiev.ua/files/proftpd.sql Распознаётся muff.kiev.ua... 195.3.159.250 Устанавливается соединение с muff.kiev.ua|195.3.159.250|:80... соединение установлено. Запрос HTTP послан, ожидается ответ... 200 OK Длина: 1 710 (1,7K) [text/plain] 100%[===============================================>] 1 710 --.--K/s
17:43:01 (14,83 MB/s) - `proftpd.sql' сохранён [1710/1710]
# mysql -u proftpd -p proftpd < proftpd.sql
Enter password: |
Далее создадим каталог и тестового пользователя FTP, указав директорией пользователя созданный каталог:
# mkdir -p /var/ftp/test Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> INSERT INTO `proftpd`.`users` (`username` , `descr` , `password` , `uid` , `gid` , `homedir` , `shell` , `count` ) VALUES ('test', 'Test user', ENCRYPT( 'FTP-password_here' ) , '1050', '1050', '/var/ftp/test', NULL , '0' );
Query OK, 1 row affected (0.00 sec) mysql> quit
Bye |
Далее добавляем в /etc/rc.conf параметры запуска демона Proftpd:
# echo '# FTP' >> /etc/rc.conf # echo 'proftpd_enable="YES"' >> /etc/rc.conf |
Кажется ничего не забыли... Пытаемся запустить FTP-сервер:
# sh /usr/local/etc/rc.d/proftpd start Starting proftpd. |
Теперь проверим, как функционирует наш FTP-сервер. Все ли в порядке, а то всякое может быть ;)
Для начала попробуем приконектиться на 21 порт:
# telnet localhost 21 quit |
Отлично. Сервер успешно отвечает на запросы. Теперь попробуем залить файл на сервер:
Microsoft Windows XP [Версия 5.1.2600]
(С) Корпорация Майкрософт, 1985-2001.
C:\>
C:\>ftp x.x.x.x Связь с x.x.x.x.
220 ProFTPD 1.3.2a Server (Local Ftp Server) [x.x.x.x]
Пользователь (x.x.x.x:(none)): test 331 Password required for test Пароль: 230-You've logged on 1 times, test 230 User test logged in ftp> binary 200 Type set to I ftp> put test.zip 200 PORT command successful 150 Opening BINARY mode data connection for test.zip 226 Transfer complete
ftp: 2406400 байт отправлено за 38,55 (сек) со скоростью 62,43 (КБ/сек). ftp> quit
221 Goodbye. |
Поздравляю. FTP-cервер успешно протестирован и готов к работе. Этого достаточно, для нормальной работы. Далее будут описаны некоторые расширения.
SSL
Теперь займемся организацией TLS шифрования.
Создадим (если не существует) каталог для хранения сертификатов:
# mkdir /etc/ssl/certs # cd /etc/ssl/certs |
Сгенерируем SSL-сертификат:
# openssl req -new -x509 -days 365 -nodes -out /etc/ssl/certs/proftpd.cert.pem -keyout /etc/ssl/certs/proftpd.key.pem Generating a 1024 bit RSA private key ................................++++++ .......++++++ writing new private key to '/etc/ssl/certs/proftpd.key.pem' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:UA State or Province Name (full name) [Some-State]:Kiev Region Locality Name (eg, city) []:Kiev Organization Name (eg, company) [Internet Widgits Pty Ltd]:Somebody Organization Name Organizational Unit Name (eg, section) []:IT Department Common Name (eg, YOUR name) []:ftp.domain.com Email Address []:username [at] domain [dot] com (username [at] domain [dot] com) |
Lобавляем в /usr/local/etc/proftpd.conf следующую секцию:
<IfModule mod_tls.c> |
Перезапускаем Proftpd и наслаждаемся результатом
ВАЖНО!
# cat /etc/passwd | grep proftpd proftpd:*:1050:1050:FTP User:/home/proftpd:/usr/sbin/nologin |
Re: Proftpd - настройка FTP-сервера с хранением списка ...
Стать классная, я по ней настраивал не один раз (автору отдельный респект). Но собирая в очередной раз напоролся на ошибку
Fatal: unknown configuration directive 'SQLConnectInfo' on line 80 of '/usr/local/etc/proftpd.conf'
Немного погуглив выяснил, что с выходом версии 1.3.4, немного изменилась установка порта. Теперь mod_sql нужно ставить отдельно из портов.
Помогла эта ссылка http://netspider.com.ua/index.php/2012/02/04/proftpd-1-3-4/ .
Если не сложно, подправте статью под новый вариант. Спасибо.
Re: Proftpd - настройка FTP-сервера с хранением списка ...
Если планы не изменятся, то должен на этой неделе сетапить ФТПшник, соответственно внесу изменения в статью.
Re: Proftpd - настройка FTP-сервера с хранением списка ...
При установке данной связки необходимо дополнительно устанавливать порт databases/proftpd-mod_sql_mysql
При этом необходимо в конфиг добавить следующее
LoadModule mod_sql.c
LoadModule mod_sql_mysql.c
Перезапустить сервис Proftpd и радоваться его работе...