Установка vsftpd на Debian

Справочник системного администратора

vsftpd – один из самых простых способов поднять сервер FTP на Linux. В данной инструкции пойдет речь об установке vsFTPd на Debian.

Для установки демона vsftpd воспользуемся командой:

sudo apt-get install vsftpd

После установки обязательно сделайте бэкап оригинального файла конфигурации:

sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.original

Настройка пользователя для взаимодействия с FTP

Представим, что вы сейчас работаете под учетной записью с именем admin, ваша домашняя директория должна иметь следующий путь: /home/admin

Вы можете создать другого пользователя, под которым будете работать с FTP. Можно создать пользователя командой:

sudo useradd username

Весь дальнейший пример будет строиться на том, что пользователь у нас – admin.

С точки зрения безопасности, FTP должен быть ограничен одним специальным каталогом, vsftpd использует chroot для создания этой защиты. Со включённым chroot, локальный пользователь по умолчанию ограничивается его домашним каталогом, однако, может оказаться, что из-за защиты vsftpd, пользователь не сможет ничего создавать в каталоге.

Создадим в вашей домашней директории каталог для FTP, например:

sudo mkdir /home/admin/ftp

Установим права владения:

sudo chown nobody:nogroup /home/admin/ftp

И удаляем права на запись:

sudo chmod a-w /home/admin/ftp

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

sudo ls -la /home/admin/ftp

На выходе мы увидим приблизительно это:

dr-xr-xr-x 2 nobody nogroup 4096 Feb 10 14:21
drwxr-xr-x 3 admin admin 4096 Feb 10 14:21

На следующем этапе создаем каталог для хранения и взаимодействия с файлами:

sudo mkdir /home/admin/ftp/files

Назначаем владельцем каталога пользователя admin:

sudo chown admin:admin /home/admin/ftp/files

Настройка vsftpd

Открываем для редактирования конфигурационный файл vsftpd:

sudo nano /etc/vsftpd.conf

Проверьте, чтобы настройки в файле совпадали с указанными ниже:

# Allow anonymous FTP? (Disabled by default).
anonymous_enable=NO
#
# Uncomment this to allow local users to log in.
local_enable=YES

В этом же файле раскомментируем строку write_enable=YES, убрав символ #.

Chroot также раскоментируем, чтобы убедиться, что пользователь, подключившийся по FTP имеет доступ к файлам внутри разрешённой директории:

chroot_local_user=YES

Нужно будет добавить несколько новых значений вручную, вы можете просто вставить их в конец файла.

Вначале, user_sub_token добавим к пути каталога local_root. Это позволит конфигурации работать с текущим пользователем и любым другим пользователем, который будет добавлен позже:

user_sub_token=$USER
local_root=/home/$USER/ftp

Чтобы быть уверенным, что доступно достаточное количество соединений, мы ограничим количество портов, используемое в конфигурационном файле:

pasv_min_port=40000
pasv_max_port=50000

Сохраните изменения комбинацией Ctrl+X и выходите из редактора.

Делаем защищенный FTP

По умолчанию, FTP не делает никакого шифрование данных, поэтому мы будем использовать TLS/SSL, чтобы позаботиться о безопасности. В качестве первого шага нам нужно создать SSL сертификат и использовать его для защиты FTP сервера.

Для начала выполним следующую команду:

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem

Флаг –days делает сертификат действующим в течение года (можно увеличить это значение) и мы включаем 2048-битный приватный ключ RSA в этой же команде. Когда запросит нужные данные введите их в предоставленном поле.

После создания сертификата ещё раз откройте конфигурационный файл:

sudo nano /etc/vsftpd.conf

В файле есть строка с “_rsa”. Закомментируйте эти две строки:

# rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
# rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key

Вместо этого мы направим файл конфигурации на сертификат, который только что создали. Добавьте такие строки:

rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem

Теперь мы включим SSL и убедимся, что только пользователи со включённым SSL могут с нами связываться. Измените значение ssl_enable на YES:

ssl_enable=YES

Теперь добавьте следующие строки для продолжения создания защиты (это запретить какие-либо анонимные соединения с использованием SSL):

allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES

Настройте TLS используя:

ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO

Здесь мы добавим ещё 2 опции. Во-первых, повторное использование SSL не будет необходимым, потому что это может привести к разрывам у большого количества клиентов. Во-вторых, мы будем использовать высокозащищенный код шифрования, что будет означать, что длина ключа соответствует (или больше, чем) 128 бит.

require_ssl_reuse=NO
ssl_ciphers=HIGH

Сделаем ещё раз перезапуск, для вступления изменений в силу:

sudo systemctl restart vsftpd

На этом все. Вы настроили FTP сервер на вашем Debian для работы с протоколом SSL/TLS.

Tags: