Задача: поднять 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:
Источники:
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-сервера можно так:
Часть 2. FTP-сервер с SSL/TLS-шифрованием на Ubuntu 12.04 LTS
6. Сейчас можно прикрутить к нашему серверу SSL/TLS-шифрование. Сначала сгенерируем сертификат и ключ:
8. В конец конфигурационного файла /etc/proftpd/proftpd.conf добавим строку
и попробуем подключиться:
Если после ввода логина и пароля выходит приглашение ftp> , значит все работает.
На Windows мне не удалось подключиться к такому FTP ни через Total Commander (с плагинами), ни через FileZilla Client: в /var/log/proftpd/tls.log было видно, что соединение заканчивается с ошибкой
По видимому, эта ошибка возникала из-за того, что клиент начинал подключаться так, как подключается к обычному FTP, в то время, как требовалось установление SSL/TLS сессии.
Подключиться смог только CoreFTP. Но для этого пришлось в /etc/proftpd/proftpd.conf добавить следующее:
10. Теперь попробуем приктутить SFTP.
Закомментируем все строки в /etc/proftpd/proftpd.conf, относящиеся к использованию tls, а именно:
sudo service proftpd restart
ftp localhost
6. Сейчас можно прикрутить к нашему серверу SSL/TLS-шифрование. Сначала сгенерируем сертификат и ключ:
openssl req -new -x509 -days 365 -nodes -out /etc/proftpd/proftpd.cert.pem -keyout /etc/proftpd/proftpd.key.pem
/etc/proftpd/tls.conf, но сперва скопируем его, на свякий случай: 7. Теперь отредактируем файл конфигурации
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.
Если данная инструкция оказалась полезной для вас, напишите, пожалуйста, об этом в комментарии.
Подскажите 2 и 3 часть обязательны? Сейчас я остановился на первой часте и подключаюсь вроде без ошибок. И ещё sudo -R chown proftpd:nogroup /home/ftp -R Ставится же после chown
ОтветитьУдалить2 и 3 части не обязательны. Правильно, конечно же, пишется так: sudo chown -R proftpd:nogroup /home/ftp
ОтветитьУдалитьПодскажите, как сделать, чтобы работал анонимный вход. Ничего не получается. Вот proftpd.conf:
ОтветитьУдалить# отключаю протокол
UseIPv6 off
AllowOverwrite on
AuthAliasOnly on
AuthUserFile /etc/proftpd/ftpd.passwd
AuthGroupFile /etc/proftpd/ftpd.group
# Здесь присваивается alias пользователю (в качестве примера присвоено имя test, его нужно изменить на свое)
UserAlias user_ user
UserAlias user2_ user2
UserAlias user3_ user3
ServerName "server"
ServerType standalone
DeferWelcome on
MultilineRFC2228 on
DefaultServer on
ShowSymlinks off
TimeoutNoTransfer 600
TimeoutStalled 100
TimeoutIdle 2200
DisplayChdir .message
ListOptions "-l"
RequireValidShell off
TimeoutLogin 20
RootLogin off
# пути для логов
ExtendedLog /var/log/ftp.log
TransferLog /var/log/xferlog
SystemLog /var/log/syslog.log
#DenyFilter \*.*/
# Я не использую файл /etc/ftpusers (здесь вводим имена пользователей, для ограничения их доступа)
UseFtpUsers off
# Allow to restart a download
AllowStoreRestart on
# Стандартный порт для фтп 21, для повышения безопасности можно выбрать другой (произвольный):
Port 21
# повышение безопасности
MaxInstances 8
# пользователь и группа
User ftp
Group nogroup
# Umask 022 ограничение на создание файлов и папок
Umask 022 022
PersistentPasswd off
MaxClients 8 "Достигнут предел на количество клиентов"
MaxClientsPerHost 8 "Достигнут предел на количество клиентов с Вашего хоста"
MaxClientsPerUser 8 "Достигнут предел на количество подключений (%m)"
MaxHostsPerUser 8 "Больше нельзя"
# вывод приветствия после успешного входа
AccessGrantMsg "Ласкаво просимо!!!"
# идентификация
ServerIdent on "Мій домашній сервер"
# делаем /home/FTP-shared папку домашней
DefaultRoot /media/Data/FTP-shared
# запрещаем выходить пользователям за пределы домашней папки (строго рекомендуется)
DefaultRoot ~
MaxLoginAttempts 5 "Количество попыток входа исчерпано - придется подождать, ничего не поделаешь, безопасность превыше всего"
#VALID LOGINS
AllowUser user, user2, user3
DenyALL
Umask 022 022
AllowOverwrite off
DenyAll
Umask 022 022
AllowOverwrite off
DenyAll
Umask 022 022
AllowOverwrite on
DenyAll
AllowAll
# анонимный доступ
User ftp
Group nogroup
UserAlias anonymous ftp
MaxClients 8 "Извините, максимум %m пользователей - попробуйте подключиться позже"
DisplayChdir .message
AllowUser ftp
DenyALL
DenyAll
а если рестарт не работает через
ОтветитьУдалить/etc/init.d/proftpd restart
ProFTPD is started from inetd/xinetd.
и
service proftpd restart
ProFTPD is started from inetd/xinetd.
то как еще можно ?
Тогда смотрим сюда: http://www.proftpd.org/docs/howto/Stopping.html
УдалитьСпасибо за статью, очень позновательно
ОтветитьУдалитьесть опечатка:
# Пусть petr имеет полный доступ к своей папке (закачивать файлы, скачивать файлы, создавать папки, удалять )
AllowUser vasya ----- не вася а петр
Спасибо, исправил.
Удалитьспасибо! очень полезная статья. установил часть1 на минт13. всЁ с первого раза.
ОтветитьУдалитьДружище, спасибо тебе, ты очень помог этой статьей!
ОтветитьУдалитьПосмотрите пожалуйста что я не правельно сделал?
ОтветитьУдалитьНужно чтобы пользователь alex имел полный доступ к каталогу mnt/data/VideoMon
Конфиг такой:
AllowOverwrite on
RequireValidShell off
AuthUserFile /etc/proftpd/ftpd.passwd
AuthGroupFile /etc/proftpd/ftpd.group
# Don't use IPv6 support by default.
UseIPv6 off
ServerName "ftp-server"
ServerType standalone
DeferWelcome on
# Эти две команды убыстряют работу сервака, гуглите для подробностей.
UseReverseDNS off
IdentLookups off
MultilineRFC2228 on
DefaultServer on
ShowSymlinks off
TimeoutNoTransfer 600
TimeoutStalled 100
TimeoutIdle 2200
DisplayChdir .message
ListOptions "-l"
TimeoutLogin 20
#Запрещаем подключаться на сервер как root, полезно для безопасности
RootLogin off
# Создаём журналы
# ExtendedLog /var/log/ftp.log
# TransferLog /var/log/xferlog
# SystemLog /var/log/syslog.log
#Запрещаем заливать на сайт файлы начинающиеся с точки, полезно для безопасности
DenyFilter \*.*/
# Используем файлик /etc/ftpusers в нём перечислены те пользователи, которым запрещено входить на сервер, полезно для безопасности
UseFtpUsers on
# Разрешаем докачивать файлы
AllowStoreRestart on
# задаём порт, на котором будет работать сервак, обычно 21
Port 21
# Против DDOS атаки, полезно для безопасности
MaxInstances 8
# Сервер запускается и работает под этим пользователем и группой
User alex
Group alex
# Umask 022 is a good standard umask to prevent new files and dirs
# (second parm) from being group and world writable.
Umask 022 022
MaxClients 8
MaxClientsPerHost 8
MaxClientsPerUser 8
MaxHostsPerUser 8
# Сообщение после успешного захода на сервер
AccessGrantMsg "Welcome to Server"
#Идентификатор сервера, показывается всем при заходе на сервер
ServerIdent on "privet :))"
# Устанавливаем домашний каталог
DefaultRoot /mnt/data/VideoMon
# Запираем всех в домашнем каталоге, чтобы не могли просмотреть каталоги выше, важно для безопасности
DefaultRoot ~
MaxLoginAttempts 5
#VALID LOGINS
AllowUser user
DenyALL
Umask 022 022
AllowOverwrite on
Ошибки при запуске:
alex@Server:/etc/proftpd$ /etc/init.d/proftpd start
* Starting ftp server proftpd Server proftpd[23999]: unable to bind to Unix domain socket at '/var/run/test.sock': Permission denied
Server proftpd[23999] 127.0.1.1: ROOT PRIVS: unable to seteuid(): Операция не позволена
Server proftpd[23999] 127.0.1.1: ROOT PRIVS: unable to setegid(): Операция не позволена
Server proftpd[23999] 127.0.1.1: RELINQUISH PRIVS: unable to seteuid(PR_ROOT_UID): Операция не позволена
Server proftpd[23999] 127.0.1.1: RELINQUISH PRIVS: unable to setegid(session.gid): Операция не позволена
Server proftpd[23999] 127.0.1.1: RELINQUISH PRIVS: unable to seteuid(session.uid): Операция не позволена
Server proftpd[23999] 127.0.1.1: mod_delay/0.7: error opening DelayTable '/var/run/proftpd.delay': Отказано в доступе
Server proftpd[23999] 127.0.1.1: unable to set daemon groups: Операция не позволена
Server proftpd[23999] 127.0.1.1: ROOT PRIVS: unable to seteuid(): Операция не позволена
Server proftpd[23999] 127.0.1.1: ROOT PRIVS: unable to setegid(): Операция не позволена
Server proftpd[23999] 127.0.1.1: RELINQUISH PRIVS: unable to seteuid(PR_ROOT_UID): Операция не позволена
А если дать такую команду:
Удалитьalex@Server:/etc/proftpd$ sudo /etc/init.d/proftpd start
Спасибо помогло. Не подумал что для запуска нужны рутовые права. Но есть проблема - с виндвой машины не могу попасть на FTP пишет нет прав доступа. Как сделать чтобы выводилось окно с запросом имени и пароля пользователя???
ОтветитьУдалитьСпасибо за ответ.
спасибо! все очень понятно и полностью)
ОтветитьУдалитьпомоги пожалуйста . все делал по статье, но при входе пишет 530 некорректные аутентификационные данные
ОтветитьУдалитьПоставил первый дома, работает идеально...
ОтветитьУдалитьПоставил второй на работе и столкнулся с ошибкой 530...
Согласно логу и как результат вмешательства, рабочего сервера...
Причина была в том что файл с паролями и домашними директориями виртуальных пользователь из за прав...
Сам же ProFTPd не мог считать...
Лечится просто...
Для файла /etc/proftpd/proftpd.conf
Установил права на чтение для всех...
Может это не совсем правильно по безопасности
и надо добавлять именно пользователя от которого происходит запуск FTP сервера,
но у меня не супер секретный сервер...
Пардон...
ОтветитьУдалитьдля файла ftpd.passwd конечно же...
тот что указываете при создании пользователей...
у меня странная ошибка
ОтветитьУдалитьпробовал на 2х компах оба ubuntu 1204
приделал SFTP
один работает нормально а второй при подключении коверкает имена каталогов
вместо имени 20150323 дает расшифровку 23 марта 2015
и соответственно не получается считать каталог...
уточнение...
ОтветитьУдалитьв имя каталога вносится дата создания.....
Гавно. Не работает ничего!
ОтветитьУдалитьСпаси! Клево все рассказал, пиши еще!!!
ОтветитьУдалитьДоброго времени суток! Спасибо статья что надо! (FreeBSD 11.1 proftpd 1.3.6)
ОтветитьУдалитьвопрос по правам доступа к каталогам сервера. Структура каталогов такова
/root/data/UPLOAD
/root/data/DOWNLOAD
если с DOWNLOAD все понятно права 0550 дают юзерам возможность только скачивать то с UPLOAD сложнее в этом каталоге необходимо дать полную свободу, но вот беда, эта свобода с правами распространяется и на сам каталог. Как сделать так чтоб юзер не мог удалить каталог а лишь его содержимое. Спасибо
VarangaOfficial - варанга купить в аптеке - исключительно достоверные, проверенные факты. Воспользовавшись нашим онлайн-сервисом, вы сможете узнать обстоятельную информацию касательно этого натурального лекарственного комплекса. Лично увидеть данные о проведенных клинических тестированиях, прочитать реальные отзывы пациентов и врачей, использующих крем в своей лечебной практике. Изучить инструкцию по использованию, прочесть об особенностях и методах работы комплекса, уяснить, как работает крем Варанга, где можно купить оригинальный препарат и, как не нарваться на фальсификат. Мы тщательно проверяем размещаемые данные. Предоставляем нашим пользователям сведения, которые берутся исключительно из подлинных источников. Если вы нашли признаки грибкового поражения стоп или уже довольно продолжительное время, без ощутимых результатов стараетесь излечиться от этого неприятного коварного недуга, на нашем сайте вы отыщете легкий и быстрый способ устранения проблемы. Приобщайтесь и живите здоровой полноценной жизнью. Все, что вы хотели знать, теперь можно найти на одном ресурсе.
ОтветитьУдалитьПри неимении сертификата портал мгновенно отбраковывается. Площадка должна иметь государственное позволение на ведение азартной работы рейтинг игровых автоматов онлайн, тогда заказчик сможет подать жалобу, получить компенсацию. Одновременно отчетливо исследуются управляла. Некоторые виртуальные заведения Европы часто прописывают положения, дозволяющие отымать деньги у посетителей, аннулировать выигрыши на легитимных причинах. Проведение кропотливого обзора казино дозволяет выявить недобропорядочные компании. Игроки смогут избежать издержки средств, негативного навыка.
ОтветитьУдалитьНеобходимость отыгрыша. Вейджер в повыше, чем для призов за депо casino бездепозитный бонус контрольчестности рф. И же средства не отыграны, исключить их нереально.
ОтветитьУдалитьЕсли у вас выйдет имитировать естественную коммуникацию с постояльцами сколько нужно ссылок для продвижения сайта известных вебсайтов, коие озаряют темы, похожие с вашей, вы получите заинтересованные переходы. Не стоит надеяться на их очень большое количество. Часто такие сообщения воспринимаются, как спам и удаляются администрацией.
ОтветитьУдалить