|
pure-ftpd pod Linuxem |
by A.Szulc (adik@widzew.net)
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.
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:
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.
Opcja
ta nie została bliżej opisana. Ja ją zostawiłem domyślne ustawienie.
maksymalna
liczba użytkowników zalogowanych w tym samym czasie.
Domyślnie
program serwera pracuje "w tle".
Jeden
klient może otworzyć osiem sesji FTP.
Jeśli
chcesz znać każdy ruch swoich klientów, ustaw tą opcje na "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".
Jeśli
chcesz, by serwer był tylko serwerem "anonimowych" klientów, staw tą
opcje na "yes"
Jeśli
nie chcesz mieć serwera dla anonimowych klientów, ustaw tą opcje na "yes".
Opcja
ta nie została bliżej opisana. Ja ją zostawiłem domyślne ustawienie.
Opcja
ta domyślnie ustawiona powoduje nie pobieranie informacji z serwera DNS. Nazwy
hostów pozostają w wersji "cyferkowej" adresu IP.
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.
Pierwsza
liczba, to ograniczenie ilości plików podczas listowania katalogu. Druga
liczba, to maksymalny stopien zagłębiania się, podczas listowania
rekursywnego.
Opcja
ta nie została bliżej opisana. Ja ją zostawiłem domyślne ustawienie
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.
Szerokość
pasma w kilo baitach dla użytkowników anonimowych.
Szerokość
pasma w kilo baitach dla zwykłych użytkowników serwera
Opcja
ta nie została bliżej opisana. Ja ją zostawiłem domyślne ustawienie.
Minimalny
numer identyfikacyjny dla logującego się użytkownika.
Opcja
ta nie została bliżej opisana. Ja ją zostawiłem domyślne ustawienie.
Jeśli
ustawimy tą opcje na "yes", to zabronimy użytkownikom kasowania
ukrytych plików, czyli takich, których nazwa zaczyna się od kropki.
Jeśli
ustawimy tą opcje na "yes", to zabronimy użytkownikom czytania
ukrytych plików.
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
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
Ostatnia modyfikacja: 04.01.2002