FTP-сервер (ProFTPd) на Ubuntu 12.04 LTS
часть 1 проверена на Ubuntu14.04.2
Задача: поднять FTP-сервер (возможно, с
шифрованием) в локальной сети, а именно установить и настроить ProFTPd
на Ubuntu 12.04 LTS
Источники:
1. http://vdsadmin.ru/ftp-proftp-ftpasswd
2. http://www.proftpd.org/docs/
3. http://www.proftpd.org/docs/directives/linked/config_ref_Limit.html
4. http://www.debianadmin.com/list-of-ftp-clients-available-in-linux.htm
5. https://forums.proftpd.org/smf/index.php?topic=1198.0
6. http://www.masterit.ru/5-besplatnyx-sftp-menedzherov-dlya-windows/
7. http://www.coreftp.com/download.html
8. http://proftpd.org/docs/contrib/mod_tls.html
9. sysadmins.ru/topic347156.html
10. http://www.castaglia.org/proftpd/modules/mod_sftp.html
Выполнение:
Часть 1. Ставим простой FTP-сервер на Ubuntu 12.04 LTS
1. Устанавливаем ProFTPd:
В процессе установки выбираем ответ standalone, т.е. самостоятельный запуск FTP-сервера, а не через суперсервер inetd.
2. Пусть каталоги будущих пользователей будут находится в /home/ftp . Создаем этот каталог:
Пусть у нас будут два пользователя: vasya и petr. Для каждого из них заведем отдельную папку в каталоге /home/ftp:
3. Перед тем, как создавать пользователей
нашего FTP-сервера, необходимо отметить следующее. Поскольку эти
пользователи являются виртуальными по отношению к ОС, то возникает
проблема обращения к каталогам и файлам FTP-сервера. Предположение о
том, что доступ к файлам и каталогам будет осуществлять сам FTP-сервер с
именем proftpd и группой nogroup, неверно. При обращении к кокому-либо
файлу будет использоваться UID и GID конкретного пользователя
FTP-сервера. Поэтому логично будет создавать пользователей с такими же
UID, что и у какого-либо реального пользователя в системе, прописанного в
/etc/passwd . Далее в качестве такого пользователя возмем сам proftpd .
Чтобы узнать его UID, выполним команду:
результат будет примерно таким
Следовательно, пользователей будем создавать с UID 110.
3.1 Создаем пользователей vasya и petr:
Еще одна возмодная проблема:
The workaround is to edit the service file, to add a retry.
Источники:
1. http://vdsadmin.ru/ftp-proftp-ftpasswd
2. http://www.proftpd.org/docs/
3. http://www.proftpd.org/docs/directives/linked/config_ref_Limit.html
4. http://www.debianadmin.com/list-of-ftp-clients-available-in-linux.htm
5. https://forums.proftpd.org/smf/index.php?topic=1198.0
6. http://www.masterit.ru/5-besplatnyx-sftp-menedzherov-dlya-windows/
7. http://www.coreftp.com/download.html
8. http://proftpd.org/docs/contrib/mod_tls.html
9. sysadmins.ru/topic347156.html
10. http://www.castaglia.org/proftpd/modules/mod_sftp.html
Выполнение:
Часть 1. Ставим простой FTP-сервер на Ubuntu 12.04 LTS
1. Устанавливаем ProFTPd:
sudo apt-get install proftpd-basic
2. Пусть каталоги будущих пользователей будут находится в /home/ftp . Создаем этот каталог:
sudo mkdir /home/ftp
sudo mkdir /home/ftp/vasya
sudo mkdir /home/ftp/petr
cat /etc/passwd | grep proftpd
proftpd:x:110:65534::/var/run/proftpd:/bin/false
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, как мы
уже условились) смогли что-либо делать с ними:
4. Правим конфигурационный файл /etc/proftpd/proftpd.conf :
sudo chown -R proftpd:nogroup /home/ftp
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
Должно все работать. Проверить работу FTP-сервера можно так:
sudo service proftpd restart
sudo chmod 440 /etc/proftpd/ftpd.passwd && sudo chown proftpd.root /etc/proftpd/ftpd.passwd
/etc/init.d/proftpd
Find this line:start-stop-daemon --stop --signal $SIGNAL --quiet --pidfile "$PIDFILE"
Change to this:start-stop-daemon --stop --signal $SIGNAL --retry 1 --quiet --pidfile "$PIDFILE"
This change solved it for me.
Часть 2. FTP-сервер с SSL/TLS-шифрованием на Ubuntu 12.04 LTS
6. Сейчас можно прикрутить к нашему серверу 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
На Windows мне не удалось подключиться к такому FTP ни через Total Commander (с плагинами), ни через FileZilla Client: в /var/log/proftpd/tls.log было видно, что соединение заканчивается с ошибкой
SSL/TLS required but absent on control channel, denying ... command
Подключиться смог только 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>
<Limit LOGIN>
DenyALL
AllowUser vasya, petr
</Limit>
sftp -P 21 petr@localhost
sftp -P 21 localhost
Permission denied, please try again.
Комментариев нет:
Отправить комментарий