Chroot user VSFTPD, não pode entrar na pasta

1

Estou tentando entrar em uma pasta NGINX via Filezilla com meu usuário local.

O sistema operacional do meu servidor é o CentOS 7. Eu instalei o vsftpd desta maneira:

#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

Este é o meu arquivo /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

Eu fiz um diretório para um usuário chrooted (este não deveria ser livre) ect., assim:

#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

Então comecei os serviços assim:

#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

Mas quando tento entrar no Filezilla, recebo:

230 Login successful, 200 PROT now Private ect.

Mas no final eu peguei:

Connection lost, and Receiving folders failed

Eu tentei abrir minhas portas e recarregar meu firewall, sugerido por HBruijn. Além disso, executo esses comandos, dando-lhes uma auditoria por sugestão de Mircea:

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

Ainda não consigo entrar na minha pasta. Pode ser meu roteador, ou devo ligar mais com o setsebool? Esta é minha lista booleana:

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
    
por Jeroen Steen 23.01.2015 / 12:35

2 respostas

2

Você define um intervalo de portas passivo de 50000-51000 no vsftpd.conf, mas apenas abre explicitamente uma única porta 51000 em sua configuração de firewall.

Como você está usando o TLS para proteger a conexão, o módulo auxiliar normal do netfilter FTP não pode abrir dinamicamente a porta passiva relacionada.

Solução: abra o intervalo de portas correto.

 sudo firewall-cmd --permanent --add-port=50000-51000/tcp
    
por 23.01.2015 / 13:02
0

Primeiro, você deve descartar um problema do SELinux. Pesquise /var/log/audit/audit.log para entradas de ftp:

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

Verifique se há erros nos logs do vsftpd.

Se nada estiver funcionando use strace no vfstp e tente descobrir onde está falhando.

Qual contexto do SELinux está definido para / usr / share / nginx / html / file? Execute o seguinte comando para ver isto:

ls -lZd /usr/share/nginx/html/
    
por 23.01.2015 / 12:57