Настройка ftp-сервера с помощью proftpd дневник максим боголепов
Содержание:
Введение
Периодически возникает необходимость давать доступ к файлам сайта для веб разработчиков или других пользователей. Так как используется VDS сервер с настроенным функционалом на базе Nginx, то все права на файлы при добавлении и изменении должны быть как у указанного сервиса. Вначале пытался настроить vsftpd но функционал позволяет настроить только права на редактируемые файлы чтобы они оставались такие как были но вот все новые были с правами пользователя. Поэтапно опишу все действия которые привели меня к желаемому результату.
Более подробно вы можете ознакомиться с документацией по настройке сервера FTP на сайте разработчика ProFTPd.
Создание пользователя
Кликните на таблицу ftpuser в левом столбце, а затем – на вкладку Insert.
Это позволяет вставить пользователя
Заполните поля userid (имя пользователя, которое будет использоваться для входа в FTP) и homedir (домашний каталог пользователя FTP; обратите внимание: нельзя указать несуществующий каталог, а затем создать его)
Пароль в поле passwd должен быть зашифрованным; чтобы создать такой пароль, можно использовать этот фрагмент (в оболочке сервера):
Примечание: Конечно, условный пароль password нужно заменить своим настоящим паролем.
В целом, остальные поля понятны без объяснений и, как правило, заполняются позже (например, login count, last logged in и т.п.).
Итак, необходимая база данных подготовлена, осталось только настроить ProFTPD для её использования.
Установка и базовая настройка
Устанавливаем EPEL репозиторий:
yum install epel-release
Устанавливаем ProFTPd:
yum install proftpd
Открываем необходимые порты на брандмауэре:
firewall-cmd —permanent —add-port=20-21/tcp
firewall-cmd —permanent —add-port=60000-65535/tcp
firewall-cmd —reload
Добавим небольшие правки в начальный конфигурационный файл:
vi /etc/proftpd.conf
UseIPv6 off
IdentLookups off
PassivePorts 60000 65535
Разрешаем сервис и запускаем его:
systemctl enable proftpd
systemctl start proftpd
Можно пробовать подключаться под любой системной учетной записью. Если необходимо добавить отдельного пользователя, вводим команду:
useradd ftpuser -d /var/www -s /sbin/nologin
passwd ftpuser
* в данном примере мы создали пользователя ftpuser с домашней директорией /var/www.
Create Your User
Click on the «ftpuser» table in the left column and then on the «Insert» tab.
This allows you to insert a user. Populate the userid (which is the username a user will login to FTP) and homedir (the FTP user home — should be present on the system).
Password in the passwd field should be encrypted, to do so you can use this snippet (on your server shell) to generate the password string you can paste into the passwd field:
/bin/echo "{md5}"`/bin/echo -n "password" | openssl dgst -binary -md5 | openssl enc -base64`
Of course replace «password» with your/users desired password.
Here you can see some other field that are self explanatory and are usually used later (login count, last logged in…).
There, you have the correct database, now we just need to configure ProFTPD to use it.
Установка и базовая настройка vsFTPd
Обновляем систему:
yum update
Запускаем процесс установки:
yum install vsftpd
После открываем на редактирование следующий файл:
vi /etc/vsftpd/vsftpd.conf
И приводим его к следующему виду:
anonymous_enable=NO
chroot_local_user=YES
allow_writeable_chroot=YES
pasv_min_port=40900
pasv_max_port=40999
* первые две строчки мы редактируем: anonymous_enable разрешает подключение анонимных пользователей, поэтому мы отключаем такую возможность; chroot_local_user запрещает выход за пределы домашней директории пользователя. Третью, четвертую и пятую строки мы дописываем — allow_writeable_chroot разрешает подключения пользователю, у которого есть права на запись в корневую директорию; это диапазон динамических портов, которые будут использоваться vsFTPd
Данный диапазон важно указывать, если используется брандмауэр. Сам диапазон можно задать любой из незарегистрированных портов
Отключаем SELinux следующими командами:
setenforce 0
sed -i «s/SELINUX=enforcing/SELINUX=disabled/» /etc/selinux/config
* первая команда отключит SELinux, вторая — отключит его автозапуск после перезагрузки.
Добавляем правила в брандмауэр для корректной работы FTP-сервера:
firewall-cmd —permanent —add-port=20-21/tcp
firewall-cmd —permanent —add-port=40900-40999/tcp
firewall-cmd —reload
Разрешаем автозапуск vsFTPd и запускаем его:
systemctl enable vsftpd
systemctl start vsftpd
По умолчанию, к vsFTPd нельзя подключиться с использованием учетной записи root. Поэтому нужно использовать другую пользовательскую запись или создать новую следующей командой:
useradd ftpuser -d /var/www -s /sbin/nologin
* ftpuser — имя учетной записи; /var/www — домашняя директория; /sbin/nologin запрещает локальный вход в систему.
Задаем пароль новому пользователю:
passwd ftpuser
Базовая настройка закончена — можно пробовать подключаться к FTP-серверу.
Connecting with a Client
There are plenty of FTP clients that we can use to connect with our server. The good ones implement SFTP capabilities as well. We will demonstrate how to connect through FileZilla, which is available on all major platforms.
Open FileZilla’s preferences. Find the “SFTP section in the left-hand menu.
Click on «Add keyfile”, and navigate to the location of your private key. Usually, this will be in . You will probably get a message saying that FileZilla will convert it to a supported format.
Press “Okay” to exit the preferences.
In the main interface, type followed by the domain name or IP address of your server in the “Host” field. Place your username in the “Username” field and fill in the port you chose for the “Port” field:
Click “Quickconnect” and FileZilla should connect automatically using your SSH keys.
Сервер закрывает соединение. Что делать?
Что же делать если вы увидели данную ошибку: ProFTPd Failed to retrieve directory listing — Connection closed by server
Решение довольно простое. Сначала переходим в хорошо знакомый нам файл конфигурации ProFTPD и раскомментируем следующие строки:
PassivePorts 49152 65534
Если же и это не помогло в решении данной проблемы, то в этом же файле убираем комментарий со строки:
Include /etc/proftpd/modules.conf
Ели данной строки вы не обнаружили, то просто добавляем ее в любое свободное место. Таким образом, проблема должна быть решена, а вы можете радоваться рабочей версией сервера. Также хочется отметить, что настройка ProFTPD для Ubuntu и некоторых других операционных систем одинакова, поэтому искать мануалы под вашу операционную систему бессмысленно.
Meldung: memcache support not enabled
In manchen Fällen kann bei einem Neustart des ProFTPD Servers die folgende Meldung erscheinen:
$ sudo service proftpd restart ok Stopping ftp server: proftpd. .... Starting ftp server: proftpddebian proftpd4856: mod_tls_memcache/0.1: notice: unable to register 'memcache' SSL session cache: Memcache support not enabled . ok
Hier ist das Problem, dass das Debian Package nicht mit kompiliert ist.
Das Modul kann daher auskommentiert werden — eine Raute wird vor der Zeile eingefügt:
$ sudo vi /etc/proftpd/modules.conf ... # LoadModule mod_tls_memcache.c ...
Ein anschließender Neustart erfolgt ohne der Memcache Meldung:
$ sudo service proftpd restart ok Stopping ftp server: proftpd. ok Starting ftp server: proftpd.
Установка и настройка
Обновляем списки портов в репозиториях:
apt-get update
Устанавливаем vsFTPd:
apt-get install vsftpd
Открываем конфигурационный файл:
vi /etc/vsftpd.conf
И снимаем комментарий со следующих строк:
write_enable=YES
chroot_local_user=YES
* write_enable — разрешить копировать файлы на сервер; chroot_local_user — использовать для пользователей изолированное окружение.
И дописываем следующее:
allow_writeable_chroot=YES
pasv_enable=YES
pasv_max_port=60000
pasv_min_port=65535
* где allow_writeable_chroot разрешаем использовать домашние каталоги с правом на запись; pasv_enable включает пассивный режим работы FTP-сервера; pasv_max_port и pasv_min_port определяют диапазон портов для пассивного режима.
Если используется брандмауэр, необходимо добавить правила и разрешить следующие порты:
- 20 — основной порт FTP для передачи.
- 21 — для активного режима. Используется для передачи команд.
- 60000-65535 — диапазон динамических портов, который нами был определен в конфигурационном файле. Используется для пассивного режима.
Разрешаем и перезапускаем сервис:
systemctl enable vsftpd
systemctl restart vsftpd
Настройка ProFTPD: создание сертификата
Для того чтобы создать надежное соединение, нам необходимо создать сертификат безопасности. Сделать это можно при помощи трех команд, которые необходимо прописывать по очереди.
openssl req -new -x509 -days 365 -nodes -out
/etc/ssl/certs/proftpd.cert.pem -keyout
/etc/ssl/certs/proftpd.key.pem
Создает сертификат на год.
После этого нам необходимо заполнить простую форму:
Тут все весьма понятно. Вписываем всю необходимую информацию и продолжаем.
После этого необходимо отредактировать файл tls.conf. Сделать это можно весьма просто, выполнив команду:
nano /etc/proftpd/tls.conf
Она откроет окно, в котором нам необходимо поменять следующие строки.
TLSEngine on
TLSLog /var/log/proftpd/proftpd_tls.log
TLSProtocol SSLv23
TLSOptions NoCertRequest
TLSRSACertificateFile /etc/ssl/certs/proftpd.cert.pem
TLSRSACertificateKeyFile /etc/ssl/certs/proftpd.key.pem
TLSVerifyClient on
TLSRequired off
В данной ситуации очень важным является то, чтобы вы следили за отсутствием повторов данных строк.
Следующим шагом необходимо включить TLS в файле конфигурации ProFTPD.
Для этого выполняем команду для редактирования текстовых файлов:
nano /etc/proftpd/proftpd.conf
После этого вам необходимо раскомментировать данную строчку:
Include /etc/proftpd/tls.conf
В случае если данная строка вовсе отсутствует, то просто добавляем ее. Готово, конфигурация TLS включена и на этом можно закончить настройку шифрования соединения. Давайте же перейдем к следующему шагу.
Необходимо в тот же самый файл конфигурации ProFTPD добавить строчки:
RootLogin off
Квоты
Таблицы:
- — лимиты для пользователей
- — размер файлов созданных пользователем
Инициализация
Настройка сервера:
- /etc/proftpd/proftpd.conf
-
<IfModule mod_quotatab.c> QuotaEngine on QuotaOptions ScanOnLogin QuotaDirectoryTally on QuotaDisplayUnits Gb QuotaShowQuotas on QuotaLimitTable file:/etc/proftpd/quota.limittab QuotaTallyTable file:/etc/proftpd/quota.tallytab QuotaLog /var/log/proftpd/quota.log </IfModule>
Параметр позволяет производить пересчёт размеров файлов в папке пользователя при его входе на сервер.
Создание таблиц (выполняется один раз):
- proftpd-quota-prepare.sh
-
#!/bin/bash ftpquota --create-table --type=limit --table-path=etcproftpdquota.limittab ftpquota --create-table --type=tally --table-path=etcproftpdquota.tallytab
Использование
Создание лимита для пользователя в размере 5 Гб:
- proftpd-quota-create.sh
-
#!/bin/bash UserName=FTPuser ftpquota --name=$UserName \ --bytes-upload=5 --add-record --type=limit --quota-type=user \ --units=Gb --verbose --table-path=etcproftpdquota.limittab
Изменение лимита для пользователя на 50 Гб:
- proftpd-quota-change.sh
-
#!/bin/bash UserName=FTPuser ftpquota --name=$UserName --bytes-upload=50 --update-record --type=limit --quota-type=user \ --units=Gb --verbose --table-path=etcproftpdquota.limittab
Удаление лимита для пользователя :
- proftpd-quota-delete.sh
-
#!/bin/bash UserName=FTPuser ftpquota --delete-record --type=limit --name=$UserName --quota-type=user \ --table-path=etcproftpdquota.limittab ftpquota --delete-record --name=$UserName --verbose --quota-type=user \ --type=tally --table-path=etcproftpdquota.tallytab