Cíl
Cílem je nainstalovat a nakonfigurovat FTP server na Debian 9 Stretch Linux umožňující anonymní i lokální přístup uživatelů.
Verze operačního systému a softwaru
- Operační systém: – Debian 9 Stretch
- Software: – vsFTPd verze 3.0.3
Požadavky
Privilegovaný přístup k
Obtížnost
STŘEDNÍ
Konvence
- # – vyžaduje, aby dané linuxové příkazy byly spouštěny s právy root buď přímo jako uživatel root, nebo pomocí
sudo
příkaz - $ – vyžaduje, aby dané linuxové příkazy byly spouštěny jako běžný neprivilegovaný uživatel
Pokyny
Následující tutoriál vysvětlí, jak nainstalovat a nakonfigurovat FTP server pomocí vsFTPd
démon. Bude také diskutovat o různých konfiguracích umožňujících přístup pouze pro zápis nebo pro čtení anonymním uživatelům i místním uživatelům.
vsFTPd instalace
Začněme instalací serveru vsFPTd a FTP klienta:
# apt install vsftpd ftp
Ve výchozím nastavení je server vsFTPd nakonfigurován tak, aby umožňoval uživatelům systému přístup ke svým domovským adresářům s přístupem pouze pro čtení. Následuje výchozí konfigurační soubor vsFTPd /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
Jak již bylo zmíněno, výše uvedený konfigurační soubor udělí přístup pouze pro čtení každému systémovému uživateli uvedenému v /etc/passwd
soubor. Použijte ftp
a pokuste se připojit pomocí uživatelského jména a hesla kteréhokoli z uživatelů místního systému:
# 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.
Pokud potřebujete přístup pouze pro čtení pro místní uživatele, jste hotovi.
Povolit uživateli přístup pro zápis
Chcete-li přidat přístup pro zápis pro všechny uživatele lokálního systému, odkomentujte nebo přidejte následující stanzu write_enable=YES
. Nový konfigurační soubor se skládá z:
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
Dále restartujte vsFTPd:
# systemctl restart vsftpd
Proveďte nový test pomocí ftp
příkaz pro potvrzení přístupu pro zápis:
# 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.
Povolit pouze konkrétní uživatele
V současné době náš FTP server umožňuje přístup každému systémovému uživateli definovanému v /etc/passwd
soubor. Aby se mohli přihlásit pouze konkrétní uživatelé, můžeme do našeho konfiguračního souboru zahrnout následující řádky:
userlist_file=/etc/vsftpd.userlist userlist_enable=YES
Výše uvedené umožní předdefinovaný seznam uživatelů, kde budou všichni uživatelé uvedeni v /etc/vsftpd.userlist
(jedno uživatelské jméno na řádek) bude mít přístup k FTP odepřen, zatímco všichni ostatní uživatelé systému se budou moci přihlásit. Vytvořme nový /etc/vsftpd.userlist
seznam uživatelů sestávající z jednoho uživatele linuxconfig
:
# echo linuxconfig > /etc/vsftpd.userlist
Restartujte server vsFTPd:
# systemctl restart vsftpd
Proveďte nový test pomocí ftp
příkaz pro potvrzení odepřeného přístupu k FTP serveru pro linuxconfig
uživatel:
# ftp localhost Connected to localhost. 220 (vsFTPd 3.0.3) Name (localhost:root): linuxconfig 530 Permission denied. Login failed. ftp>
Pokud však potřebujete mít možnost přihlásit se pouze s uživateli definovanými v /etc/vsftpd.userlist
, přidejte následující možnost konfigurace userlist_deny=NO
do konfiguračního souboru vsFTPd /etc/vsftpd.conf
. Níže je náš aktuální /etc/vsftpd.conf
konfigurační soubor:
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
Povolit anonymní
V této fázi také umožníme anonymním uživatelům přístup pouze pro čtení. Začněme vytvářet nový adresář, který bude použit jako kořenový adresář pro anonymního uživatele, např. /var/ftp
. Pro testovací účely můžeme také umístit libovolný testovací soubor do /var/ftp
:
# mkdir /var/ftp/ # chmod 555 /var/ftp/ # chown ftp.ftp /var/ftp/ # touch /var/ftp/ANONYMOUS.TXT
Dále vložte následující řádky do /etc/vsftpd.conf
konfigurační soubor pro definování anonymního domovského adresáře a anonymního přístupu:
anon_root=/var/ftp anonymous_enable=YES
Volitelně přidejte no_anon_password=YES
line instruovat vsFTPd, aby umožnil anonymnímu uživateli přihlásit se automaticky bez hesla. Protože jsme nyní definovali seznam uživatelů, musíme také přidat anonymous
uživatele do seznamu:
# echo anonymous >> /etc/vsftpd.userlist # cat /etc/vsftpd.userlist linuxconfig anonymous
Jako obvykle restartujte FTP server a proveďte platnost vaší aktuální konfigurace:
# systemctl restart vsftpd
Test anonymního přihlášení:
# 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>
Níže naleznete náš aktuální konfigurační soubor 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
Povolit anonymní přístup pro zápis
Dále umožníme anonymním uživatelům nahrávat soubory a vytvářet nové adresáře a další. Chcete-li tak učinit, vytvořte nový adresář upload
v rámci /var/ftp
adresář:
# mkdir /var/ftp/upload # chown ftp.ftp /var/ftp/upload/
Dále přidejte do konfiguračního souboru vsFTPd následující řádky:
anon_upload_enable=YES anon_other_write_enable=YES anon_mkdir_write_enable=YES
Restartujte server:
# systemctl restart vsftpd
Po restartu bude anonymní uživatel moci nahrávat soubory, vytvářet adresáře přejmenovávat soubory:
# 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>
Níže naleznete náš konečný konfigurační soubor 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
Příloha
Chybová zpráva:
# 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>
Výše uvedené znamená, že váš anon_root
adresář je zapisovatelný. Řešením je udělat to pouze pro čtení. Příklad:
# chmod 555 /var/ftp
Případně zkuste do konfiguračního souboru vsFTPd přidat následující řádek:
allow_writeable_chroot=YES