Vsftpd w Slackware


Serwer o nazwie Vsftp jest uważany za bezpieczny i dlatego postanowiłem go zainstalować. Uruchamianie demona jest możliwe na dwa sposoby. W pierwszym bezpośrednim należy dopisać do /etc/rc.d/rc.local linię o treści /usr/sbin/vsftpd &, co uruchomi go przy starcie.
W drugim uruchomienie następuje za pomoca demona inetd. W jego pliku konfiguracyjnym /etc/inetd.conf należy odhaszować linię o treści ftp     stream  tcp     nowait  root    /usr/sbin/tcpd  proftpd. Następnie należy przeładować demona poleceniem /etc/rc.d/rc.inetd restart.
Jeżeli mamy firewalla to musimy odblokować porty 20, 21 tcp i udp, dla input, output i forward oraz załadować do niego moduł ftp.

1) W katalogu domowym mam usera vsftp o grupie vsftp, dla którego nie mam przypisanej żadnej powłoki i dla którego założyłem hasło. W pliku /etc/shells należy dopisać linię o treści /bin/false. Ftp ma być tylko dla mnie na login i hasło, a więc nie mam konta dla anonimowych użytkowników. Plik konfiguracyjny /etc/vsftpd.conf może mieć postać:
#serwer anonimowy
anonymous_enable=NO

#praca w tle
background=YES

#dostęp do powłoki
check_shell=NO

#praca tylko w obrębie katalogu /home/vsftp
chroot_local_user=YES

#połączenie na porcie
connect_from_port_20=YES

#na jak długo może stanąć transfer danych
data_connection_timeout=120

#plik z tekstem powitalnym
dirmessage_enable=YES

#czas jak długo użytkownik może być nieaktywny
idle_session_timeout=600

#uruchamianie z inetd=NO, bezpośrednie=YES
listen=NO

#port, na którym serwer nasłuchuje
listen_port=21

#pozwolenie na logowanie się dla lokalnych userów
local_enable=YES

#chown dla plików
local_umask=022

#zezwolenie na rekursje
ls_recurse_enable=YES

#maksymalna liczba klientów połaczonych
max_clients=30

#maksymalna liczba klientów z jednego numeru IP
max_per_ip=6

#pliki na serwerze należą do usera vsftp
nopriv_user=vsftp

#pusty katalog dla chroota
secure_chroot_dir=/usr/share/empty

#NO=lista uprawnionych lub YES=lista zabronionych
userlist_deny=NO

#czy jest lista dostępu dla userów
userlist_enable=YES

#ściezka do listy dostępu dla userów
userlist_file=/etc/vsftpd_userlist

#zezwalam na zapis w katalogu /home/vsftp
write_enable=YES

#logowanie włączone
xferlog_enable=YES

#plik logu
xferlog_file=/var/log/vsftpd.log

#format logu
xferlog_std_format=YES

Jeżeli utworzyliśmy dużą liczbę użytkowników, ale logować wolno się tylko jednemu lub kilku, to prościej będzie, aby plik /etc/vsftpd_userlist zawierał userów, którzy mogą się logowac do swoich kont. Są oni umieszczeni jeden pod drugim. Na przykład plik ma postać:
vsftp
#andrzej
#ewa

Na konto vsftp dostajemy się po wydaniu polecenia ftp://vsftp@nazwa.domenowa_lub_IP.
2) Jeżeli serwer jest np. zasobem szkolnym, to musi być skonfigurowany jako anonimowy (/home/ftp) i dla kont wszystkich userów w systemie (/home/andrzej, /home/ewa...). Plik konfiguracyjny może mieć postać:
#pozwalanie na tworzenie nowych katalogów
anon_mkdir_write_enable=NO

#pozwolenie na modyfikowanie, nadpisywanie, skasowanie i zmienie nazwy
anon_other_write_enable=NO

#zezwalanie na upload plików
anon_upload_enable=NO

#pobieranie plików o prawach do odczytu
anon_world_readable_only=YES

#serwer anonimowy
anonymous_enable=YES

#praca w tle
background=YES

#dostęp do powłoki
check_shell=NO

#praca tylko w obrębie katalogu /home/ftp
chroot_local_user=YES

#połączenie na porcie
connect_from_port_20=YES

#timeout dla danych
data_connection_timeout=120

#plik z tekstem powitalnym
dirmessage_enable=YES

#user anonimowego ftp
ftp_username=ftp

#czas jak długo użytkownik może być nieaktywny
idle_session_timeout=600

#uruchamianie z inetd=NO, bezpośrednie=YES
listen=NO

#port, na którym serwer nasłuchuje
listen_port=21

#pozwolenie na logowanie się dla lokalnych userów
local_enable=YES

#chown dla plików
anon_umask=022

#zezwolenie na rekursje
ls_recurse_enable=YES

#maksymalna liczba klientów połączonych
max_clients=30

#maksymalna liczba klientów z jednego numeru IP
max_per_ip=6

#logowanie bez hasła
no_anon_password=NO

#pliki na serwerze należą do usera ftp
nopriv_user=ftp

#pusty katalog dla chroota
secure_chroot_dir=/usr/share/empty

#NO=lista uprawnionych lub YES=lista zabronionych
userlist_deny=NO

#czy jest lista dostępu dla userów
userlist_enable=YES

#ściezka do listy dostępu dla userów
userlist_file=/etc/vsftpd_userlist

#logowanie włączone
xferlog_enable=YES

#plik logu
xferlog_file=/var/log/vsftpd.log

#format logu
xferlog_std_format=YES

W takim przypadku na konta userów dostajemy sie po wydaniu polecenia ftp://user@nazwa.domenowa_lub_IP (loginu i hasła), a na konto anonimowe (/home/ftp) po wpisaniu ftp://nazwa.domenowa_lub_IP

Mój serwer jest za firewallem i tryb aktywny połączenia nie działał (porty 20, 21). Musiałem więc przestawić serwer do pracy pasywnej, która wymaga portów 21 i np. 10000:10500. Dopisałem więc do pliku vsftpd.conf następujące wpisy:
pasv_enable=YES
pasv_min_port=10000
pasv_max_port=10500

Dodatkowo do firewalla w sekcji INPUT musiałem dopisać:
iptables -A INPUT -p tcp --dport 20 -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 10000:10500 -j ACCEPT

do góry 2006.02.15