Установим proftpd
sudo apt-get install proftpd
sudo apt-get install proftpd
Настройка
Настройки ftp сервера proftpd хранятся в файле «/etc/proftpd/proftpd.conf».
Для его открытия введем:
sudo nano /etc/proftpd/proftpd.conf
Авторизация:
Добавим возможность авторизации «виртуальными» пользователями, для этого в конфе введем следующие строки:
UseIPv6 off # если не используете
RootLogin off # запрещаем подключать от пользователя root
RequireValidShell off
AuthUserFile /etc/proftpd/ftpd.passwd
AuthOrder mod_auth_file.c
Настройки ftp сервера proftpd хранятся в файле «/etc/proftpd/proftpd.conf».
Для его открытия введем:
sudo nano /etc/proftpd/proftpd.conf
Авторизация:
Добавим возможность авторизации «виртуальными» пользователями, для этого в конфе введем следующие строки:
UseIPv6 off # если не используете
RootLogin off # запрещаем подключать от пользователя root
RequireValidShell off
AuthUserFile /etc/proftpd/ftpd.passwd AuthOrder mod_auth_file.c
Создаем пользователя
После этого создадим пользователя, с именем ftpuser, с паролем 123
sudo ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=ftpuser --shell=/bin/false --home=/var/www/ --uid=33 --gid=33
Это добавит пользователя в ftpd.passwd
Для изменения пароля используйте
ftpasswd --passwd --name=ftpuser --change-password
После этого создадим пользователя, с именем ftpuser, с паролем 123
sudo ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=ftpuser --shell=/bin/false --home=/var/www/ --uid=33 --gid=33
Это добавит пользователя в ftpd.passwd
Для изменения пароля используйте
ftpasswd --passwd --name=ftpuser --change-password
Исправление ошибки доступа (permited denide)
сhown www-data:www-data /var/www/
chmod 775 /var/www/
сhown www-data:www-data /var/www/
chmod 775 /var/www/
Оптимизация
Если у вас медленно работает авторизация и передача данных, то добавьте следующие строки:
IdentLookups off
UseReverseDNS off
Остальное я оставил без изменений. Все делалось на виртуальной машине с Ubuntu 12.10 Server (x86). В качестве сетевого адаптера выбран «Виртуальный адаптер хоста», что дает использовать данный сервер вне виртуальной машины.
Если у вас медленно работает авторизация и передача данных, то добавьте следующие строки:
IdentLookups off UseReverseDNS off
Остальное я оставил без изменений. Все делалось на виртуальной машине с Ubuntu 12.10 Server (x86). В качестве сетевого адаптера выбран «Виртуальный адаптер хоста», что дает использовать данный сервер вне виртуальной машины.
Запуск, рестарт, остановка ftp сервера
sudo /etc/init.d/proftpd start
sudo /etc/init.d/proftpd restart
sudo /etc/init.d/proftpd stop
sudo /etc/init.d/proftpd start sudo /etc/init.d/proftpd restart sudo /etc/init.d/proftpd stop
Мой конфиг без коментов:
Include /etc/proftpd/modules.conf
UseIPv6 off
IdentLookups off
UseReverseDNS off
ServerName "WebSrv-FTP"
ServerType standalone
DeferWelcome off
RootLogin off
MultilineRFC2228 on
DefaultServer on
ShowSymlinks on
TimeoutNoTransfer 600
TimeoutStalled 600
TimeoutIdle 1200
DisplayLogin welcome.msg
DisplayChdir .message true
ListOptions "-l"
DenyFilter \*.*/
RequireValidShell off
Port 21
MaxInstances 30
User proftpd
Group nogroup
Umask 022 022
AllowOverwrite on
TransferLog /var/log/proftpd/xferlog
SystemLog /var/log/proftpd/proftpd.log
<IfModule mod_quotatab.c>
QuotaEngine off
</IfModule>
<IfModule mod_ratio.c>
Ratios off
</IfModule>
<IfModule mod_delay.c>
DelayEngine on
</IfModule>
<IfModule mod_ctrls.c>
ControlsEngine off
ControlsMaxClients 2
ControlsLog /var/log/proftpd/controls.log
ControlsInterval 5
ControlsSocket /var/run/proftpd/proftpd.sock
</IfModule>
<IfModule mod_ctrls_admin.c>
AdminControlsEngine off
</IfModule>
AuthUserFile /etc/proftpd/ftpd.passwd
AuthOrder mod_auth_file.c
Include /etc/proftpd/conf.d/
Include /etc/proftpd/modules.conf UseIPv6 off IdentLookups off UseReverseDNS off
ServerName "WebSrv-FTP" ServerType standalone DeferWelcome off
RootLogin off
MultilineRFC2228 on DefaultServer on ShowSymlinks on
TimeoutNoTransfer 600 TimeoutStalled 600 TimeoutIdle 1200
DisplayLogin welcome.msg DisplayChdir .message true ListOptions "-l"
DenyFilter \*.*/ RequireValidShell off Port 21 MaxInstances 30 User proftpd Group nogroup Umask 022 022 AllowOverwrite on TransferLog /var/log/proftpd/xferlog SystemLog /var/log/proftpd/proftpd.log <IfModule mod_quotatab.c> QuotaEngine off </IfModule>
<IfModule mod_ratio.c> Ratios off </IfModule>
<IfModule mod_delay.c> DelayEngine on </IfModule>
<IfModule mod_ctrls.c> ControlsEngine off ControlsMaxClients 2 ControlsLog /var/log/proftpd/controls.log ControlsInterval 5 ControlsSocket /var/run/proftpd/proftpd.sock </IfModule>
<IfModule mod_ctrls_admin.c> AdminControlsEngine off </IfModule>
AuthUserFile /etc/proftpd/ftpd.passwd AuthOrder mod_auth_file.c Include /etc/proftpd/conf.d/
Итак, теперь рассмотрим процесс установки более подробно FTP-сервер (ProFTPd) на Ubuntu 12.04 LTS
Задача: поднять FTP-сервер (возможно, с шифрованием) в локальной сети, а именно установить и настроить ProFTPd на Ubuntu 12.04 LTS
Источники:
Выполнение:
Часть 1. Ставим простой FTP-сервер на Ubuntu 12.04 LTS
1. Устанавливаем 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/vasya
sudo 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 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
Если после ввода логина и пароля выходит приглашение 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>
# запрещаем подключаться всем (DenyALL) для того, чтобы пользователи из /etc/passwd не могли подключаться, и разрешаем пользователям vasya и petr
<Limit LOGIN>
DenyALL
AllowUser vasya, petr
</Limit>
Проверим как работает:
sftp -P 21 petr@localhost
Если после ввода пароля выходит приглашение sftp> , значит работает. Для того, чтобы удостоверится в том, что сервер пускает только пользователей из файла /etc/proftpd/ftpd.passwd , выполним команду:
sftp -P 21 localhost
Даже если введем верный пароль текущего пользователя, все равно получим отказ
Permission denied, please try again.
При использовании SFTP с Windows-машины уже можно легко подключиться через FileZilla client.
После установки Proftpd можно воспользоваться возможностями следующих утилит:
- ftpcount - показывет текущее количество соединений.
- ftpshut - выключает все серверы proftpd в указанное время.
- ftptop - отображает статус запущенных соединений.
- ftpwho - показывает информацию о текущих процессах для каждой сессии
Проверим как работает:Задача: поднять FTP-сервер (возможно, с шифрованием) в локальной сети, а именно установить и настроить ProFTPd на Ubuntu 12.04 LTS Источники:Выполнение:Часть 1. Ставим простой FTP-сервер на Ubuntu 12.04 LTS 1. Устанавливаем ProFTPd:В процессе установки выбираем ответ standalone, т.е. самостоятельный запуск FTP-сервера, а не через суперсервер inetd.sudo apt-get install proftpd-basic
2. Пусть каталоги будущих пользователей будут находится в /home/ftp . Создаем этот каталог:
sudo mkdir /home/ftp
Пусть у нас будут два пользователя: vasya и petr. Для каждого из них заведем отдельную папку в каталоге /home/ftp:sudo mkdir /home/ftp/vasya sudo 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 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
Если после ввода логина и пароля выходит приглашение 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>
# запрещаем подключаться всем (DenyALL) для того, чтобы пользователи из /etc/passwd не могли подключаться, и разрешаем пользователям vasya и petr<Limit LOGIN>
DenyALL
AllowUser vasya, petr
</Limit>
Если после ввода пароля выходит приглашение sftp> , значит работает. Для того, чтобы удостоверится в том, что сервер пускает только пользователей из файла /etc/proftpd/ftpd.passwd , выполним команду:sftp -P 21 petr@localhost
sftp -P 21 localhost
Даже если введем верный пароль текущего пользователя, все равно получим отказPermission denied, please try again.
При использовании SFTP с Windows-машины уже можно легко подключиться через FileZilla client.После установки Proftpd можно воспользоваться возможностями следующих утилит:
- ftpcount - показывет текущее количество соединений.
- ftpshut - выключает все серверы proftpd в указанное время.
- ftptop - отображает статус запущенных соединений.
- ftpwho - показывает информацию о текущих процессах для каждой сессии
Комментариев нет:
Отправить комментарий