Настройка vsftpd для каталога пользователя

Обновим пакеты
Ubuntu

1
apt-get update

Centos

1
yum update

Установим vsftpd
Ubuntu

1
apt-get install vsftpd

Centos

1
yum install vsftpd

Сохраним дефолтный конфиг

1
cp /etc/vsftpd.conf /etc/vsftpd.conf.orig

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

1
adduser it-svc

Далее создадим каталог и установим на него нужные права

1
2
3
4
mkdir /home/it-svc/ftp
chown nobody:nogroup /home/it-svc/ftp - ubuntu
chown nobody:nobody /home/it-svc/ftp -centos
chmod a-w /home/it-svc/ftp

Проверим привилегии

1
2
3
4
[root@centos7test ~]# ls -la /home/it-svc/ftp
итого 8
dr-xr-xr-x. 2 nobody nobody 4096 фев 11 21:12 .
drwx------. 3 it-svc it-svc 4096 фев 11 21:12 ..

Создадим каталог для загрузки файлов пользователем

1
mkdir /home/it-svc/ftp/ftpupl

и назначим привилегии пользователя

1
2
3
4
5
6
chown it-svc:it-svc /home/it-svc/ftp/ftpupl
[root@centos7test ~]# ls -la /home/it-svc/ftp
итого 12
dr-xr-xr-x. 3 nobody nobody 4096 фев 11 21:18 .
drwx------. 3 it-svc it-svc 4096 фев 11 21:12 ..
drwxr-xr-x. 2 it-svc it-svc 4096 фев 11 21:18 ftpupl

Перейдем к настройкам vsftpd
Отключим анонимный доступ

1
2
# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
anonymous_enable=NO

Разрешим загрузку

1
2
# Uncomment this to enable any form of FTP write command.
write_enable=YES

Запретим выход пользователя за пределы его директории

1
2
3
4
5
6
7
# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
# users to NOT chroot().
# (Warning! chroot'ing can be very dangerous. If using chroot, make sure that
# the user does not have write access to the top level directory within the
# chroot)
chroot_local_user=YES

Так же добавим параметр user_sub_token для определения переменной USER

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

и установим порты для пассивного режима

1
2
pasv_min_port=40000
pasv_max_port=50000

Разрешим список разрешенных пользователей ФТП

1
2
3
userlist_enable=YES
userlist_file=/etc/vsftpd.userlist
userlist_deny=NO

Добавим пользователя в список разрешенных

1
echo "it-svc" | sudo tee -a /etc/vsftpd.userlist

перезапустим сервис

1
systemctl restart vsftpd

Проверим работу
FTP test

Настройка безопасности передачи
создаем папку для сертификатов

1
mkdir /etc/ssl/private

Генерируем и подписываем сертификаты

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

Генерация
Допишем в конфигурацию vsftpd настройки ключей

1
2
3
4
5
6
7
8
9
10
11
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
require_ssl_reuse=NO
ssl_ciphers=HIGH

Проверим
Проверка зашифрованное фтп через cmd
А так же посмотрим что будет если подключиться через FileZilla
Проверка ключа фтп через FilleZilla
Если требуется запретить пользователю доступ к ssh сделайте модификацию профиля

1
usermod it-svc -s /sbin/nologin

или же сделаем красивое уведомление о том что пользователю разрешено пользоваться только FTP
Создаем скрипт

1
nano /bin/ftponly

с следующим содержанием

1
2
#!/bin/sh
echo "Account-only FTP access."

установим права на выполнение

1
chmod a+x /bin/ftponly

Пропишем скрипт в шеллах

1
2
3
nano /etc/shells
...
/bin/ftponly

И зададим пользователю использование этого «шелла»

1
usermod it-svc -s /bin/ftponly

Доступ только к FTP