Temat może nie jest najnowszy aczkolwiek sam miałem z tym mały problem, który udało mi się rozwiązać dopiero po jakimś czasie. Może ten opis pomoże komuś w przyszłości go zaoszczędzić.
Wszystko co trzeba zrobić, żeby uruchomić na open wrt serwer FTP ze wsparciem TLS.
Instalujemy "pure-ftpd-tls"
# opkg update
# opkg install pure-ftpd-tls
Tworzymy użytkownika 'pure_ftpd_user' należącego do grupy 'pure_ftpd_grp' (obydwie nazwy poniekąd przypadkowe, należy jednak zachować później konsekwencję w ich stosowaniu), następnie ustawiamy hasło. Użytkownik nie musi mieć prawa logowania ani katalogu domowego.
# echo "pure_ftpd_user:*:1000:1000:pure_ftpd_grp:/dev/null:/bin/false" >> /etc/passwd
# passwd pure_ftpd_user
Tworzymy wirtualnego użytkownika dla pure-ftpd o nazwie login i domyślnym katalogu udzial, następnie wpisujemy hasło dla tego użytkownika. Za każdym razem zmiany należy zatwierdzić.
# pure-pw useradd login -u pure_ftpd_user -d /udzial
# pure-pw mkdb
Zmieniamy konfigurację serwera edytując plik '/etc/config/pure-ftpd'. Przykładowa konfiguracja poniżej. Kilka założeń: brak możliwości zalogowania użytkowników anonimowych, brak możliwości wyjścia poza katalog domowy każdego użytkownika oraz możliwość zalogowania zarówno przy użyciu TLS jak i otwartym tekstem. Opis samej opcji TLS z dokumentacji pure-ftpd poniżej pliku konfiguracyjnego.
config pure-ftpd
option port '21'
option noanonymous '1'
option chrooteveryone '1'
option maxclientsperip '5'
option maxclientsnumber '5'
option peruserlimits '3:4'
option umask '133:022'
option enabled '1'
option tls '1'
option demonaise '1'
option authentication 'puredb:/etc/pureftpd.pdb'
option prohibitdotfileswrite '1'
option prohibitdotfilesread '1'
- tls=0", support for SSL/TLS is disabled. This is the default.
- tls=1", clients can connect either the traditional way or through an
SSL/TLS layer. This is probably the setting you need if you want to enable
TLS without having too much angry customers.
- tls=2", cleartext sessions are refused and only SSL/TLS compatible
clients are accepted.
- tls=3", cleartext sessions are refused and only SSL/TLS compatible
clients are accepted. Clear data connections are also refused, so private
data connections are enforced. This is an extreme setting.
Przechodzimy do konfiguracji TLS. Generujemy certyfikat serwera. Teoretycznie nie zaleca się przeprowadzać takich operacji na samym routerze ze względu na czas ich przeprowadzania ale w tym konkretnym przypadku (długości klucza) i przykładowym sprzęcie takim jak TP-LINK MR3420 trwa to dosłownie chwilę. Zmieniamy jeszcze prawa dostępu do wygenerowanego certyfikatu.
# openssl req -x509 -nodes -newkey rsa:1024 -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem
# chmod 600 /etc/ssl/private/pure-ftpd.pem
Uruchamiamy serwer, ewentualnie dodajemy do skrytpów startowych jeśli wszystko działa jak należy.
# /etc/init.d/pure-ftpd start
# /etc/init.d/pure-ftpd enable
Można dodawać innych użytkowników o różnych katalogach domowych, zmieniać ich uprawnienia dostępu, służą do tego polecenia między innymi 'pure-pw useradd' 'pure-pw usermod' wraz z opcjami jak niżej.
pure-pw useradd <login> [-f <passwd file>] -u <uid> [-g <gid>]
-D/-d <home directory> [-c <gecos>]
[-t <download bandwidth>] [-T <upload bandwidth>]
[-n <max number of files>] [-N <max Mbytes>]
[-q <upload ratio>] [-Q <download ratio>]
[-r <allow client ip>/<mask>] [-R <deny client ip>/<mask>]
[-i <allow local ip>/<mask>] [-I <deny local ip>/<mask>]
[-y <max number of concurrent sessions>]
[-z <hhmm>-<hhmm>] [-m]
pure-pw usermod <login> -f <passwd file> -u <uid> [-g <gid>]
-D/-d <home directory> -[c <gecos>]
[-t <download bandwidth>] [-T <upload bandwidth>]
[-n <max number of files>] [-N <max Mbytes>]
[-q <upload ratio>] [-Q <download ratio>]
[-r <allow client ip>/<mask>] [-R <deny client ip>/<mask>]
[-i <allow local ip>/<mask>] [-I <deny local ip>/<mask>]
[-y <max number of concurrent sessions>]
[-z <hhmm>-<hhmm>] [-m]
pure-pw userdel <login> [-f <passwd file>] [-m]
pure-pw passwd <login> [-f <passwd file>] [-m]
pure-pw show <login> [-f <passwd file>]
pure-pw mkdb [<puredb database file> [-f <passwd file>]]
[-F <puredb file>]
pure-pw list [-f <passwd file>]
-d <home directory> : chroot user (recommended)
-D <home directory> : don't chroot user
-<option> '' : set this option to unlimited
-m : also update the /etc/pureftpd.pdb database
For a 1:10 ratio, use -q 1 -Q 10
To allow access only between 9 am and 6 pm, use -z 0900-1800