12. Konfiguracja serwera FTP
W tym rozdziale zajmiemy się konfiguracją serwera FTP. W Slackware
domyślnym serwerem FTP jest proftpd. Jest to dość rozbudowany i przyjazny
w konfiguracji serwer.Zanim jednak zaczniemy konfiguracje powinniśmyzadać
sobie pytanie jakich użytkowników będziemy chcieli obsługiwać i jak rozmieścić
udostępniane katalogi. Z punktu widzenia administratora użytkowników można podzielić np. tak:
użytkownicy systemowi
użytkownicy posiadający konta ( ang. shell accounts )z możliwością logowania się do systemui korzystania zzainstalowanego na nim oprogramowania, kompilacji programów itd. Użytkowników takich można nazwać zaufanymi.Dostęp do shell'a powinniśmy dawać tylko i wyłącznie zaufanym osobom.
użytkownicy ftp
użytkownicy posiadający dostęp tylko do FTP.
Użytkownikom tym nie ufamy na tyle by udostępnić shell'a.
użytkownicy anonimowi
użytkownicy posiadający dostęp do FTP jako
anonymous. Z regułymogący jedynie ściągać pliki udostępnione
przez administratora.
Spróbujmy skonfigurować FTP w taki sposób by każdy z tych
użytkowników miał dostęp taki jak opisałem wyżej -
jednocześnie pamiętając o bezpieczeństwie.
Podstawowe założenia:
- Użytkownicy nie powinni mieć dostępu do plików innych użytkowników
- Użytkownicy nie powinni mieć dostępu do katalogów systemowych
- Użytkownicy systemowi powinni mieć możliwość wymiany plików między sobą.
- Użytkownicy ftp powinni mieć możliwość wymiany plików po zatwierdzeniu
ich przez administratora
- Użytkownicy anonimowi powinni mieć dostęp tylko do jednego katalogu z
udostępnionymi przez administratora plikami.
- Opcjonalnie użytkownikom anonimowym można pozwolić na wysyłanie plików na
serwer. Pliki te powinny być dostępne tylko dla administratora, który
decydowałby czy dodać je do udostępnionych do ściągnięcia plików.
Przedstawiona wyżej konfiguracja jest dość skomplikowana i bardzo
rzadko się ją spotyka. Z reguły stawiając serwer pozwalamy tylkona
ściąganie i wysyłanie plików na serwerprzez użytkowników posiadających
konta (bez możliwości wymiany plików między użytkownikami) oraz ściąganie
plików przez użytkowników anonimowych ze specjalnie do tego przeznaczonego
katalogu. Postanowiłem opisać trudniejszą konfiguracje ponieważ dzięki niej
będe wam w stanie wytłumaczyć o wiele więcej zagadnień związanych z konfiguracją
FTP oraz systemu plików.
Sposobem narozdzielenie użytkowników ftp oraz systemowych jest ustawienie
domyślnegoshell'a dla użytkowników ftp jako /dev/null
oraz przechowywaniekatalogów domowych obu grup osobno. Zastanówmy się wiec jak rozmieścić
katalogi naszych użytkowników. Domyślnie wszystkie katalogiumieszczone są w katalogu
/home. Spróbujmy takiego rozwiązania:
/home
|-- exchange [drwxrwx--T root users ]
|-- ftp [drwxr-x--- root ftp ]
| |-- pub [dr-xr-x--- ftp ftp ]
| | `-- uploads [drwxrwx--- ftp ftp ]
| |-- test [drwx------ 1001 ftp ]
| `-- test1 [drwx------ 1002 ftp ]
|-- test2 [drwx--x--x test2 users ]
`-- test3 [drwx--x--x test3 users ]
Nie jest ono zbyt piękneale spełnia nasze założenia. Jak widaćdodałem
czterech użytkowników testowych: test, test1, test2, test3. Są oni
właścicielami swoich katalogówdomowych. Zauważcie jakie ustawiono prawa
dostępu do katalogów. Mamy dwie grupy użytkowników: ftp oraz users. Grupa
ftp to użytkownicy posiadający dostęp tylko do FTP natomiast grupa users to
użytkownicy systemowi. Dzięki tak ustawionym prawom spełniliśmy 95% założeń
odnośnie dostępu do plików i katalogów. Pozostałe 5% skonfigurujemy w proFTPD.
Skoro mamy już pomysł na konfiguracje serwera - zainstalujmy go.
Montujemy CD z Slackware i instalujemy serwer FTP.
# mount /dev/cdrom
# cd /mnt/cdrom/slackware/n
# installpkg proftpd-1.2.9-i486-3.tgz
Po zainstalowaniu prócz pliku którym będziemy uruchamiać serwer
/usr/sbin/proftpd w katalogu
/etc powinny pojawić się dwa pliki:
/etc/ftpusers
plik w którym umieścimy listę użytkowników którzy
nie mają prawa zalogować się do serwera FTP. Jeśli otworzycie ten
plik zauważycie że znajduje się tam między innymi użytkownik root.
Znajduje się on tam ponieważ w protokole FTP login i hasło przesyłane są
jako tzw.tekst jawny. Mówiąc wprost każdy może podglądnąć jakie jest hasło
użytkownika root. Tego nie chciałby żaden administrator!
/etc/proftpd.conf
plik konfiguracyjny serwera proFTPD.
Serwer zainstalowany. Czas na konfiguracje!
Ponieważ w rozdziale poświeconym zabezpieczaniu serwera usunęliśmy
grupę i użytkownika ftp to teraz musimy ich dodać:
# groupadd -g 50 ftp
# useradd -d /home/ftp -g ftp -u 14 ftp -s /dev/null
Dane podane jako opcje odpowiadają tym które wykasowaliśmy.
Najpierw stworzymy odpowiednie katalogi dla naszego serwera. Możemy to
zrobić opierając się na pokazanym wcześniej diagramie lub uruchamiając
przygotowany przeze mnie skrypt w katalogu /home.
Skrypt możecie ściągnąć tutaj.
Teraz stwórzmy użytkowników testowych, których pod koniec tego
artykułu powinniście wykasować.
Zacznijmy od użytkownika systemowego:
# useradd -m -g users -d /home/t -s /bin/bash test2
# passwd test2
W podobny sposób dodaj użytkownika test3.
Teraz dodajmy użytkowników mających dostęp tylko do ftp:
# adduser -m -g ftp -d /home/ftp/test -s /dev/null test
# passwd test
Skoro mamyjuż użytkowników nadszedł czas na skonfigurowanieserwera.
Dla naszej konfiguracji plik /etc/proftpd.conf
może wyglądać np. tak:
# proftpd.conf 0.1 2004/12/8 18:49:26 (Rafal Zajac)
#
# proFTPD Configuration file by Rafal Zajac
# Downloaded from http://www.slackware.prv.pl
#
# Copyright (C) 2004 Rafal Zajac <rzajac{at}gmail{dot}com>
# Released under the GPL v2 only.
# Uruchamiamy serwer jako samodzielny proces
ServerType standalone
DefaultServer on
#------------------ Bannery --------------
# Wyswietlmy powitanie jeszcze przed logowaniem uzytkownika
DisplayConnect /etc/ftpconnect.msg
# Wyswietlamy powitanie po zalogowaniu
DisplayLogin ../.ftplogin.msg
# Wyswietlane gdy logowanie sie niepowiedze
AccessDenyMsg "Access to this server has been denied. \
If you feel this rejection is in error please contact blabla@costam.com. \
This failed logon has been logged."
#--------------- Bannery end -------------
# Informacje dotyczace programu serwera
ServerIdent on "Ftp Server"
ServerAdmin root@costam.com
# Zapobiegamy atakom DoS
MaxInstances 50
# Maksymalna ilosc uzytkownikow
MaxClients 30
# Zezwalamy na dokonczenie przerwanego pobierania pliku
AllowRetrieveRestart on
# Zezwalamy na dokonczenie przerwanego wysylania pliku
AllowStoreRestart on
# Podajemy na ktorym porcie ma nasluhiwac serwer (domyslnie 21)
Port 21
# Definiujemy porty jakie beda uzywane dla polaczen pasywnych
PassivePorts 60000 61000
# Maska z jaka beda tworzone pliki i katalogi na serwerze
Umask 0177 0077
# Uzytkownik i grupa do ktorych bedzie nalezal proces serwera po uruchomieniu
User ftp
Group ftp
# Gdzie i jak serwer bedzie przechowywal logi
SystemLog /var/log/proftpd.log
TransferLog /var/log/xferlog
LogFormat default "%h %l %u %t \"%r\" %s %b"
LogFormat auth "%v [%P] %h %t \"%r\" %s"
LogFormat write "%h %l %u %t \"%r\" %s %b"
# Zamykamy zalogowanych uzytkownikow w tzw. chroot jail
# w zaleznosci od grupy
DefaultRoot /home users
DefaultRoot /home/ftp ftp
PathDenyFilter "(\\.ftpaccess)|(\\.htaccess)$"
#Nie wyświetlamy plików pewnych plików
<Directory /home/* >
</Directory>
#Timeouts
TimeoutLogin 300
TimeoutIdle 600
TimeoutNoTransfer 300
TimeoutStalled 3600
# Pozwalamy na nadpisywanie plikow w katalogu domowym
<Directory ~>
AllowOverwrite on
</Directory>
# Konfiguracja katalogu uploads
<Directory /home/ftp/pub/uploads/*>
# Zaden uzytkownik nie moze nadpisac, skasowac
# lub przeczytac plikow w katalogu uploads
<Limit READ DELE RNFN RNTO>
DenyAll
</Limit>
# Kazdy moze dodac plik do katalogu uploads
<Limit STOR>
AllowAll
</Limit>
</Directory>
# Konfiguracja dla uzytkownikow anonimowych
<Anonymous ~ftp>
# Kazdy moze sie zalogowac
<Limit LOGIN>
AllowAll
</Limit>
# Maksymalna ilisc uzytkownikow anonymous
# jednoczesnie na serwerze
MaxClients 5 "Przykro mi maksymalna ilosc uzytkownikow %m -- sprobuj ponowne za jakis czas"
# Uzytkownik i grupa do ktorych bedzie nalezal
# proces serwera po uruchomieniu
User nobody
Group nobody
# Uzytkownik "anonymous" = "ftp"
UserAlias anonymous ftp
# Nic nie moze byc zapisane w katalogach
# udostepnionych temu uzytkownikowi
<Limit WRITE>
DenyAll
</Limit>
# Konfiguracja katalogu uploads
<Directory uploads/*>
<Limit STOR CWD>
AllowAll
</Limit>
<Limit READ RMD DELE>
DenyAll
</Limit>
</Directory>
</Anonymous>
Powyższy plik możesz ściągnąć tutaj.
W tym momencie mamy praktycznie wszystko by uruchomić nasz serwer po raz pierwszy.
Zanim to jednak zrobimy stworzymy pliki z informacjami wyświetlanymi dla
użytkowników serwera. Pierwszy z nich ftpconnect.msg
będzie wyświetlany przed zalogowaniem się użytkownika natomiast drugi
( .ftplogin.msg ) z informacjami
odnośnie serwera i obowiązujących na nim zasadach zaraz po zalogowaniu. Po
ściągnięciu pliku ftpconnect.msg kopiujemy go do
katalogu /etc. Natomiast plik .ftplgin.msg
( zauważ kropkę na początku nazwy pliku) kopiujemy do katalogów /home
oraz /home/pub.
Na tym koniec jeśli chodzi o konfiguracje serwera.Pierwsza sprawa
to firewall. Jeśli masz skonfigurowany firewall przy użyciu
iptables to dodaj do niego regułę:
iptables -A INPUT -p TCP -s 0/0 --destination-port 21 -j ACCEPT
Jeśli skonfigurowałeś firewall zgodnie z opisem w rozdziale 11. odszukaj w nim wiersze:
# sshd
$IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 22 -j ACCEPT
a następnie zaraz pod nimi dodaj:
# proftpd
$IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 21 -j ACCEPT
Aby zmiany w firewallu zostały uwzględnione musisz uruchomić ponownie
plik /etc/rc.d/rc.firewall.
Dodajemy również dwa wiersze do pliku /etc/rc.d/rc.local
by nasz serwer uruchamiał się przy każdym starcie systemu.
echo Starting proftpd
/usr/sbin/proftpd
Skoro wszystko jest już przygotowane uruchamiamy serwer
poleceniem proftpd i jeśli
skonfigurowałeś wszystko zgodnie z opisem nie powinieneś
zobaczyć żadnych błędów.
 |
Uwaga: Obecnie na
serwerze nie są ustawione żadne ograniczenia odnośnie dozwolonej
ilości przechowywanych danych przezużytkowników tzw. quota
( ang. przydział ). Może to doprowadzić do sytuacji,
w której użytkownicy całkowicie "zapchają" dyskplikami. Jest to tym
bardziej niebezpieczne gdy pliki użytkowników przechowywane są na tej samej
partycji co pliki systemowe. Zanim więc uruchomisz serwer uruchom quota
dla użytkowników. Jak to zrobić przeczytasz w artykule Quota.
|
Na koniec pokaże wam kilka trików.
Powiedzmy że jesteśmy zmuszeni wyłączyć nasz serwer
ftp na jakiś czas w celu przeprowadzenia jakiś czynności
konserwacyjnych. Nie chcemy jednak by wyglądało to jak awaria
serwera i by nasi użytkownicy zostali poinformowani dlaczego
serwer nie dzała. W takim przypadku wydajemy polecenie:
# ftpshut now "Serwer nie dziala z powodu konserwacji."
Polecenie to ma wiele przydatnych opcji, których nie będę tu
opisywał. Chcesz się dowiedzieć więcej zaglądnij do manuala.
Kolejnym ciekawym poleceniem jest ftptop;
pokazujące w czasie rzeczywistymnawiązane połączenia, jak długo trwają
i jaki użytkownik jest zalogowany. Trochę podobnie działają polecenia
ftpcount oraz ftpwho
pokazujące ilość połączeń z naszym serwerem / serwerami.
[ Poprzednia ]
[ Spis treści ]
[ Następna ]