Обновим пакеты
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 |
Проверим работу
Настройка безопасности передачи
создаем папку для сертификатов
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 |
Проверим
А так же посмотрим что будет если подключиться через FileZilla
Если требуется запретить пользователю доступ к 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 |