Назад | Перейти на главную страницу

Пользователь Chroot VSFTPD, не может войти в папку

Я пытаюсь войти в папку NGINX через Filezilla с моим локальным пользователем.

Операционная система моего сервера - CentOS 7. Я установил vsftpd следующим образом:

#Install VSFTP
sudo yum -y install vsftpd
#Make Log file
sudo mkdir /var/log/vsftpd
sudo touch /var/log/vsftpd/vsftpd.log
sudo chmod 0777 /var/log/vsftpd/vsftpd.log
#Make SSL/TLS certificate; Pem file
sudo openssl req -x509 -days 365 -newkey rsa:2048 -nodes -keyout /etc/vsftpd/vsftpd.pem -out /etc/vsftpd/vsftpd.pem
#Update the SELinux boolean values for FTP service;  getsebool -a | grep ftp
sudo setsebool -P ftp_home_dir on
#Place "free" Users in Allow list
sudo echo "bla_user" > /etc/vsftpd.chroot_list

Это мой файл /etc/vsftpd/vsftpd.conf:

#Banner
ftpd_banner=Welcome to FTP service
#Pam service name
pam_service_name=vsftpd
#Tuning FTP users
anonymous_enable=NO
#Connect Local users; TLS/SSL/FTPS
local_enable=YES
#Check shell
check_shell=NO
#Write permissions
write_enable=YES
#Enable Chroot; Some Users are "free"
chroot_local_user=YES
chroot_list_enable=YES
#List of "free" Users
chroot_list_file=/etc/vsftpd.chroot_list
#Root dir
local_root=/usr/share/nginx/html/
#Ascii mode
ascii_upload_enable=YES
ascii_download_enable=YES
#Enable TLS/SSL
ssl_enable=YES
#Force Users to use TLS encryption
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
#Specify SSL certificate/private key; Pem file
rsa_cert_file=/etc/vsftpd/vsftpd.pem
rsa_private_key_file=/etc/vsftpd/vsftpd.pem
#Define port range for Passive mode connections
pasv_max_port=51000
pasv_min_port=50000
pasv_address=<My router IP>
pasv_addr_resolve=NO
#Client session is timed out after 300 seconds
idle_session_timeout=300
#Maximum number of connections per IP, helps against DoS/DDoS attacks
max_per_ip=50
#Show hidden files and the "." and ".." folders
force_dot_files=YES
#Use localtime
use_localtime=YES
#Make files Executable
file_open_mode=0777
#Enable logging
xferlog_enable=YES
xferlog_std_format=NO
xferlog_file=/var/log/vsftpd/vsftpd.log
log_ftp_protocol=YES
debug_ssl=YES

Я создал каталог для chrooted пользователя (этот не должен быть бесплатным) и т. Д., Например:

#Make dir
sudo mkdir /usr/share/nginx/html/test_user
#Make SFTP User
sudo useradd -d /usr/share/nginx/html/test_user -s /usr/sbin/nologin test_user
#Define Password
sudo passwd ksuser
#Place ftp user in NGINX group
sudo usermod -aG nginx test_user

Потом я запустил такие сервисы:

#Start services
sudo systemctl start vsftpd
sudo systemctl enable vsftpd
sudo firewall-cmd --permanent --add-port=21/tcp
sudo firewall-cmd --permanent --add-service=ftp
sudo firewall-cmd --permanent --add-port=51000/tcp
#Restart firewall
sudo firewall-cmd --reload

Но когда я пытаюсь войти в систему с помощью Filezilla, я получаю:

230 Login successful, 200 PROT now Private ect.

Но в итоге я получил:

Connection lost, and Receiving folders failed

Я попытался открыть свои порты и перезагрузил брандмауэр, предложенный HBruijn. Также я запускаю эти команды, заданные запуском audit2why, предложенного Мирчей:

#Allow access
sudo setsebool -P nis_enabled 1
#Allow ftpd to connect all unreserved
sudo setsebool -P ftpd_connect_all_unreserved 1

Я все еще не могу войти в свою папку. Может это мой роутер, или надо еще включить с помощью setsebool? Это мой логический список:

ftp_home_dir --> on
ftpd_anon_write --> off
ftpd_connect_all_unreserved --> on
ftpd_connect_db --> off
ftpd_full_access --> off
ftpd_use_cifs --> off
ftpd_use_fusefs --> off
ftpd_use_nfs --> off
ftpd_use_passive_mode --> off
httpd_can_connect_ftp --> off
httpd_enable_ftp_server --> off
sftpd_anon_write --> off
sftpd_enable_homedirs --> off
sftpd_full_access --> off
sftpd_write_ssh_home --> off
tftp_anon_write --> off
tftp_home_dir --> off

Вы определяете диапазон пассивных портов 50000-51000 в vsftpd.conf, но явно открываете только один порт 51000 в конфигурации вашего брандмауэра.

Поскольку вы используете TLS для защиты соединения, обычный вспомогательный модуль FTP netfilter не может динамически открывать связанный пассивный порт.

Решение: откройте правильный диапазон портов.

 sudo firewall-cmd --permanent --add-port=50000-51000/tcp

Сначала вы должны исключить проблему с SELinux. Найдите в /var/log/audit/audit.log записи ftp:

audit2why < /var/log/audit/audit.log

Проверьте журналы vsftpd на наличие ошибок.

Если ничего не работает, используйте strace на vfstp и попытайтесь выяснить, где происходит сбой.

Какой контекст SELinux установлен для / usr / share / nginx / html / file? Выполните следующую команду, чтобы увидеть это:

ls -lZd /usr/share/nginx/html/