VSFTPD сервер - тонкости настройки

При настройке важно понимать несколько моментов.

Настройка каталогов и шелл

  1. Если используем chroot - владельцем домашнего каталога пользователя FTP должен быть другой пользователь (обычно root, но иногда был, например, bitrix) Права на каталог /home/ftpuser 775 

  2. Группу для пользователя ставим ftp, а шелл /usr/sbin/nologin
    Важный момент! Надо вписать /usr/sbin/nologin в файл /etc/shells
    Это необходимо, поскольку по умолчанию vsftpd использует авторизацию PAM, а файл настроек /etc/pam.d/vsftpd содержит:

auth required pam_shells.so
Модуль PAM shells ограничивает доступ к оболочкам, перечисленным в файле /etc/shells.

  1. Запись в корневую папку таким образом становится недоступной - надо создать подпапку (обычно: upload) и на нее уже ставить владельцем текущего FTP-пользователя.

Пассивный режим

  1. Обязательно настраивать пассивный режим работы, т.к. он нужен в большинстве практических задач.
  2. В правилах файерволла надо открыть, помимо 21, 20 портов, еще и диапазон пассивных портов.
  3. При настройке FTP-сервера на Centos 7 столкнулся с тем, что обязательно надо добавить в конфиг параметр: port_enable=YES. Без этого не будет работать.

Файерволл

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

iptables -I INPUT -p tcp --dport 5500:5600 -j ACCEPT
service iptables save
service iptables restart

В Centos - сначала определим активную зону:

firewall-cmd --get-active-zones
public
  interfaces: eth0

Затем, добавим правило:

firewall-cmd --permanent --zone=public --add-port=5500-5600/tcp
firewall-cmd --reload

Вот образец правильного конфига (проверено временем):

listen=YES
listen_port=21
listen_ipv6=NO
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
chown_uploads=YES
xferlog_file=/var/log/vsftpd.log
idle_session_timeout=600
ftpd_banner=Welcome to Omega FTP service.
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
ssl_enable=NO
utf8_filesystem=YES
pasv_enable=YES
pasv_min_port=5500
pasv_max_port=5600
#pasv_address=10.100.1.33
pasv_address=85.143.178.30
# обязательно для Centos 7!
port_enable=YES

При загрузке файлов через vsftpd у файлов менялись права на 755.
Это не давало право участникам группы впоследствии менять (удалять) файлы, закачанные их коллегами (из той-же группы).

local_umask=022 означает что у файлов будет “вычтены” (замаскированы)  права по данной маске.

Считается просто: file_open_mode - local_umask

777 -  022 = 755

Не забываем, что загруженные по умолчанию файлы не имеют права на запуск (т.е. 666).
Чтобы это исправить, надо явно указывать в конфиге file_open_mode=0777:

local_umask=022
file_open_mode=0777
Важно!! Порядок следования параметров имеет важное значение!
Сначала umask, потом open_mode
Иначе все файлы будут с правами 777.

Важно!! Если надо доступ из интернет и из LAN, то надо менять запись pasv_address.
При этом мне не удалось обеспечить работу в пассивном режиме сразу и изнутри и снаружи.
Поставил pasv_address=85.143.178.30 для внешних клиентов, а изнутри использую “активный” режим.

11.07.2017