Заметки системного администратора: FTP-сервер (ProFTPd) на Ubuntu 12.04 LTS



Задача: поднять FTP-сервер (возможно, с шифрованием) в локальной сети, а именно установить и настроить ProFTPd на Ubuntu 12.04 LTSИсточники:1. http://vdsadmin.ru/ftp-proftp-ftpasswd2. http://www.proftpd.org/docs/3. http://www.proftpd.org/docs/directives/linked/config_ref_Limit.html4. http://www.debianadmin.com/list-of-ftp-clients-available-in-linux.htm5. https://forums.proftpd.org/smf/index.php?topic=1198.06. http://www.masterit.ru/5-besplatnyx-sftp-menedzherov-dlya-windows/7. http://www.coreftp.com/download.html8. http://proftpd.org/docs/contrib/mod_tls.html9. sysadmins.ru/topic347156.html10. http://www.castaglia.org/proftpd/modules/mod_sftp.htmlВыполнение:Часть 1. Ставим простой FTP-сервер на Ubuntu 12.04 LTS1. Устанавливаем ProFTPd:

sudo apt-get install proftpd-basic

В процессе установки выбираем ответ standalone, т.е. самостоятельный запуск FTP-сервера, а не через суперсервер inetd.2. Пусть каталоги будущих пользователей будут находится в /home/ftp . Создаем этот каталог:

sudo mkdir /home/ftp

Пусть у нас будут два пользователя: vasya и petr. Для каждого из них заведем отдельную папку в каталоге /home/ftp:

sudo mkdir /home/ftp/vasyasudo mkdir /home/ftp/petr

3. Перед тем, как создавать пользователей нашего FTP-сервера, необходимо отметить следующее. Поскольку эти пользователи являются виртуальными по отношению к ОС, то возникает проблема обращения к каталогам и файлам FTP-сервера. Предположение о том, что доступ к файлам и каталогам будет осуществлять сам FTP-сервер с именем proftpd и группой nogroup, неверно. При обращении к кокому-либо файлу будет использоваться UID и GID конкретного пользователя FTP-сервера. Поэтому логично будет создавать пользователей с такими же UID, что и у какого-либо реального пользователя в системе, прописанного в /etc/passwd . Далее в качестве такого пользователя возмем сам proftpd . Чтобы узнать его UID, выполним команду:

cat /etc/passwd | grep proftpd

результат будет примерно таким

proftpd:x:110:65534::/var/run/proftpd:/bin/false

Следовательно, пользователей будем создавать с UID 110.3.1  Создаем пользователей vasya и petr:

sudo ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=vasya --shell=/bin/false --home=/home/ftp/vasya --uid=110 --gid=65500
sudo ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=petr --shell=/bin/false --home=/home/ftp/petr --uid=110 --gid=65501
3.2 Сменим владельца и группу для всех созданных каталогов, чтобы пользователи FTP-сервера (с UID=110, как мы уже условились) смогли что-либо делать с ними:

sudo chown -R proftpd:nogroup /home/ftp

4. Правим конфигурационный файл /etc/proftpd/proftpd.conf :

Include /etc/proftpd/modules.conf
# Отключаем использование протокола IP v6
UseIPv6 off
# Имя FTP-сервера
ServerName "Ubunftp"
# Режим запуска FTP-сервера
ServerType standalone
DeferWelcome off
# Порт, который будет слушать FTP-сервер
Port 21
# выдавать многострочные сообщения в стандарте RFC 959 или RFC 2228
MultilineRFC2228 on
DefaultServer on
ShowSymlinks on
# Таймаут на передачу - вошел и не начал передачу (мс.)
TimeoutNoTransfer 600
# Подвисание во время передачи файлов (мс.)
TimeoutStalled 600
# Таймут бездействия после входа (мс.)
TimeoutIdle 1200
# Сообщение, которое будет показываться пользователю при входе
DisplayLogin                    welcome.msg
ListOptions                 "-l"
# Запретить закачивать файлы, начинающиеся на точку
DenyFilter *.*/
# Максимальное количество дочерних процессов
MaxInstances 30
# Пользователь, под которым будет запускаться FTP-сервер
User proftpd
# Группа, с которой будет запускаться FTP-сервер
Group nogroup
# Маска (права доступа) для файлов (первое значение 022) и каталогов (второе значение 022), создаваемых в каталогах
Umask 022  022
# Разрешить перезаписывать существующие файлы
AllowOverwrite on
# Для каждого пользователя в качестве корневого каталога устанавливаем его домашнюю папку. В этом случае пользователь не сможет выйти выше, т.е. попасть в /home/ftp или /home/ftp/petr
DefaultRoot ~
# Настраиваем права доступа к пользовательским каталогам
# для каталога  /ftp/vasya:
<Directory /home/ftp/vasya>
# Пусть vasya не сможет редактировать содержимое каталога (закачивать файлы, создавать папки, ...)
<Limit WRITE>
DenyALL
</Limit>
# , но сможет читать файлы
<Limit READ>
AllowUser vasya
</Limit>
# и, как исключение из первого правила, удалять их
<Limit DELE>AllowUser vasya
</Limit>
</Directory>
# для каталога  /ftp/petr:
<Directory /home/ftp/petr>
# Пусть petr имеет полный доступ к своей папке (закачивать файлы, скачивать файлы, создавать папки, удалять )
<Limit WRITE>AllowUser petr
</Limit>
</Directory>
# Настраиваем логи
TransferLog /var/log/proftpd/xferlog
SystemLog   /var/log/proftpd/proftpd.log
# Отключаем проверку командного интерпретатора пользователя
RequireValidShell off
# указываем файл с учетными записями для авторизации пользователей
AuthUserFile        /etc/proftpd/ftpd.passwd
# Include other custom configuration files
Include /etc/proftpd/conf.d/
5. Перезапускаем ProFTPd:sudo service proftpd restart

sudo service proftpd restart

Должно все работать. Проверить работу FTP-сервера можно так:

ftp localhost

Часть 2. FTP-сервер с SSL/TLS-шифрованием на Ubuntu 12.04 LTS6. Сейчас можно прикрутить к нашему серверу SSL/TLS-шифрование. Сначала сгенерируем сертификат и ключ:

openssl req -new -x509 -days 365 -nodes -out /etc/proftpd/proftpd.cert.pem -keyout /etc/proftpd/proftpd.key.pem
 

7. Теперь отредактируем файл конфигурации /etc/proftpd/tls.conf, но сперва скопируем его, на свякий случай:

cp /etc/proftpd/tls.conf /etc/proftpd/tls.conf.old

  и добавляем в /etc/proftpd/tls.conf следующее: 

TLSEngine                  on
TLSLog                     /var/log/proftpd/tls.log
TLSProtocol                SSLv23
TLSOptions                 NoCertRequest
TLSRSACertificateFile      /etc/proftpd/proftpd.cert.pem
TLSRSACertificateKeyFile   /etc/proftpd/proftpd.key.pem
TLSVerifyClient            off
# если хотите всё таки разрешить обычное соединение, поставьте TLSRequired off
TLSRequired                on

8. В конец конфигурационного файла /etc/proftpd/proftpd.conf добавим строку

Include /etc/proftpd/tls.conf

9. Перезапускаем Proftpd:

sudo service proftpd restart 

Сейчас проверим, работает ли шифрование. Установим ftp-ssl :

sudo apt-get install ftp-ssl

и попробуем подключиться:

ftp-ssl localhost

 Если после ввода логина и пароля выходит приглашение ftp> , значит все работает.На Windows мне не удалось подключиться к такому FTP ни через Total Commander (с плагинами), ни через FileZilla Client: в /var/log/proftpd/tls.log было видно, что соединение заканчивается с ошибкой

SSL/TLS required but absent on control channel, denying ... command

По видимому, эта ошибка возникала из-за того, что клиент начинал подключаться так, как подключается к обычному FTP, в то время, как требовалось установление SSL/TLS сессии. Подключиться смог только CoreFTP. Но для этого пришлось в /etc/proftpd/proftpd.conf добавить следующее: 

<IfModule mod_tls.c>
TLSOptions NoSessionReuseRequired
</IfModule>

Эта опция, как я понял, отменяем требование к клиенту работать в одной продолжиющейся сессии. Клиент может выполнять новую команду, создав новую SSL сессию. Это и делает CoreFTP. На рисунке ниже привожу настройки соединения CoreFTP.

 Часть 3. SFTP-сервер на базе ProFTPd и Ubuntu 12.04 10. Теперь попробуем приктутить SFTP.Закомментируем все строки в /etc/proftpd/proftpd.conf, относящиеся к использованию tls, а именно:

#<IfModule mod_tls.c>
#TLSOptions NoSessionReuseRequired
#</IfModule>
...
#Include /etc/proftpd/tls.conf

 Продолжаем реадктировать конфигурационный файл /etc/proftpd/proftpd.conf: добавляем следующее

#Если есть модуль SFTP, то применять следующие настройки 
<IfModule mod_sftp.c>
SFTPEngine            on
SFTPHostKey           /etc/ssh/ssh_host_dsa_key
SFTPHostKey           /etc/ssh/ssh_host_rsa_key
SFTPLog               /var/log/proftpd/sftp.log
SFTPCompression       delayed 
SFTPAuthMethods password # метод авторизации - пароль
</IfModule>


http://tnadm.blogspot.ru/2012/08/ftp-proftpd-ubuntu-1204-lts.html

Губарь Маргарита Александровна