Установка и настройка vsFTPd на Ubuntu

Thank you for reading this post, don't forget to subscribe!

Установка и настройка

Обнов­ля­ем спис­ки пор­тов в репозиториях:

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 — для актив­но­го режи­ма. Исполь­зу­ет­ся для пере­да­чи команд.
  • 21 — основ­ной порт FTP для передачи.
  • 60000-65535 — диа­па­зон дина­ми­че­ских пор­тов, кото­рый нами был опре­де­лен в кон­фи­гу­ра­ци­он­ном фай­ле. Исполь­зу­ет­ся для пас­сив­но­го режима.

Раз­ре­ша­ем и пере­за­пус­ка­ем сервис:

systemctl enable vsftpd

systemctl restart vsftpd

Добавление пользователя

По умол­ча­нию, авто­ри­за­ция выпол­ня­ет­ся с исполь­зо­ва­ни­ем локаль­ных поль­зо­ва­те­лей. Что­бы исполь­зо­вать спе­ци­аль­ную учет­ную запись, для под­клю­че­ния к FTP, созда­ем поль­зо­ва­те­ля сле­ду­ю­щей командой:

useradd ftpuser -d /ftp -s /bin/false -m

* где ftpuser — имя учет­ной запи­си; /ftp — домаш­ний ката­лог (в него будем попа­дать при под­клю­че­нии); /bin/false — запрет поль­зо­ва­те­лю на локаль­ный вход в систему.

Зада­ем пароль:

passwd ftpuser

Откры­ва­ем на редак­ти­ро­ва­ние сле­ду­ю­щий файл:

vi /etc/shells

И добав­ля­ем следующее:

/bin/false

* мы доба­ви­ли /bin/false в спи­сок раз­ре­шен­ных обо­ло­чек. В про­тив­ном слу­чае, может вер­нуть­ся ошиб­ка 530 Login incorrect.

Проверка

Для про­вер­ки под­клю­че­ния мож­но вос­поль­зо­вать­ся FTP-кли­ен­том на дру­гом ком­пью­те­ре (напри­мер, FileZilla или Total Commander).

Так­же мож­но уста­но­вить FTP-кли­ент на сервер:

apt-get install ftp

И для под­клю­че­ния исполь­зу­ем сле­ду­ю­щую команду:

ftp localhost

Систе­ма запро­сит логин и пароль.

Настройка SSL/TLS

TLS поз­во­ля­ет настро­ить без­опас­ный FTP, пере­да­ча дан­ных через кото­рый осу­ществ­ля­ет­ся по шиф­ро­ван­но­му каналу.

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

openssl req -new -x509 -days 1461 -nodes -out /etc/ssl/certs/vsftpd.pem -keyout /etc/ssl/private/vsftpd.key -subj "/C=RU/ST=SPb/L=SPb/O=Global Security/OU=IT Department/CN=ftp.test.local/CN=ftp"

* в дан­ном при­ме­ре мы созда­ем само­под­пи­сан­ный сер­ти­фи­кат на 4 года для URL ftp.test.local или ftp. Откры­тый ключ будет сохра­нен в фай­ле /etc/ssl/certs/vsftpd.pem, закры­тый — /etc/ssl/private/vsftpd.key. При жела­нии, мы можем исполь­зо­вать куп­лен­ный сер­ти­фи­кат или полу­чить его бес­плат­но у Let's Encrypt.

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

vi /etc/vsftpd.conf

Редак­ти­ру­ем строки:

rsa_cert_file=/etc/ssl/certs/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.key
ssl_enable=YES

* где ssl_enable раз­ре­ша­ет исполь­зо­ва­ние шиф­ро­ва­ния; rsa_cert_file — путь к откры­то­му клю­чу; rsa_private_key_file — путь к закры­то­му ключу.

И допи­сы­ва­ем следующие:

allow_anon_ssl=NO
force_local_data_ssl=NO
force_local_logins_ssl=NO
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
ssl_ciphers=HIGH

* где: 

  • allow_anon_ssl раз­ре­ша­ет исполь­зо­вать SSL ано­ним­ным пользователям; 
  • force_local_data_ssl тре­бу­ет исполь­зо­ва­ния шиф­ро­ва­ния, и если уста­но­вить YES, кли­ен­ты без шиф­ро­ва­ния не смо­гут подключиться; 
  • force_local_logins_ssl так­же тре­бу­ет под­клю­че­ние по SSL
  • ssl_tlsv1 — исполь­зо­вать TLS вер­сии 1; 
  • ssl_sslv2 и ssl_sslv3 — исполь­зо­вать SSL вер­сии 1 и 2; 
  • ssl_ciphers — выбор шиф­ра. В дан­ном при­ме­ре мы гово­рим исполь­зо­вать мак­си­маль­но безопасный.

Пере­за­пус­ка­ем FTP-сервер:

systemctl restart vsftpd

Виртуальные пользователи

Уста­нав­ли­ва­ем pam-модуль, поз­во­ля­ю­щий аутен­ти­фи­ци­ро­вать поль­зо­ва­те­лей с помо­щью passwd-like файлов:

apt install libpam-pwdfile

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

vi /etc/vsftpd.conf

user_config_dir=/etc/vsftpd_virtuser_conf
guest_enable=YES
virtual_use_local_privs=YES
pam_service_name=vsftpd
nopriv_user=vsftpd
guest_username=vsftpd

* где:

  • user_config_dir — ката­лог для хра­не­ния настро­ек пользователя.
  • guest_enable — раз­ре­ша­ем госте­вой вход.
  • virtual_use_local_privs — вир­ту­аль­ные поль­зо­ва­те­ли исполь­зу­ют при­ви­ле­гии, как локаль­ные, а не анонимные.
  • pam_service_name — имя pam-сервиса.
  • nopriv_user — под каким поль­зо­ва­те­лем рабо­та­ет сер­вер, когда ему не нуж­ны привилегии.
  • guest_username — имя госте­во­го пользователя.

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

apt install apache2-utils

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

mkdir /etc/vsftpd

htpasswd -cd /etc/vsftpd/ftpd.passwd virt1

htpasswd -d /etc/vsftpd/ftpd.passwd virt2

* обра­ти­те вни­ма­ние, опция -c коман­ды htpasswd исполь­зу­ет­ся толь­ко при созда­нии фай­ла (при пер­вом вво­де коман­ды). Мы созда­ем два поль­зо­ва­те­ля — virt1 и virt2.

Архи­ви­ру­ем име­ю­щий­ся pam-сер­вис для vsftpd:

mv /etc/pam.d/vsftpd /etc/pam.d/back_vsftpd

Созда­ем новый со сле­ду­ю­щим содержимым:

vi /etc/pam.d/vsftpd

auth required pam_pwdfile.so pwdfile /etc/vsftpd/ftpd.passwd
account required pam_permit.so

В самой систе­ме созда­ем поль­зо­ва­те­ля, кото­ро­го исполь­зу­ем как гостевого:

useradd vsftpd -d /home/vsftpd -g nogroup -m -s /bin/false

* с домаш­ней дирек­то­ри­ей /home/vsftpd, основ­ной груп­пой nogroup и без воз­мож­но­сти вхо­да в систе­му (-s /bin/false).

Созда­ем ката­лог хра­не­ния настро­ек вир­ту­аль­ных пользователей:

mkdir /etc/vsftpd_virtuser_conf

и созда­ем настрой­ку для первого:

vi /etc/vsftpd_virtuser_conf/virt1

local_root=/var/www/virt1

local_root — домаш­няя дирек­то­рия для FTP поль­зо­ва­те­ля virt1.

Созда­ем домаш­ний ката­лог для наше­го поль­зо­ва­те­ля virt1 и зада­ем пра­виль­ные права:

mkdir /var/www/virt1

chown vsftpd:nogroup /var/www/virt1

Пере­за­пус­ка­ем vsftpd:

systemctl restart vsftpd || service vsftpd restart