Instalacja serwera ftp na OpenWrt
Ostatnia zmiana: 2013-11-26 18:43
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. Dostępny jest już poradnik opisujący
vsftpd, jednakże dla wielu użytkowników problemem jest ustawienie odpowiednich uprawnień związanych z wymaganiami vsftpd. ProFTPD jest niestety większy objętościowo.
Przedstawiony program ma potężne możliwości i dobrą dokumentację (umożliwia m.in tworzenie wirtualnych użytkowników, obsługę wiele hostów, sterowanie prawami dostępu do poszczególnych katalogów, ograniczenia poleceń itd), po szczegóły odsyłam do
witryny projektu.
Całość przetestowano na Attitude Adjustment 12.09.
Założenia
Opisana konfiguracja jest jedną z najprostszych i opisuje możliwość utworzenia:
- użytkownika systemowego z możliwością logowania do ftp (odczyt/zapis)
- użytkownika anonimowego z możliwością logowania do ftp (odczyt/zapis)
Zakładamy że w systemie jest już katalog który chcemy udostępnić. Aby nie było problemów należy nadać mu pełne prawa odczytu i zapisu (uwaga: katalogi w systemie plików FAT nie obsługują uprawnień, patrz poradnik o
montowaniu nośników).
Instalacja
Dysk zewnętrzny, pamięć flash lub kartę należy zamontować w dowolnym katalogu. W tym przypadku nośnik zamontowany był w katalogu
/mnt/sda1. System plików na nośniku nie ma znaczenia dla ftp; może to być vfat, ext4 lub ext2, należy pamiętać tylko o uprawnieniach.
Instalacja serwera proftpd sprowadza się do wydania polecenia:
# opkg update
# opkg install proftpd
W niektórych przypadkach ProFTPD odmówi uruchomienia, jeżeli nie będzie można powiązać nazwy hosta z adresem IP. W domyślnym przypadku wystarczy więc polecenie:
# echo "192.168.1.1 openwrt" >> /etc/hosts
Konfiguracja dla użytkowników systemowych
Konfiguracja serwera znajduje się w pliku
/etc/proftpd.conf . Podstawowa konfiguracja - pełen dostęp do zapisu i odczytu dla użytkowników systemowych:
ServerName "OpenWrt ftp server"
ServerType standalone
DefaultServer on
RequireValidShell off
Port 21
UseIPv6 off
Umask 022
MaxInstances 10
User nobody
Group nogroup
DefaultRoot ~
AllowOverwrite on
Teraz należy utworzyć użytkowników, zgodnie z podanym
poradnikiem. W tym przykładzie zakładamy dwóch o nazwach
jacek i
agatka; katalogiem do którego ma się logować
jacek ma być
/mnt/sda1/filmy, zaś dla użytkownika
agatka -
/mnt/sda1/muzyka:
# echo "jacek:*:1000:65534:jacek:/mnt/sda1/filmy:/bin/false" >> /etc/passwd
# echo "jacek:*:0:0:99999:7:::" >> /etc/shadow
# passwd jacek
Należy ustawić hasło dla użytkownika
jacek.
# echo "agatka:*:1001:65534:agatka:/mnt/sda1/muzyka:/bin/false" >> /etc/passwd
# echo "agatka:*:0:0:99999:7:::" >> /etc/shadow
# passwd agatka
Katalogi domowe określają gdzie będą się użytkownicy logować. Numery użytkowników (1000,1001) należy dostosować do identyfikatorów występujących już w systemie.
Użytkownicy mają mieć prawa zapisy w tych katalogach, więc niezależnie od ustawień ftp muszą mieć te prawa w systemie plików:
# chmod -R 777 /mnt/sda1/filmy
# chmod -R 777 /mnt/sda1/muzyka
Konfiguracja dla użytkownika anonimowego
Podobnie jak w poprzednim przypadku, tworzymy identyczną konfigurację z dodatkowymi opcjami. Cały plik konfiguracyjny powinien wyglądać następująco:
ServerName "OpenWrt ftp serwer"
ServerType standalone
DefaultServer on
RequireValidShell off
Port 21
UseIPv6 off
Umask 022
MaxInstances 10
User nobody
Group nogroup
DefaultRoot ~
AllowOverwrite on
<Anonymous ~ftp>
User ftp
Group ftp
UserAlias anonymous ftp
MaxClients 10
</Anonymous>
Teraz należy tylko zmienić katalog dla użytkownika ftp w pliku
/etc/passwd. Można to zrobić edytorem lub poleceniami:
# sed -i '/ftp:/d' /etc/passwd
# echo "ftp:*:55:55:ftp:/mnt/sda1/publiczny:/bin/false" >> /etc/passwd
W podanym przykładzie użytkownik anonimowy będzie miał dostęp do katalogu
/mnt/sda1/publiczny (pamiętamy o uprawnieniach:
chmod -R 777 /mnt/sda1/publiczny!).
Uruchomienie
# /etc/init.d/proftpd enable
# /etc/init.d/proftpd start
Wirtualni użytkownicy
ProFTPD ma wiele możliwości, a jedną z nich jest możliwość autoryzowania użytkowników przy pomocy innego pliku z danymi, bazy danych, czy PAM. Tu przedstawiono najprostszy sposób utworzenia wirtualnych użytkowników - czyli nie istniejących w systemie, w pliku /etc/passwd a zdefiniowanych w innym miejscu. Cała sztuczka opiera się na... zrobieniu drugiego pliku zawierającego hasła. Tworzymy plik
/etc/ftpuser o zawartości prawie identycznej jak /etc/passwd, ale zawierające zakodowane hasło, czyli:
jacek:$1$Hd8uUYo3$3qLcFH.Hv4lDqtEiAVn8I.:1000:65534:jacek:/mnt/sda1/filmy:/bin/false
agatka:$1$HT8uUZo3$3qLdFH.Hv4lDqtEiAVn8I.:1001:65534:agatka:/mnt/sda1/muzyka:/bin/false
A następnie do wymienionego już pliku konfiguracyjnego dodajemy linię
AuthUserFile /etc/ftpuser
W takim przypadku lista użytkowników będzie brana z tego pliku zamiast z systemu. Oczywiście nie należy zapominać o odpowiednich uprawnieniach do katalogów.
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 start
Przed uruchomieniem można sprawdzić poprawność konfiguracji proftpd poleceniem
W przypadku błędów połączenia można uruchomić serwer w trybie
debug
# /etc/init.d/proftpd stop
# proftpd -d 10 -n