Obiettivo
L'obiettivo è installare e configurare il server FTP su Debian 9 Stretch Linux consentendo l'accesso anonimo o locale dell'utente.
Sistema operativo e versioni software
- Sistema operativo: – Debian 9 Allunga
- Software: – vsFTPd versione 3.0.3
Requisiti
Accesso privilegiato a
Difficoltà
MEDIO
Convenzioni
- # – richiede che i comandi linux dati vengano eseguiti con i privilegi di root direttamente come utente root o usando
sudo
comando - $ – richiede che i comandi linux dati vengano eseguiti come un normale utente non privilegiato
Istruzioni
Il seguente tutorial spiegherà come installare e configurare il server FTP utilizzando vsFTPd
demone. Verranno inoltre discusse varie configurazioni per consentire l'accesso in scrittura o in sola lettura a utenti anonimi e utenti locali.
Installazione vsFTPd
Iniziamo dall'installazione del server vsFPTd e del client FTP:
# apt install vsftpd ftp
Per impostazione predefinita, il server vsFTPd viene configurato per consentire agli utenti del sistema di accedere alle proprie directory home con accesso in sola lettura. Quello che segue è un file di configurazione vsFTPd predefinito /etc/vsftpd.conf
:
listen=NO listen_ipv6=YES anonymous_enable=NO local_enable=YES dirmessage_enable=YES use_localtime=YES xferlog_enable=YES connect_from_port_20=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
Come già accennato, il file di configurazione sopra garantirà solo un accesso in sola lettura a qualsiasi utente di sistema elencato in /etc/passwd
file. Usa ftp
comando e tentare di connettersi utilizzando nome utente e password di qualsiasi utente del sistema locale:
# ftp localhost Connected to localhost. 220 (vsFTPd 3.0.3) Name (localhost:root): linuxconfig 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> put FILE.TXT local: FILE.TXT remote: FILE.TXT 200 EPRT command successful. Consider using EPSV. 550 Permission denied.
Se hai solo bisogno dell'accesso in sola lettura da parte dei tuoi utenti locali, hai finito.
Consenti accesso in scrittura all'utente
Per aggiungere l'accesso in scrittura per tutti gli utenti locali del sistema, rimuovere il commento o aggiungere la seguente stanza write_enable=YES
. Il nuovo file di configurazione è composto da:
listen=NO listen_ipv6=YES anonymous_enable=NO local_enable=YES dirmessage_enable=YES use_localtime=YES xferlog_enable=YES connect_from_port_20=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 write_enable=YES
Quindi, riavvia il tuo vsFTPd:
# systemctl restart vsftpd
Esegui un nuovo test con ftp
comando per confermare l'accesso in scrittura:
# ftp localhost Connected to localhost. 220 (vsFTPd 3.0.3) Name (localhost:root): linuxconfig 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> put FILE.TXT local: FILE.TXT remote: FILE.TXT 200 EPRT command successful. Consider using EPSV. 150 Ok to send data. 226 Transfer complete. ftp> ls 200 EPRT command successful. Consider using EPSV. 150 Here comes the directory listing. -rw------- 1 1000 1000 0 Jun 07 12:45 FILE.TXT 226 Directory send OK.
Consenti solo utenti specifici
Al momento il nostro server FTP consente l'accesso a qualsiasi utente di sistema definito all'interno di /etc/passwd
file. Per consentire solo a utenti specifici di poter accedere, possiamo includere le seguenti righe nel nostro file di configurazione:
userlist_file=/etc/vsftpd.userlist userlist_enable=YES
Quanto sopra abiliterà un elenco di utenti predefinito in cui qualsiasi utente elencato all'interno di /etc/vsftpd.userlist
(un nome utente per riga) avrà accesso all'FTP negato mentre tutti gli altri utenti del sistema potranno accedere. Creiamo un nuovo /etc/vsftpd.userlist
lista utenti composta da un singolo utente linuxconfig
:
# echo linuxconfig > /etc/vsftpd.userlist
Riavvia il server vsFTPd:
# systemctl restart vsftpd
Esegui un nuovo test con ftp
comando per confermare l'accesso negato al server FTP per linuxconfig
utente:
# ftp localhost Connected to localhost. 220 (vsFTPd 3.0.3) Name (localhost:root): linuxconfig 530 Permission denied. Login failed. ftp>
Tuttavia, se devi essere in grado di accedere solo con gli utenti definiti in /etc/vsftpd.userlist
, aggiungi la seguente opzione di configurazione userlist_deny=NO
nel tuo file di configurazione vsFTPd /etc/vsftpd.conf
. Di seguito è riportato il nostro attuale /etc/vsftpd.conf
file di configurazione:
listen=NO listen_ipv6=YES anonymous_enable=NO local_enable=YES dirmessage_enable=YES use_localtime=YES xferlog_enable=YES connect_from_port_20=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 write_enable=YES userlist_file=/etc/vsftpd.userlist userlist_enable=YES userlist_deny=NO
Consenti anonimo
In questa fase consentiremo anche l'accesso in sola lettura da parte di utenti anonimi. Iniziamo a creare una nuova directory che verrà utilizzata come directory principale per utenti anonimi, ad es. /var/ftp
. A scopo di test possiamo anche inserire alcuni file di test arbitrari all'interno di /var/ftp
:
# mkdir /var/ftp/ # chmod 555 /var/ftp/ # chown ftp.ftp /var/ftp/ # touch /var/ftp/ANONYMOUS.TXT
Inoltre, includi le seguenti righe in /etc/vsftpd.conf
file di configurazione per definire la home directory anonima e l'accesso anonimo:
anon_root=/var/ftp anonymous_enable=YES
Facoltativamente, aggiungi no_anon_password=YES
riga per istruire vsFTPd per consentire all'utente anonimo di accedere automaticamente senza la password. Poiché ora abbiamo definito l'elenco degli utenti, dobbiamo anche aggiungere il anonymous
utente alla lista:
# echo anonymous >> /etc/vsftpd.userlist # cat /etc/vsftpd.userlist linuxconfig anonymous
Come di consueto, riavvia il tuo server FTP ed esegui una validità della tua configurazione attuale:
# systemctl restart vsftpd
Prova l'accesso anonimo:
# ftp localhost Connected to localhost. 220 (vsFTPd 3.0.3) Name (localhost:root): anonymous 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> ls 200 EPRT command successful. Consider using EPSV. 150 Here comes the directory listing. -rw-r--r-- 1 0 0 0 Jun 07 13:29 ANONYMOUS.TXT 226 Directory send OK. ftp>
Di seguito puoi trovare il nostro attuale file di configurazione vsFTPd:
listen=NO listen_ipv6=YES anonymous_enable=NO local_enable=YES dirmessage_enable=YES use_localtime=YES xferlog_enable=YES connect_from_port_20=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 write_enable=YES userlist_file=/etc/vsftpd.userlist userlist_enable=YES userlist_deny=NO anon_root=/var/ftp anonymous_enable=YES no_anon_password=YES
Abilita accesso in scrittura anonimo
Quindi consentiamo agli utenti anonimi di caricare file e creare nuove directory e altro ancora. Per farlo, crea una nuova directory upload
all'interno del /var/ftp
directory:
# mkdir /var/ftp/upload # chown ftp.ftp /var/ftp/upload/
Quindi, aggiungi le seguenti righe nel tuo file di configurazione vsFTPd:
anon_upload_enable=YES anon_other_write_enable=YES anon_mkdir_write_enable=YES
Riavvia il tuo server:
# systemctl restart vsftpd
Dopo il riavvio l'utente anonimo potrà caricare file, creare directory rinominare file:
# ftp localhost Connected to localhost. 220 (vsFTPd 3.0.3) Name (localhost:root): anonymous 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> ls 200 EPRT command successful. Consider using EPSV. 150 Here comes the directory listing. -rw-r--r-- 1 0 0 0 Jun 07 13:29 ANONYMOUS.TXT drwxr-xr-x 2 108 112 4096 Jun 07 13:57 upload 226 Directory send OK. ftp> cd upload 250 Directory successfully changed. ftp> put FILE.TXT local: FILE.TXT remote: FILE.TXT 200 EPRT command successful. Consider using EPSV. 150 Ok to send data. 226 Transfer complete. ftp> ls 200 EPRT command successful. Consider using EPSV. 150 Here comes the directory listing. -rw------- 1 108 112 0 Jun 07 13:57 FILE.TXT 226 Directory send OK. ftp> rename FILE.TXT NEW.TXT 350 Ready for RNTO. 250 Rename successful. ftp> ls 200 EPRT command successful. Consider using EPSV. 150 Here comes the directory listing. -rw------- 1 108 112 0 Jun 07 13:57 NEW.TXT 226 Directory send OK. ftp>
Di seguito puoi trovare il nostro file di configurazione finale vsFTPd:
listen=NO listen_ipv6=YES anonymous_enable=NO local_enable=YES dirmessage_enable=YES use_localtime=YES xferlog_enable=YES connect_from_port_20=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 write_enable=YES userlist_file=/etc/vsftpd.userlist userlist_enable=YES userlist_deny=NO anon_root=/var/ftp anonymous_enable=YES no_anon_password=YES anon_upload_enable=YES anon_other_write_enable=YES anon_mkdir_write_enable=YES
Appendice
Messaggio di errore:
# ftp localhost Connected to localhost. 220 (vsFTPd 3.0.3) Name (localhost:root): anonymous 500 OOPS: vsftpd: refusing to run with writable root inside chroot() Login failed. ftp>
Quanto sopra indica che il tuo anon_root
directory è scrivibile. La soluzione è renderlo di sola lettura. Esempio:
# chmod 555 /var/ftp
In alternativa, prova ad aggiungere la seguente riga nel tuo file di configurazione vsFTPd:
allow_writeable_chroot=YES