pure-ftpd pod Linuxem

by A.Szulc (adik@widzew.net)


 

1 Instalacja

 

Kod źródłowy serwera znajduje się w pliku pure-ftpd-1.0.4.tar.gz

Jest to archiwum programu tar, a następnie spakowane programem gzip. Aby to archiwum rozpakować w konsoli wpisujemy następująca komendę:

 

tar -zxvf pure-ftpd-1.0.4.tar.gz

 

źródła rozpakowywane są do katalogu o nazwie pure-ftpd-1.0.4 Wchodzimy do niego wydając polecenie:

 

cd pure-ftpd-1.0.4

 

Aby posiadać optymalny i bezpieczny program serwera, musimy go skompilować z opcjami nam niezbędnymi. Opcje możemy wyświetlić wpisując w konsoli:

 

./configure --help

 

Jeśli tekst nie zmieścił się nam na ekranie, możemy powyższe polecenie zapisać inaczej:

 

./configure --help | less

 

Wyświetli nam się długa lista możliwych opcji, które możemy przewijać klawiszami strzałek.

 

--prefix=PREFIX
Katalog, w którym będziemy chcieli mieć pliki programu, w pisujemy w miejsce słowa "PREFIX". Domyślnie jest to /usr/local

 

--with-sysquotas
Aby respektowane były systemowe ograniczenia na powierzchnie dyskową (disk quota)

 

--with-altlog
Obsługa alternatywnego formatu logów, podobnego, do tego, który jest generowany przez serwer Apache.

 --with-puredb
Przy pomocy tej opcji możemy mieć w systemie wirtualnych użytkowników. Jest to bezpieczne rozwiązanie, gdyż posiadający hasło użytkownik, ma dostęp jedynie do zasobów serwera FTP.

 --with-throttling
Niezbędna opcja, służąca  do ustalania "szerokości pasma" dla jednego połączenia.

 --with-ratios
Gdy nie chcemy by z naszego serwerka jedynie pobierano dane, możemy zdefiniowaæ "ratio", które jest proporcją obiętoćci danych wrzucanych i pobieranych z naszych zasobów.

 --with-quotas
Wewnętrzny mechanizm serwera limitujący ilość danych przechowywanych na powierzchni dyskowej. Wielkość definiujemy w pliku .ftpquota

 --with-ftpwho
Niezbędna opcja dla działania programu pure-ftpwho. Jest to program do monitowania aktywnych połączeń z naszym serwerem.

 --with-welcomemsg
Gdy chcemy użytkownika naszego serwera przywitać jakimś miłym tekstem, bądź nawet ascii-art'em powinniśmy użyć tej opcji. Tekst który ma się pojawić podczas logowania umieszczamy w pliku welcome.msg Plik umieszczamy w katalogu w którym użytkownik znajdzie się po zalogowaniu.

--with-everything
Jeśli nie wiesz czego potrzebujesz, to rozwiązaniem może być ta opcja. Stworzony program serwera będzie niepotrzebnie za duży. Będzie posiadał nie używane opcje, które są potencjalną furtką dla nie proszonych gości.

 --with-language=

    < english | german | romanian | french | french-funny | polish | spanish | danish | dutch | italian | brazilian-portuguese | slovak | korean >

Podczas pracy serwer wypisuje różne komunikaty jego użytkownikom. Może to robić w ich ojczystym języku.

Po rozpakowaniu źródeł serwera, zapoznaniu się z jego możliwościami, możemy przystąpić do właściwej konfiguracji. Używając programu su przechodzimy do trybu użytkownika uprzywilejowanego. Następnie używamy skryptu konfiguracyjnego configure z opcjami, jakie wybraliśmy po gruntownym przeanalizowaniu naszych oczekiwań względem serwera FTP. W moim przypadku ta część zadania wyglądała następująco:

 

./configure --prefix=/usr/local/pureftpd \

--with-puredb --with-throttling --with-ftpwho \

--with-welcomemsg --with-language=polish \

--with-altlog

 

W tej chwili zostajemy obrzuceni mnóstwem tekstu, którym nie musimy się przejmowaæ. Ważne jest, by to zadanie nie zakończyło się jakimś zdaniem zawierającym słowo "error". Jeśli wszystko przebiegło bez zakłóceń, to możemy w konsoli napisać słowo: 

make

 Teraz nasz serwer jest kompilowany. To może potrwać dłuższą chwile. Na słabszych komputerach dużo dłuższą. Tak jak w poprzednim przypadku, zostajemy obrzuceni mnóstwem tekstu. Gdy nie zobaczymy słowa "error", to będziemy mogli mieć jakąś nadzieje na powodzenie. Teraz przyszła kolej na właściwą instalacje. Aby to uczynić w konsoli wpisujemy:

 make install

 To zadanie w porównaniu do poprzednich nie trwa długo.

 

2 Konfiguracja

 

Następnym krokiem jest stworzenie skryptu startowego. W katalogu ze źródłami znajdziemy katalog o nazwie configuration-file Wchodzimy do niego

 

cd configuration-file

 

tam znajdują się dwa interesujące nas pliki: pure-config.pl i pure-ftpd.conf. Najpierw będziemy musieli wyedytować plik pure-ftpd.conf. Użyj do tego swojego ulubionego edytora. Mój plik konfiguracyjny wygląda tak:

 

ChrootEveryone                    yes

Aby początkiem drzewa katalogów dla użytkownika był jego katalog domowy to nas zabezpieczy, przed jego nie uzasadnionymi wędrówkami po drzewie katalogów całego systemu operacyjnego.

 

BrokenClientsCompatibility            no

Opcja ta nie została bliżej opisana. Ja ją zostawiłem domyślne ustawienie.

 

MaxClientsNumber 50

maksymalna liczba użytkowników zalogowanych w tym samym czasie.

 

Daemonize                 yes

Domyślnie program serwera pracuje "w tle".

 

MaxClientsPerIP                   8

Jeden klient może otworzyć osiem sesji FTP.

 

VerboseLog               no

Jeśli chcesz znać każdy ruch swoich klientów, ustaw tą opcje na "yes"

 

DisplayDotFiles                    yes

Gdy chcesz, by widoczne były pliki ukryte, czyli takie, które mają kropkę na początku swojej nazwy, ustaw tą opcje na "yes".

 

AnonymousOnly                   no

Jeśli chcesz, by serwer był tylko serwerem "anonimowych" klientów, staw tą opcje na "yes"

 

NoAnonymous                      no

Jeśli nie chcesz mieć serwera dla anonimowych klientów, ustaw tą opcje na "yes".

 

SyslogFacility                        ftp

Opcja ta nie została bliżej opisana. Ja ją zostawiłem domyślne ustawienie.

 

DontResolve              yes

Opcja ta domyślnie ustawiona powoduje nie pobieranie informacji z serwera DNS. Nazwy hostów pozostają w wersji "cyferkowej" adresu IP.

 

MaxIdleTime             15

Czas bezczynności, po którym następuje zerwanie połączenia z klientem. (timeout)

 

#PureDB                                /usr/local/pureftpd/etc/pureftpd.pdb

Miejsce, gdzie przechowywana jest baza danych o wirtualnych użytkownikach serwera FTP.

 

LimitRecursion                      2000 8

Pierwsza liczba, to ograniczenie ilości plików podczas listowania katalogu. Druga liczba, to maksymalny stopien zagłębiania się, podczas listowania rekursywnego.

 

MaxLoad                   4

Opcja ta nie została bliżej opisana. Ja ją zostawiłem domyślne ustawienie

 

AntiWarez                  yes

Plik przysłany nie może być ściągnięty, bez uprzedniego zatwierdzenia przez administratora. Administrator zatwierdza plik, poprzez zmianę właściciela komendą: chown root:root plik.zip

 

#Bind                          192.168.1.10,21

Jeśli chcemy, by nasz serwer "nasłuchiwał" na konkretnym interfejsie sieciowym, albo mamy potrzebę postawienia serwera na jakimś innym porcie, to do dyspozycji mamy opcje Bind. Najpierw piszemy adres IP, na którym chcemy, by nasz serwer nasłuchiwał, po przecinku numer portu.

 

AnonymousBandwidth            8

Szerokość pasma w kilo baitach dla użytkowników anonimowych.

 

UserBandwidth                      8

Szerokość pasma w kilo baitach dla zwykłych użytkowników serwera

 

Umask                                    133:022

Opcja ta nie została bliżej opisana. Ja ją zostawiłem domyślne ustawienie.

 

MinUID                                 100

Minimalny numer identyfikacyjny dla logującego się użytkownika.

 

AllowUserFXP                     yes

Opcja ta nie została bliżej opisana. Ja ją zostawiłem domyślne ustawienie.

 

AllowAnonymousFXP            no

Opcja ta nie została bliżej opisana. Ja ją zostawiłem domyślne ustawienie.

 

ProhibitDotFilesWrite            no

Jeśli ustawimy tą opcje na "yes", to zabronimy użytkownikom kasowania ukrytych plików, czyli takich, których nazwa zaczyna się od kropki.

 

ProhibitDotFilesRead            no

Jeśli ustawimy tą opcje na "yes", to zabronimy użytkownikom czytania ukrytych plików.

 

AnonymousCantUpload            no

Ustawiając tą opcje na "yes", zabronimy użytkownikom przesyłania plików na serwer.

 Plik pure-config.pl jest skryptem napisanym w języku programowania perl. Nadać mu musimy prawo "executable" by można było z niego skorzystać, jak z zwykłego programu. Robimy to pisząc w konsoli:

 chmod +x pure-config.pl

 Teraz mamy gotowy program do tworzenia skryptu startowego, oraz plik konfiguracyjny. W konsoli wpisujemy:

 ./pure-config.pl pure-ftpd.conf

 Naszym oczom powinien się pojawić tekst zaczynający się od słowa "Running: ", Gdy to pominiemy, to przed oczami mamy zawartość skryptu startowego dla naszego nowego serwera. Aby się nie kłopotać z przepisywaniem tego ręcznie, możemy wynik powyższej komendy prze kierować do pliku:

 ./pure-config.pl pure-ftpd.conf > pure-start

 Teraz musisz wyedytować ten plik, by usunąć wyżej wspomniany string "Running: ". Musisz jeszcze nadać swojemu skryptowi prawo do wykonywania:

 chmod +x pure-start

 W zasadzie katalog w którym jesteś, nie jest najleprzy dla skryptu do uruchamiania serwera. Proponuje przenieść go w miejsce gdzie znajduje się plik programu serwera:

 mv pure-start /usr/local/pureftpd/sbin

 Następnie program do tworzenia skryptu startowego, oraz plik konfiguracyjny proponuje umieścić w katalogu "etc" serwera. Jeszcze nie mamy tego katalogu, wiec należy go utworzyć poleceniem:

 mkdir /usr/local/pureftpd/etc

 Teraz możemy przenieść nasze dwa pliki do nowego katalogu, bo jest bardzo prawdopodobne, ze jeszcze kilka razy zostanie zmieniona konfiguracja serwera, zanim będziesz z niej zadowolony.

 mv pure-config.pl /usr/local/pureftpd/etc

mv pure-ftpd.conf /usr/local/pureftpd/etc

 Jeśli wszystko poszło tak jak należy, to możesz teraz przystąpić do pierwszego testu. Serwer możesz uruchomić wydając następujące polecenie w konsoli:

 /usr/local/pureftpd/sbin/pure-start

 Jeśli chcesz, by serwer uruchamiał się automatycznie podczas startu systemu, możesz powyższą komendę dopisać do pliku:

 /etc/rc.d/rc.local

 

3 Wirtualni użytkownicy FTP

 

Gdy się logujesz do swojego serwera jako zwykły użytkownik, to autentykowany jesteś jako systemowy użytkownik. Znacznie bezpieczniej jest, gdy serwer ma własna, niezależna bazę danych użytkowników. PureFTPd może korzystać z kilku zewnętrznych baz użytkowników. Ja opisze jak zastosować technologie, która kryje się pod nazwą PureDB. Powrócić musimy do samego początku, gdy konfigurujemy serwer przed kompilacją poleceniem "configure". W ciągu opcji jakie znajdują się po słowie "./configure", musi się znaleźć między innymi słowo "--with-puredb". Jeśli postępowałeś zgodnie z powyższą instrukcją, to masz tą opcje wkompilowaną w serwer. Teraz pozostaje nam jedynie przekonfigurować serwer. Pierwszym krokiem będzie stworzenie pliku  /usr/local/pureftpd/etc/pureftpd.passwd

 

3.1 Konwersja systemowej bazy danych użytkowników.

 Na pewno byśmy chcieli zachować możliwość logowania się użytkowników, którzy mieli taką możliwość dotychczas. Aby to osiągnąć musimy przekonwertować systemową bazę użytkowników, właśnie do pliku wymienionego powyżej. Aby to uczynić, musimy użyć programu pure-pwconvert W konsoli wpisujemy:

 /usr/local/pureftpd/bin/pure-pwconvert > \

/usr/local/pureftpd/etc/pureftpd.passwd

 

powstały plik musimy przekonwertować do pliku /usr/local/pureftpd/etc/pureftpd.pdb Używamy do tego programu pure-pw w następujący sposób:

 /usr/local/pureftpd/bin/pure-pw mkdb \

/usr/local/pureftpd/etc/pureftpd.pdb –f \

/usr/local/pureftpd/etc/pureftpd.passwd

 

Teraz pozostaje nam przekonać serwer, że ma korzystać z bazy danych użytkowników z tego właśnie pliku. W pliku konfiguracyjnym pure-ftpd.conf musimy wyedytować linię zawierającą słowo "PureDB". Linia ta, w naszym przypadku powinna wyglądać tak:

 

PureDB                        /usr/local/pureftpd/etc/pureftpd.pdb

 

Teraz tworzymy skrypt startowy przy pomocy programu pure-config.pl

 

cd /usr/local/pureftpd/etc

./pure-config.pl pure-ftpd.conf > ../sbin/pure-start

 

Teraz musisz wyedytować ten plik, by usunąć "Running: ". Sprawdź, czy prawa są odpowiednie. Tzn, czy ma nadane prawo "executable". Serwer restartujemy uruchamiając skrypt startowy. Program jest tak stworzony, że nie pojawia nam się kolejny proces serwera, a zostają zaktualizowane nowe ustawienia.

 

3.2 Nowy użytkownik w systemie.

 

Dodanie nowego użytkownika do systemu oczywiście nie pozwoli mu na logowanie się klientem FTP. Będziemy musieli stworzyć nowego użytkownika w bazie danych użytkowników serwera FTP.

 

 Służy do tego program /usr/local/pureftpd/bin/pure-pw Składnia programu podczas tworzenia użytkownika wygląda następująco:

 

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>]

                [-z <hhmm>-<hhmm>] [-m]

 

login - nazwa użytkownika

passwd file - plik passwd serwera

uid - numer identyfikacyjny użytkownika

gid - numer identyfikacyjny grupy

home directory - katalog domowy

download bandwitch - szerokość pasma podczas ściągania danych

upload bandwitch - szerokość pasma podczas przesyłania plików na serwer

ratio - proporcja

mask - maska, w tym przypadku maska podsieci

allow client ip - dozwolone klienckie adresy IP

deny client ip - zabronione klienckie adresy IP

allow local ip - dozwolone lokalne adresy IP

deny local ip - zabronione lokalne adresy IP

hhmm - w miejsce liter "h" mamy wstawić godzinę, w miejsce liter "m", minuty

 

Jednak zanim zabierzemy się do tworzenia użytkownika FTP, musimy się dowiedzieć, jakie identyfikatory użytkownika i grupy zostały mu przydzielone podczas tworzenia w systemie. Zauważmy,  że właśnie w systemie założyliśmy użytkownika o nazwie jkowalski. Wpisując w konsoli:

 cat /etc/passwd | grep jkowalski

 Otrzymujemy wynik podobny do poniższego:

 jkowalski:x:523:100::/home/jkowalski:/bin/bash

 Liczba 523 jest identyfikatorem użytkownika, a 100 identyfikatorem grupy

 Aby utworzyć nowego użytkownika jkowalski, komenda w linii poleceń powinna wyglądać mniej więcej tak:

 /usr/local/pureftpd/bin/pure-pw useradd \

jkowalski -f /usr/local/pureftpd/etc/pureftpd.passwd \

-u 523 -g 100 -d /home/jkowalski -t 32 -T 32

 

Program zapyta się jeszcze nas o hasło dla nowego użytkownika, a potem poprosi o potwierdzenie. Następnym krokiem jest zaktualizowanie bazy danych użytkowników FTP.

 

/usr/local/pureftpd/bin/pure-pw mkdb \

/usr/local/pureftpd/etc/pureftpd.pdb -f \

/usr/local/pureftpd/etc/pureftpd.passwd

 

Restartujemy serwer:

 /usr/local/pureftpd/sbin/pure-start

 3.3 Nowy wirtualny użytkownik FTP w systemie.

 

Najpierw tworzymy katalog domowy dla przyszłego użytkownika o nazwie iksinski. W konsoli wpisujemy:

 mkdir /var/ftp/ftpusers/iksinski

 Wybieramy identyfikator użytkownika. Powinien on być nie powtarzalny. Aby się tego upewnić zajrzyj do pliku /etc/passwd

 cat /etc/passwd | less

 Tam znajdują się wpisy o istniejących użytkownikach. W każdej linii po drugim dwukropku znajduje się identyfikator użytkownika. Tak samo wybieramy identyfikator grupy. Nowy użytkownik może należeć do istniejącej grupy. Informacje o istniejących grupach znajdziemy w pliku /etc/group

 cat /etc/group | less

 

Numer identyfikacyjny znajduje się po drugim dwukropku. Załóżmy, że wybraliśmy numer identyfikacyjny dla użytkownika 600 i numer identyfikacyjny dla grupy 700. Teraz powinniśmy sprawić, by nowo powstały katalog domowy użytkownika iksinski miał ustawione numery identyfikacyjne użytkownika i grupy na 600 i 700 Robimy to pisząc w konsoli:

 chown 600.700 /var/ftp/ftpusers/iksinski

 

Teraz korzystając z programu pure-pw dodajemy użytkownika do pliku pureftpd.passwd

 /usr/local/pureftpd/bin/pure-pw useradd \

iksinski -f /usr/local/pureftpd/etc/pureftpd.passwd \

-u 600 -g 700 -d /var/ftp/ftpusers/iksinski -t 32 -T 32

 

Może warto przypomnieć, że liczby po „-t” i „–T”, to ograniczenia pasma przy downloadzie i uploadzie.

 Teraz aktualizujemy bazę danych użytkowników FTP.

 /usr/local/pureftpd/bin/pure-pw mkdb \

/usr/local/pureftpd/etc/pureftpd.pdb -f \

/usr/local/pureftpd/etc/pureftpd.passwd

 

i restartujemy serwer:

 

/usr/local/pureftpd/sbin/pure-start

 

 


 

Hit Counter

POWRÓT

Ostatnia modyfikacja: 04.01.2002