FTP-сервер на VPS

Четвертая часть по настройке VPS. Устанавливаем FTP-сервер, чтобы дать возможность пользователь виртуального хоста загружать файлы в свою домашнюю директорию.

Конечно, если доступ к сайту нужен только разработчику, лучше при создании пользователя (см. вторую часть) оставить ему shell и позволить подключаться по scp с именем и паролем основного пользователя сайта. Все равно, скорее всего, ему потребуется пакетный менеджер или composer. Но иногда доступ к сайту нужен и другим людям только для того, чтобы загружать файлы и делать простые правки html. В этом случае лучше разрешить им подключаться по FTP, чтобы можно было не лавать им shell и предоставить доступ только к конкретным директориям.

В качестве FTP-сервера будем использовать proftpd. Для хранения учетных записей пользователей будем использовать тестовый файл.

Установка

apt install proftpd

Файл конфигурации /etc/proftpd/proftpd.conf

В нем можно ничего не трогать, все дополнительные параметры задаем в подключаемом файле. Для это в создадим в директории conf.d файл custom.conf:

nano /etc/proftpd/conf.d/custom.conf

Пишем в него:

UseIPv6 off
ServerName "Debian"
ServerType standalone

TimeoutLogin 30
RootLogin off
UseReverseDNS off 

DeleteAbortedStores on

DefaultRoot ~
RequireValidShell off  
AuthUserFile /etc/proftpd/ftpd.passwd

PassivePorts 49152 49162

MaxLoginAttempts 5

ExtendedLog	/var/log/proftpd/auth.log AUTH #auth
ExtendedLog	/var/log/proftpd/access.log WRITE,READ #write

UseFtpUsers on 

AllowStoreRestart on


Поясняю основные моменты.

RootLogin - запретить доступ по ftp пользователю root.

UseReverseDNS - определять имя хоста клиента по IP адресу, отключить, нам это не нужно. Можно еще отключить IdentLookups, если она не отключена по умолчанию.

DefaultRoot - домашняя директория пользователя является корнем сервера и пользователь не сможет подняться выше него. Путь к домашенй директории в контексте ftp будет задаваться при создании пользователя.

PassivePorts - диапазон портов в пассивном режиме.

UseFtpUsers - обрабатывать ли сайт ftpusers в котором перечислены пользователи, которым нужно запретить доступ по ftp.

RequireValidShell – авторизовывать клиента только если он имеет основной shell из списка /etc/shells. Отключаем проверку, иначе пользователи без shell не войдут.

AuthUserFile /etc/proftpd/ftpd.passwd - путь к файлу с пользователями.

Проверяем конфигурацию:

proftpd -t

Если ругается warning: unable to determine IP address, то необходимо добавить в hosts IP вашего сервера. Если ругается на отсутствие файла ftpd.passwd, то это нормально.

Теперь создаем пользователя FTP. Для этого сперва узнаем его ID и ID его группы:

id -u demo
id -g demo

Нам нужно, чтобы ftp пользователь имел возможность редактировать и удалять файлы, созданные скриптами.
Создаем нового виртуального ftp-пользователя с логином designer, идентификатором 1000, группой 1000 и домашним каталогом /var/www/test.ru. Здесь 1000 - это ID пользователя и группы, которые мы узнали на предыдущем шаге.

ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=designer --uid=1000 --gid=1000 --home=/home/demo/www --shell=/bin/false

Обратите внимание - в качестве домашней директории ftp (ключ home) здесь указана не домашняя директория владельца сайта (/home/demo), а директория с файлами сайта. Также можно настроить доступ на любую папку внутри сайта.

После выполнения команды система попросит ввести дважды пароль пользователя.
В итоге, у нас появится файл /etc/proftpd/ftp.passwd с записью о пользователе.


Изменить пароль пользователя можно следующей командой:

ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=designer--change-password

Перезапускаем ftp:

/etc/init.d/proftpd restart