NAS (ang) jest ogólnym pojęciem określającym podłączenie i udostępnienie zasobów dyskowych w sieci komputerowej. Niezbędnym elementem jest oczywiście nośnik danych w postaci wbudowanego dysku (np. dla routerów ASUS, WL-HDD), dysków zewnętrznych podłączanych przy pomocy USB (np. Linksys WRTSL54GS lub ASUS WL-500gP czy innych wyposażonych w port USB) lub kart pamięci (np. kart SD dla zmodyfikowanych sprzętowo routerów).
Dane można udostępniać na wiele sposobów: jako serwer plików FTP (SFTP), NFS, SMB (Samba)
Jednym z popularniejszych demonów ftp jest vsftpd - szybki, bezpieczny, wydajny i mały objętościowo. Instalacja sprowadza się do:
opkg install vsftpd
Uruchomienie demona następuje po wydaniu polecenia:
/etc/init.d/vsftpd start
Zakończenie pracy:
/etc/init.d/vsftpd stop
Po instalacji serwer FTP gotowy jest do użycia: można zalogować się jako użytkownik root (z danym hasłem), katalogiem głównym jest /root.
Jeżeli wymagana jest inna konfiguracja należy wyedytować plik /etc/vsftpd.conf. Wszystkie opcje konfiguracyjne zawarte są na stronie domowej vsftpd; poniżej przedstawione zostały tylko typowe konfiguracje przydatne w OpenWrt.
Opcje wspólne:
background=YES listen=YES ftp_username=root anon_root=/mnt/disc0_1 check_shell=NO local_enable=NO hide_ids=YES
anon_root służy do określenia katalogu głównego naszego FTP-a. W tym przypadku odnosi się do zamontowanego dysku zewnętrznego; może to karta SD lub katalog wewnątrz firmware.
Po opcjach nie powinno być spacji i innych znaków; w przeciwnym wypadku vsftpd będzie zgłaszał błędy.
Następnie należy dopisać opcje z wybranego scenariusza
1. Dostęp anonimowy do serwera, wszystko tylko do odczytu
anonymous_enable=YES
2. Dostęp anonimowy do serwera, pełne prawa (zapis i odczyt danych)
anonymous_enable=YES write_enable=YES anon_upload_enable=YES anon_world_readable_only=NO anon_mkdir_write_enable=YES anon_other_write_enable=YES
Jeżeli chcemy ograniczyć dostęp do określonej listy osób można umożliwić logowanie na użytkownika anonymous po podaniu odpowiedniego adresu mejlowego. W tym celu do konfiguracji należy dopisać:
secure_email_list_enable=YES
email_password_file=/mnt/disc0_1/hasla.txt
hide_file={hasla.txt}
deny_file={hasla.txt}
w pliku hasla.txt powinny znaleźć się adresy mejlowe osób uprawnionych do dostępu (w każdej linii jeden adres). Plik ten może znajdować się na udostępnionym dysku (w tym przypadku /mnt/disc0_1/hasla.txt). Opcje hide_file i deny_file odpowiedzialne są za ukrycie tego pliku i zabezpieczenie przez jego pobraniem. Logowanie: użytkownik - anonymous, hasło: jedno z adresów email podanych w pliku.
Inne wybrane ciekawe opcje:
anon_max_rate - maksymalny limit dla użytkownika anonymous
banner_file - powitanie użytkowników - tekst z pliku
ftpd_banner - powitanie użytkowników
W przypadku kiedy chcemy udostępnić serwis „na zewnątrz” należy pamiętać o dopisaniu odpowiednich regułek do firewalla
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
UWAGA: Należy pamiętać że nośniki z system plików FAT mają ograniczenia co do wielkości pliku, jak również nie jest możliwe przydzielanie/odbieranie uprawnień do poszczególnych plików.
A teraz chciałem przedstawić konfigurację Ftp w taki sposób by móc korzystać z kilku różnych użytkowników gdzie każdy ma oddzielny katalog i z niego nie może wyjść :)
Konfiguracja vsftpd powinna wyglądać tak:
background=YES listen=YES ftp_username=root anonymous_enable=NO anon_root=/tmp chroot_local_user=YES local_enable=YES write_enable=YES local_umask=022 check_shell=NO
Wszystko jest raczej jasne, wątpliwości mogą być tylko tutaj: chroot_local_user=YES opcja zapobiega wyjściu danemu użytkownikowi poza swój katalog domowy.
Teraz edytujemy plik /jffs/etc/passwd i dodajemy w nowej lini wpis:
uzytkownik:*:nr:nr:uzytkownik:/katalog home uzytkownika:/bin/false
a tak powinno wyglądać mniej więcej:
Halek:*:655:655:Halek:/jffs/home/Halek:/bin/false
Zapisujemy ustawienia i wychodzimy. W home mam podmontowany dysk twardy a na nim stworzony katalog Halek. Nr musimy wpisać w obu polach takie same liczby ale nie 0 np 655
Wpisujemy: passwd Halek, zmieniamy hasło dla danego użytkownika w tym przypadku to ja :)
Takich użytkowników możemy dodać kilku z różnymi katalogami :)
Podczas logowania gdy zobaczymy błąd:
500 OOPS: vsftpd: not found: directory given in 'secure_chroot_dir':/var/run/vsftpd
musimy stworzyć katalog np. poprzez komendę:
mkdir -p /var/run/vsftpd
Dobrym sposobem jest utworzyć kilka katalogów na dysku podmontowanym z nazwami użytkowników.
Najprostrzy i najszybszy sposób na anonimowy FTP:
Instalujemy pure-ftpd
opkg update opkg install pure-ftpd
Dodajemy użytkownika ftp z prawami dosŧepu do /mnt/hdd (zmienić wg. własnych potrzeb)
echo "ftp:*:65534:65534:ftp:/mnt/hdd:/bin/false" >> /etc/passwd
Konfiguracja pakietu:
config 'pure-ftpd'
option 'port' '21'
option 'chrooteveryone' '1'
option 'maxclientsperip' '10'
option 'maxclientsnumber' '4'
option 'peruserlimits' '3:4'
option 'umask' '133:022'
option 'authentication' 'unix'
option 'enabled' '1'
option 'noanonymous' '0'
Włączenie serwera:
/etc/init.d/pure-ftpd start
Autostart:
/etc/init.d/pure-ftpd enable
W najprostszym przypadku sprowadza się do instalacji odpowiedniego pakietu (oczywiście, wcześniej musi być uruchomiony demon ssh):
opkg install openssh-sftp-server
To wszystko. Można już korzystać z sftp podając jako użytkownika i hasło dane istniejącego konta w systemie (np. root).
Instalujemy odpowiedni pakiet:
opkg install unfs3
Po instalacji należy poddać edycji plik /etc/exports. Przykładowa zawartość pliku:
/mnt/hdd (rw,all_squash,insecure)
Uruchamiamy serwer NFS:
/etc/init.d/unfs3 start
Samba umożliwia udostępnianie plików w sieci lokalnej zarówno w Linuksie jaki i Windowsie. Do poprawnego działania samby musimy zainstalować niezbędne pakiety
opkg install samba3
Po zainstalowaniu pakietów, należy dokonać niezbędnej konfiguracji i dodania zasobów jakie chcemy udostępnić. Ustawienia Samby znajdują się w pliku /etc/config/samba i ustawienia dokonuje się za pomocą uci
Domyślna zawartość pliku:
config samba
option 'name' 'openwrt'
option 'workgroup' 'openwrt'
option 'description' 'openwrt'
option 'homes' '1'
config sambashare
option 'name' 'tmp'
option 'path' '/tmp'
option 'read_only' 'no'
option 'guest_ok' 'no'
option 'create_mask' '0700'
option 'dir_mask' '0700'
#option 'users' 'abc'
Należy upewnić się, że udostępnione katalogi faktycznie istnieją w systemie!
Jednym z ważniejszych parametrów z sekcji [global] jest workgroup, gdzie należy wpisać grupę robocza. Po sekcji [global] możemy już ustalać zasoby. Zamieszczony wyżej przykład przedstawia jak udostępniono katalog /tmp. W ten sposób możemy dodawać następne katalogi.
Teraz żeby uruchomić sambę wklepujemy:
/etc/init.d/samba start
lub dodać do automatycznego uruchamiana na starcie
/etc/init.d/samba enable
Konfiguracja Samby:
config samba
option 'name' 'openwrt'
option 'workgroup' 'openwrt'
option 'description' 'openwrt'
option 'homes' '0'
config sambashare
option 'name' 'usb'
option 'path' '/mnt/hdd'
option 'read_only' 'no'
option 'guest_ok' 'yes'
option 'create_mask' '0777'
option 'dir_mask' '0777'
#option 'users' 'abc'
Restart samby
/etc/init.d/samba restart
Dzięki włączonemu demonowi SSH istnieje także możliwość przesyłania plików do/z routera przy pomocy prostej komendy scp. W OpenWrt nie trzeba nic kompilować, pliki można kopiować z routera wykonując na komputerze docelowym następujące polecenie:
scp root@nazwa_lub_ip_routera:/pelna/siezka/do/pliku .
a do routera:
scp /pełna/ścieżka/do pliku root@nazwa_lub_ip_routera:/pelna/siezka/do/pliku
Artykuł odnośnie serwera WWW opisany jest w oddzielnym dokumencie
