V tomto článku ukážu, jak můžeme nastavit FTP server na Raspberry Pi které lze použít ke sdílení souborů mezi vašimi zařízeními. Použijeme vsFTPd protože je velmi stabilní, bezpečný a velmi rychlý FTP server. Také ukážu, jak nakonfigurovat vsFTPd, aby omezil uživatele na jejich HOME adresáře, spolu se šifrováním celého připojení pomocí SSL/TLS.
Pokud se chcete řídit tímto materiálem, musíte mít na svém Raspberry Pi nainstalovaný operační systém Raspberry Pi. Provoz FTP serveru nevyžaduje grafické rozhraní, proto doporučuji nainstalovat Raspberry Pi OS Lite se zapnutou službou SSH, která umožňuje vzdálený přístup.
Instalace vsFTPd bez Raspberry Pi
Balíček vsftpd je dostupný z oficiálních repozitářů operačního systému Raspberry Pi, takže jej lze nainstalovat pomocí následujících příkazů:
sudo apt update
sudo apt install vsftpd
Po instalaci se služba FTP serveru automaticky spustí. Chcete-li zkontrolovat stav této služby, spusťte:
sudo systemctl status vsftpd
Návrat z tohoto příkazu by měl vrátit „Aktivní:aktivní (běží) od…“, něco jako:
vsftpd.service - vsftpd FTP server
Loaded: loaded (/lib/systemd/system/vsftpd.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2021-05-23 07:02:41 BST; 14s ago
...
Jak přejít z CentOS 8 na Rocky Linux 8/Alma Linux 8
Nakonfigurujte FTP server pomocí vsFTPd
Konfigurace vsFTPd se provádí pomocí souboru /etc/vsftpd.conf .
Většina nastavení je dobře zdokumentována v konfiguračním souboru v angličtině. Pokud chcete zhodnotit všechny dostupné možnosti, doporučuji oficiální web na adrese:Manpage of VSFTPD.CONF
1. Přístup k FTP serveru
Chcete-li zajistit, aby k FTP serveru měli přístup pouze uživatelé místního operačního systému, vyhledejte v konfiguračním souboru položky anonymní_enable a local_enable a ponechte je takto:
anonymous_enable=NO
local_enable=YES
2. Povolení nahrávání
Vyhledejte a odkomentujte nastavení write_enable, abyste povolili změny systému souborů a umožnili uživatelům nahrávat a odstraňovat soubory:
write_enable=YES
3. Chroot klec
Abychom uživatelům FTP zabránili v přístupu k souborům mimo jejich domovskou složku, musíme vytvořit chroot jail bez komentáře u nastavení chroot_local_user :
chroot_local_user=YES
Když je povolena funkce chroot, vsFTPd zakáže nahrávání souborů, pokud je uživatelský adresář uzamčen.
Použijte jednu z níže uvedených možností k ponechání chrootovaného prostředí v režimu zápisu.
Možnost 1 – doporučený způsob, jak povolit nahrávání souborů a ponechat aktivní chroot při konfiguraci adresářů FTP. V následujícím příkladu vytvořím adresář ftp v domovské složce uživatele, který bude sloužit jako složka používaná chrootem a umožní do ní nahrát soubory.
user_sub_token=$USER
local_root=/home/$USER/ftp
Možnost 2 – Další alternativou je přidat nastavení allow_writeable_chroot do souboru vsftpd.conf. Tato možnost povolí možnost zapisovat do domovské složky uživatelů.
allow_writeable_chroot=YES
4. Pasivní připojení na FTP serveru
Ve výchozím nastavení používá vsFTPd aktivní režim. Chcete-li použít pasivní režim, nastavte minimální a maximální rozsah použitých portů.
pasv_min_port=30000
pasv_max_port=31000
vsFTPd může používat jakýkoli port v pasivním režimu. Když je povolen pasivní režim, FTP klient při připojování k FTP serveru otevře připojení na náhodném portu v intervalu, který nastavíte v konfiguračním souboru.
5. Omezit přihlašování na určité uživatele
VsFTPd můžeme nakonfigurovat tak, aby umožnil přihlášení pouze několika uživatelům. Chcete-li provést tuto konfiguraci, přidejte do souboru nastavení následující řádky:
userlist_enable=YES
userlist_file=/etc/vsftpd.user_list
userlist_deny=NO
Když je toto nastavení povoleno, musíte určit, kteří uživatelé se budou moci přihlásit, přidáním jejich uživatelských jmen do souboru /etc/vsftpd.user_list, s jedním uživatelem na řádek.
6. Zabezpečený přenos pomocí SSL/TLS
Chcete-li šifrovat přenos FTP pomocí SSL/TLS, musíte mít certifikát SSL a nakonfigurovat server FTP, aby jej používal. Můžeme použít existující certifikát SSL podepsaný certifikovaným vydavatelem nebo vytvořit certifikát s vlastním podpisem.
Pokud máte doménu nebo subdoménu směřující na IP vašeho FTP serveru, můžete si pomocí Let’s Encrypt vygenerovat bezplatný certifikát SSL. Pokud jste jej ještě nikdy nepoužili, postupujte podle oficiální dokumentace:Začínáme – Let’s Encrypt – Bezplatné certifikáty SSL/TLS
V tomto článku vygenerujeme klíč s vlastním podpisem pomocí příkazu openssl.
Spuštěním níže uvedeného příkazu vytvořte 2048bitový, 10letý soukromý klíč (certifikát) s vlastním podpisem, který je platný 10 let. Veřejné a soukromé klíče budou uloženy ve stejném souboru.
sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
Po vytvoření klíčů znovu otevřete soubor nastavení vsFTPd:
sudo nano /etc/vsftpd.conf
Najděte nastavení rsa_cert_file a rsa_private_key_file změnou jejich hodnot na soubor pem a nastavením ssl_enable nastavte na YES.
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
ssl_enable=YES
Pokud tato nastavení nejsou správně nakonfigurována, FTP server použije pouze TLS k zabezpečení připojení.
Restartujte nebo FTP server
Po provedení výše uvedených nastavení by soubor nastavení vsFTPd měl vypadat takto (bez komentářů):
listen=NO listen_ipv6=YES anonymous_enable=NO local_enable=YES write_enable=YES dirmessage_enable=YES use_localtime=YES xferlog_enable=YES connect_from_port_20=YES chroot_local_user=YES allow_writeable_chroot=YES pasv_min_port=30000 pasv_max_port=31000 userlist_enable=YES userlist_file=/etc/vsftpd.user_list userlist_deny=NO secure_chroot_dir=/var/run/vsftpd/empty pam_service_name=vsftpd rsa_cert_file=/etc/ssl/private/vsftpd.pem rsa_private_key_file=/etc/ssl/private/vsftpd.pem ssl_enable=YES
Uložte soubor a restartujte službu vsFTPd, aby se změny v tomto souboru projevily:
sudo systemctl restart vsftpd
Otevření brány firewall
Pokud ve své distribuci používáte bránu firewall UFW, musíte uvolnit provoz FTP a otevřít porty 20 (FTP data), 21 (příkazy FTP) a 30000-31000 (porty pasivního režimu) pomocí následujících příkazů:
sudo ufw allow 20:21/tcp
sudo ufw allow 30000:31000/tcp
Nyní si znovu přečtěte pravidla UFW, deaktivujte je a znovu povolte.
sudo ufw disable
sudo ufw enable
Vytvořit uživatele pro FTP
Pro otestování našeho FTP serveru vytvoříme uživatele.
- Pokud již máte uživatele, který bude použit, a chcete mu pouze udělit přístup, přeskočte první krok.
- Pokud jste v konfiguračním souboru nastavili allow_writeable_chroot=YES, přeskočte třetí krok.
01. Vytvořte uživatele s názvem nováserftp:
sudo adduser novouserftp
Po zobrazení výzvy nastavte heslo uživatele.
02. Přidejte uživatele do seznamu uživatelů, kteří mohou používat FTP server.
echo "novouserftp" | sudo tee -a /etc/vsftpd.user_list
03. Vytvořte adresář FTP a nastavte správná oprávnění.
sudo mkdir -p /home/novouserftp/ftp/upload
sudo chmod 550 /home/novouserftp/ftp
sudo chmod 750 /home/novouserftp/ftp/upload
sudo chown -R novouserftp: / home / novouserftp / ftp
Jak bylo uvedeno výše, uživatel bude moci nahrávat soubory do složky ftp/upload svého domovského adresáře.
V tuto chvíli je váš FTP server plně funkční a můžete se k němu připojit pomocí FTP klientů, jako je FileZilla!
Zakázat přístup k shellu
Ve výchozím nastavení, když je vytvořen uživatel, pokud není provedena žádná další konfigurace, má tento uživatel přístup SSH k serveru. Chcete-li tento přístup zakázat, vytvořte nový shell, který pouze zobrazí zprávu sdělující uživateli, že tento účet je omezen pouze na přístup FTP.
Vytvořte shell /bin/ftponly a udělejte jej spustitelným.
echo -e '#!/bin/sh echo "This account is limited to FTP access only."' | sudo tee -a /bin/ftponly
sudo chmod a+x /bin/ftponly
Přidejte nový shell do seznamu platných shellů v souboru /etc/shells :
echo "/bin/ftponly" | sudo tee -a /etc/shells
Změňte vytvořený uživatelský shell na /bin/ftponly:
sudo usermod novouserftp -s / bin / ftponly
Tento poslední příkaz použijte pro všechny uživatele, kteří budou mít přístup pouze k serveru FTP.
Závěry
Doufejme, že je jasné, jak nainstalovat a nakonfigurovat rychlý a bezpečný FTP server na vašem systému Raspberry Pi.