JustPaste.it

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:

  1. Użytkownicy nie powinni mieć dostępu do plików innych użytkowników
  2. Użytkownicy nie powinni mieć dostępu do katalogów systemowych
  3. Użytkownicy systemowi powinni mieć możliwość wymiany plików między sobą.
  4. Użytkownicy ftp powinni mieć możliwość wymiany plików po zatwierdzeniu ich przez administratora
  5. Użytkownicy anonimowi powinni mieć dostęp tylko do jednego katalogu z udostępnionymi przez administratora plikami.
  6. 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.

2f3d6505be0ad59119e84751e6d46fc5.gif

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.

 

Źródło: http://slackware.asmonet.net