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

pasv_enable 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.

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

4) Обязательно настраивать пассивный режим работы, т.к. он нужен в большинстве практических задач.

5) В правилах файерволла надо открыть, помимо 21, 20 портов, еще и диапазон пассивных портов.

6) 10.07.17 при настройке 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 для внешних клиентов, а изнутри использую "активный" режим.

aizaro@mail.ru 11.07.2017