Instalacja serwera ftp na OpenWrt/LEDE
Ostatnia zmiana: 2021-06-02 20:55
Jeżeli ruter posiada nośnik zewnętrzny w postaci dysku, pamięci flash lub karty SD można zainstalować serwer ftp. Dzięki temu wymiana plików może być przeprowadzona najszybszym dostępnym sposobem wykorzystując klienta ftp lub po prostu przeglądarkę WWW. Protokół FTP jest zwykle szybszy od "otoczenia sieciowego" (samby). W OpenWrt dostępne jest kilka różnych programów realizujących to zadanie, w tym poradniku zostanie wykorzystany demon o nazwie vsftpd.
Całość przetestowano na OpenWrt oraz LEDE 17.01.
Instalacja
Dysk zewnętrzny, pamięć flash lub kartę należy zamontować w dowolnym katalogu; w tym przypadku nośnik zamontowany był w
/mnt/sda1. System plików na nośniku nie ma znaczenia dla ftp; może to być vfat, ntfs, ext2, ext3 lub ext4. Sposób montowania nośników opisano w
tym dokumencie.
Należy pamiętać że niektóre systemy plików nie obsługują uprawnień (vfat, ntfs), więc może być problem z właściwym przypisaniem praw dostępu.
Instalacja serwera ftp sprowadza się do wydania polecenia
# opkg update
# opkg install vsftpd
Konfiguracja
W Gargoyle pakiet vsftpd ma zmodyfikowane skrypty i przeznaczony jest do konfiguracji przy pomocy interfejsu graficznego. Jeżeli ma być konfigurowany ręcznie (jak przedstawiono poniżej), należy pakiet odinstalować i ponownie zainstalować jego normalną wersję z repozytorium OpenWrt lub uruchamiać ręcznie samego demona bez udziału skryptów startowych Gargoyle.
Nośnik
Należy pamiętać że dostęp do plików przez vsftpd, niezależnie od tego jak jest ustawiona jego konfiguracja, jest możliwy jeżeli użytkownik na którego się logujemy posiada prawa dostępu (odczytu) do danego pliku i prawa zapisu żeby mógł go zapisać lub usunąć. Z powodu przyjętego rozwiązania systemu bezpieczeństwa w vsftpd użytkownik na którego się logujemy nie może mieć prawa zapisu do katalogu głównego i nie może być jego właścicielem. Zakładając że udostępniamy katalog
/mnt/sda1 należy więc wykonać po zamontowaniu nośnika następujące polecenia:
# chown root.root /mnt/sda1
# chmod 755 /mnt/sda1
Plik konfiguracyjny
Domyślna konfiguracja serwera znajduje się w pliku
/etc/vsftpd.conf, do edycji używamy edytorów typu
vi lub
nano. Jako podstawę można przyjąć następującą jego zawartość:
background=yes
listen=yes
local_umask=022
check_shell=no
session_support=no
chroot_local_user=yes
user_config_dir=/etc/vsftpd_users
seccomp_sandbox=no
Jeżeli chcemy mieć w logach informacje o tym kto się podłączył i co ściągał dodajemy do tego pliku jeszcze kilka linii:
syslog_enable=yes
log_ftp_protocol=yes
Tworzymy także brakujący katalog jeżeli go jeszcze nie ma:
# mkdir -p /etc/vsftpd_users
Następnie w zależności od potrzeb należy ją uzupełnić o jeden z niżej wymienionych szablonów dający określony dostęp.
Dostęp anonimowy
Użytkownik
anonymous określony jest w pliku
/etc/passwd jako
ftp. Wystarczy zmienić mu tylko katalog domowy tak, żeby wskazywał na ten który chcemy udostępnić. Można to wykonać poleceniem (w tym przypadku wskazujemy katalog
/mnt/sda1):
# sed -i 's!55:ftp:\(.*\):!55:ftp:/mnt/sda1:!' /etc/passwd
Do pliku konfiguracyjnego
/etc/vsftpd.conf dodajemy
Tworzymy plik
/etc/vsftpd_users/ftp o zawartości:
dirlist_enable=yes
download_enable=yes
write_enable=no
anon_upload_enable=no
anon_other_write_enable=no
anon_mkdir_write_enable=no
W katalogu głównym ftp tworzymy podkatalog o nazwie
upload do którego użytkownik anonimowy będzie miał możliwość zapisu i nadajemy do niego prawa:
# mkdir -p /mnt/sda1/upload
# chmod 777 /mnt/sda1/upload
Do pliku konfiguracyjnego
/etc/vsftpd.conf dodajemy
Tworzymy plik
/etc/vsftpd_users/ftp o zawartości:
dirlist_enable=yes
download_enable=yes
write_enable=yes
anon_upload_enable=yes
anon_other_write_enable=yes
anon_mkdir_write_enable=yes
Jeżeli chcemy aby do plików i katalogów przesyłanych przez użytkownika
anonymous mieli dostęp wszyscy inni (uprawnienia 555 na plikach), to dodajemy do pliku
/etc/vsftpd_users/ftp kolejną linię
Dostęp dla określonego użytkownika
Opis dodawania do systemu nowego użytkownika opisany jest w
tym dokumencie. W skrócie: należy utworzyć nowego użytkownika (w tym przypadku:
malgosia) przez dopisane go do odpowiednich plików konfiguracyjnych i ustawić mu hasło. Katalog domowy będzie określał gdzie użytkownik znajdzie się po zalogowaniu przez ftp (w tym przypadku:
/mnt/sda1).
# echo "malgosia:x:1000:65534:malgosia:/mnt/sda1:/bin/false" >> /etc/passwd
# echo "malgosia:x:0:0:99999:7:::" >> /etc/shadow
# passwd malgosia
Do pliku konfiguracyjnego
/etc/vsftpd.conf dodajemy
Tworzymy plik
/etc/vsftpd_users/malgosia (nazwa pliku musi odpowiadać nazwie użytkownika jakiego stworzyliśmy) o zawartości:
dirlist_enable=yes
download_enable=yes
write_enable=no
W katalogu głównym ftp tworzymy podkatalog o nazwie
upload do którego użytkownik będzie miał możliwość zapisu i nadajemy do niego prawa zapisu:
# mkdir -p /mnt/sda1/upload
# chmod 777 /mnt/sda1/upload
Do pliku konfiguracyjnego
/etc/vsftpd.conf dodajemy
Tworzymy plik
/etc/vsftpd_users/malgosia (nazwa pliku musi odpowiadać nazwie użytkownika jakiego stworzyliśmy) o zawartości:
dirlist_enable=yes
download_enable=yes
write_enable=yes
Wg podanej konfiguracji można wykonać dostęp dla wielu użytkowników mających dostęp do różnych katalogów i różnymi prawami (zapis-odczyt lub tylko do odczytu).
Dla określonych użytkowników możliwe jest obejście tworzenia katalogu
upload przez ustawienie w pliku (w tym przykładzie:
/etc/vsftpd_users/malgosia) opcji
allow_writeable_chroot=yes. W takim przypadku katalog główny musi posiadać prawa zapisu dla użytkowników (
chmod 777 /mnt/sda1). Ta opcja nie działa użytkownika anonimowego.
Uruchomienie serwera
Ostatecznie należy jeszcze uruchomić serwer poleceniem
# /etc/init.d/vsftpd start
oraz spowodować, żeby uruchamiał się przy starcie systemu
# /etc/init.d/vsftpd enable
Zakończenie
Jeżeli chcemy mieć dostęp do serwera ftp "z zewnątrz", należy odblokować port 21 na firewallu, czyli
# uci add firewall rule
# uci set firewall.@rule[-1]._name=FTP
# uci set firewall.@rule[-1].src=wan
# uci set firewall.@rule[-1].target=ACCEPT
# uci set firewall.@rule[-1].proto=tcp
# uci set firewall.@rule[-1].dest_port=21
# uci commit firewall
# /etc/init.d/firewall restart
Należy pamiętać że ten poradnik nie wyczerpuje możliwości konfiguracyjnych vsftpd. Dostępów i konfiguracji można wykonać na kilka różnych sposobów, po szczegóły odsyłam do manuala projektu:
https://security.appspot.com/vsftpd/vsftpd_conf.html .