Instalacja serwera ftp na OpenWrt
Ostatnia zmiana: 2013-11-26 12:49

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 12.09rc1.

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, ext3 lub ext2. 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

Uwaga: 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ć normalny z repozytorium OpenWrt lub uruchamiać ręcznie sam demon bez udziału skryptów startowych.

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. 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

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

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 mu zmienić 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


  • Tryb tylko-do-odczytu
Do pliku konfiguracyjnego /etc/vsftpd.conf dodajemy


    anonymous_enable=yes

Tworzymy plik /etc/vsftpd_users/ftp (np. vi /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


  • Tryb zapis-odczyt
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


    anonymous_enable=yes

Tworzymy plik /etc/vsftpd_users/ftp (np. vi /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ę


    anon_umask=0000

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 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


  • Tryb tylko-do-odczytu
Do pliku konfiguracyjnego /etc/vsftpd.conf dodajemy


    local_enable=yes

Tworzymy plik /etc/vsftpd_users/malgosia (o nazwie użytkownika jakiego stworzyliśmy np. vi /etc/vsftpd_users/malgosia) o zawartości:


    dirlist_enable=yes
    download_enable=yes
    write_enable=no


  • Tryb zapis-odczyt
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


    local_enable=yes

Tworzymy plik /etc/vsftpd_users/malgosia (o nazwie użytkownika jakiego stworzyliśmy np. vi /etc/vsftpd_users/malgosia) 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 .