Konfiguracja serwera proftpd
[ Start ]
Data aktualizacji dokumentu 26. kwietnia 2001, 10:17:27
Konfiguracja serwera ProFTPD
Pamiętaj!!!
Najbardziej aktualne informacje znajdziesz na stronie projektu ProFTPD.
Spis treści
Wprowadzenie
Literatura godna uwagi
Plik konfiguracyjny serwera ProFTPD - lista opisanych w tym dokumencie dyrektyw
ServerAdmin
ServerName
User
Group
MaxClients
TransferLog
DefaultRoot
AuthUserFile
<Anonymous>
<Directory>
<Limit>
Allow
Deny
AllowAll
DenyAll
Umask
prawa dostępu w linux'ie
<VirtualHost>
Tryby pracy serwera ProFTPD
inetd
standalone
Uwagi dla użytkowników FREESCO
Przykładowy plik konfiguracyjny
Prykładowy plik konfiguracyjny z definicją wirtualnego hosta
Pełna lista dyrektyw (j. angielski)
Wprowadzenie
Moim zamiarem jest przybliżenie zagadnień związanych z konfiguracją serwera ProFTPD. Mam nadzieję że po przejrzeniu tej strony, czytelnik będzie w stanie skonfigurować ten serwer, stosownie do swoich potrzeb. Oczywiście nikt nie zwalnia z myślenia - serwer skonfigurujesz tak jak chcesz tylko wtedy gdy poznasz wszystkie jego zalety i wady.
Jako że nikt nie jest doskonały, wybaczcie jeśli w tekście znajdą się jakieś błędy (nie mniej postaram się ich nie popełniać).
Literatura godna uwagi
http://www.proftpd.org/docs/configuration.html - lista dyrektyw konfiguracyjnych (tutaj mirror strony).
Dokumentacja na stronie proftpd
"Profesjonalny serwer FTP" Dariusz Sobaniec - artykuł w LinuxPlus nr 8/2000 omawiający podstawową konfigurację serwera ProFTPD
"LINUX - Agresja I Ochrona" Anonim, wyd. ROBOMATIC - książka którą powinni przejrzeć wszyscy, którzy sądzą że ich serwer jest bezpieczny (w trakcie szukania materiałów pomocnych do napisania tego dokumentu znalazłem exploita który może rozłożyć na łopatki ProFTPD w wersji 1.20).
Czym będziemy się zajmować?
Podstawą działania serwera jest plik konfiguracyjny proftpd.conf, którego w zależności od systemu (dystrybucji) zazwyczaj należy szukać w jednej z następujących kartotek:
/usr/local/etc - jeżeli serwer samodzielnie kompilowałeś i nie określiłeś parametrem --prefix innego katalogu
/etc - w dystrybucji RedHat 6.2
/mnt/router/packages/proftpd/etc - w minidystrybucji Linuxa FREESCO (o ile zainstalowałeś pakiet z mojej strony)
Plik konfiguracyjny serwera ProFTPD
Podstawowe dyrektywy konfiguracyjne i ich (bardzo) krótki opis
ServerAdmin
Określa adres email administratora
Składnia: ServerAdmin root@serwer.domena
ServerName
Nazwa którą serwer się przedstawia
Składnia: ServerName "nazwa serwera"
User
Określa właściciela uruchomionego programu ProFTPD.
Składnia: User user_id
Group
Określa grupę właściciela uruchomionego programu ProFTPD
Składnia: User group_id
MaxClients
Określa maksymalną liczbę obsługiwanych jednocześnie połączeń FTP
Przykład: MaxClients 20
TransferLog
Wskazuje miejsce tworzenia logu serwera dotyczącego transferu plików.
Składnia: TransferLog filename|NONE
Domyślnie: /var/log/xferlog
DefaultRoot
Określa domyślny katalog główny serwera poza który nie można wyjść.
Składnia: DefaultRoot directory
Domyślnie: /
AuthUserFile
Składnia: AuthUserFile path
AuthUserFile określa alternatywny plik passwd,który ma identyczny format jak
systemowy plik /etc/passwd (stąd wniosek, że użytkownicy nieistniejący w systemie mogą logować się własne konta FTP).
Jeśli dyrektywa została podana to plik będzie używany do identyfikacji użytkowników. Argument 'path' musi zawierać pełną ścieżkę do pliku.
Podany plik (mimo iż hasła są kodowane) powinien być umieszczony poza katalogiem udostępnianym przez serwer!!!
<Anonymous>
Składnia: <Anonymous root-directory>
Stosuje się: server config,<VirtualHost>, <Global>
Blok konfiguracyjny Anonymous jest używany do stworzenia serwera FTP z możliwością anonimowego
logowania, i jest on zakończony przez dyrektywę </Anonymous>.
Parametr root-directory określa jaki katalog będzie domyślnie otworzony przez serwer poza który nie wolno użytkownikowi anonimowemu wyjść.
Przykład konfiguracji typowego serwera FTP dla użytkowników anonymous:
<Anonymous /home/ftp>
# Po zalogowaniu użytkownika anonymous, serwer działa jako użytkownik ftp.
User ftp
# Po zalogowaniu użytkownika anonymous, serwer działa jako grupa ftp.
Group ftp
# Klient logujący się jako 'anonymous' pracuje jako 'ftp'.
UserAlias anonymous ftp
# Zakaz operacji zapisu w stosunku do wszystkich katalogów począwszy od root-dir
# Wartością domyślną jest allow, więc nie trzeba ustawiać <Limit> dla operacji odczytu
<Directory *>
<Limit WRITE>
DenyAll
</Limit>
</Directory>
# Katalog do którego każdy może coś wysłać ale nie może czytać
<Directory incoming>
<Limit READ WRITE>
DenyAll
</Limit>
<Limit STOR>
AllowAll
</Limit>
</Directory>
</Anonymous>
<Directory>
Składnia: <Directory pathname>
Stosuje się: konfiguracja serwera, <VirtualHost>, <Anonymous>, <Global>
Ta dyrektywa tworzy block dyrektyw stosowanych tylko w stosunku do wyspecyfikowanego katalogu i jego podkatalogów. Blok jestzakończony przez
</Directory>.
Przykład:
<Directory ~/anon-ftp>
<Limit WRITE>
DenyAll
</Limit>
</Directory>
<Limit>
Składnia: <Limit command|command-group [command2 ..]>
Blok konfiguracyjny <Limit> jest używany do określania szczegółowych restrykcji dotyczących wykonywania komend FTP wysyłanych przez klienta.
Komendy do których odnosi się <Limit>
CWD (Change Working Directory)- Wysyłane przez klienta gdy zmienia katalog. Ten limit dotyczy także komendy CDUP (Change Directory UP).
MKD (MaKe Directory) - Wysyłane przez klienta gdy tworzy nowy katalog.
RNFR (ReName FRom), RNTO (ReName TO) - Wysyłane przez klienta jako para komend gdy client to zmienia położenie pliku międzu katalogami.
DELE (DELEte) - Wysyłane przez klienta gdy kasuje plik.
RMD (ReMove Directory) - Wysyłane przez klienta gdy usuwa katalog
RETR (RETRieve) - Transfer pliku z serwera do klienta.
STOR (STORe) - Transfer pliku od klienta do serwera.
Grupy komendy do których odnosi się <Limit>
READ - wszystkie komendy FTP wiążące się z czytaniem pliku (ale nie listing katalogu), np. RETR, STAT, itd.
WRITE - wszystkie komendy FTP wiążące się z zapisem, tworzeniem, kasowaniem (obejmuje m.in. MKD i RMD).
DIRS - wszystkie komendy FTP wiążące się z wyświetleniem zawartości katalogu np. LIST i NLST.
ALL - wszystkie komendy FTP (identycznie zadziałałoby połączenie READ WRITE DIRS). Ta grupa komed ma najniższy priorytet ze wszystkich i nie powoduje nadpisania limitów okreslonych przez wymienione powyżej grupy komend (np. DIRS)
Allow
Składnia: Allow ["from"] "all"|"none"|host|network[,host|network[,...]]
Domyślnie: allow all
Dyrektywa Allow jest używana wewnątrz bloku <Limit> do wyspecyfikowania które hosty i/lub sieci mogą mieć dostęp do odpowiednich komend.
Hosty i sieci mogą być opisane nazwami lub przez numeryczne określenie ich adresów ip
Adresy podawane numerycznie mogą obejmować całe sieci, np. wpis 192.168.0. będzie dotyczył wszystkich hostów z podsieci 192.168.0
Operowanie nazwami także może dotyczyć całych sieci lub domen np. wpis .proftpd.org będzie dotyczył całej domeny proftpd.org.
Istnieje także możliwość określenia negacji dokonanego wpisu poprzez użycie znaku !.
Przykład:
<Limit LOGIN>
Order Allow,Deny
Allow from 128.44.26.,128.44.26.,myhost.mydomain.edu,.trusted-domain.org
Deny from all
</Limit>
Deny
Dyrektywa Deny jest używana wewnątrz bloku <Limit> do wyspecyfikowania które hosty i/lub sieci mają mieć zabroniony dostęp do odpowiednich komend.
Szczegóły dotyczące stosowania identyczne jak dla Allow
AllowAll
Używana wewnątrz bloku <Limit> do udostępnienia wszystkim danej komendy lub (grupy komend) opisanej w <Limit>. Może występować jednocześnie z dyrektywą Deny
DenyAll
Używana wewnątrz bloku <Limit> do zabronienia wszystkim danej komendy lub (grupy komend) opisanej w <Limit>. Może występować jednocześnie z dyrektywą Allow
Umask
Składnia: Umask file octal-mask [directory octal-mask]
Stosuje się: konfiguracja serwera, <Anonymous>, <VirtualHost>,
<Directory>, <Global>, .ftpaccess
Umask ustawia maskę z uprawnieniami dla nowo tworzonych plików i katalogów
Wszystkie argumenty tej dyrektywy muszą być podane jako liczba ósemkowa, w formacie 0xxx.
Opcjonalnie drugi argument może podawć maskę która będzie używana w czasie tworzenia katalogów. Gdy nie jest on podany to katalogi będą tworzone wg maski podanej dla plików (jako pierwszy argument).
Ósemkowy zapis praw dostępu w linux'ie
Wartość ósemkowa
Znaczenie
0000
Nikt niema żadnych praw
0001
Prawo właściciela do wykonywania pliku
0002
Prawo właściciela do modyfikacji pliku
0004
Prawo właściciela do czytania pliku
0010
Prawo członków grupy do wykonywania pliku
0020
Prawo członków grupy do modyfikacji pliku
0040
Prawo członków grupy do czytania pliku
0100
Prawo innych użytkowników do wykonywania pliku
0200
Prawo innych użytkowników do modyfikacji pliku
0400
Prawo innych użytkowników do czytania pliku
1000
Tzw. "lepki" (ang. sticky) bit ustawiany we wrażliwych katalogach (np. /tmp). Jego ustawienie powoduje, że pliki znajdujące się w danym katalogu, mogą być usunięte tylko przez ich włascicieli lub właściciela katalogu.
2000
Ustawienie bitu SETGID (SET Group ID) powoduje że programy są wykonywane z uprawnieniami grupy do której należą , nawet wówczas gdy są uruchamiane przez innych użytkowników.
4000
Ustawienie bitu SETUID (SET User ID) powoduje że programy są wykonywane z uprawnieniami właściciela do którego należą , nawet wówczas gdy są uruchamiane przez innych użytkowników.
<VirtualHost>
Składnia: <VirtualHost address>
Blok konfiguracyjny VirtualHost jest używany do tworzenia wydzielonych konfiguracji które będą stosowane w stosunku do różnych nazw hostów lub adresów IP (na tym samym komputerze).
Block jest zakończony przez dyrektywę </VirtualHost>
Tryby pracy serwera ProFTPD
Program ProFTPD potrafi pracować w dwóch trybach: jako usługa uruchamiana przez inetd (RedHat, i inne "duże" dystrybucje) oraz jako samodzielny demon (tak "powinien" pracować na FREESCO). Te dwa różne tryby pracy MUSZĄ być odzwierzciedlone w pliku konfiguracyjnym proftpd.conf - służy do tego parametr ServerType który dla pierwszego trybu powinien być ustawiony na inetd, a dla drugiego standalone
Uruchamianie serwera w zależności od trybu pracy
inetd
W pliku konfiguracyjnym superserwera inetd czyli /etc/inetd.conf (dystrybucja RedHat) powinien znaleźć się następujący wpis:
ftp stream tcp nowait root /usr/local/sbin/proftpd proftpd
jeżeli korzystasz z pakietu TCP Wrappers to możesz uruchamiać serwer poprzez taki oto wpis w /etc/inetd.conf
ftp stream tcp nowait root /usr/sbin/tcpd proftpd
standalone
W pliku konfiguracyjnym superserwera inetd czyli /etc/inetd.conf musimy wyłączyć uruchamianie serwera ftp poprzez zahaszowanie (jak ja tego słowa nie lubię!) odpowiedniej linii:
ftp stream tcp...... - przed modyfikacją
# ftp stream tcp..... - po modyfikacji
Serwer będzie uruchamiany poprzez odpowiedni skrypt startowy. Skrypt taki na ogół należy samodzielnie przygotować. I tu wskazówka, aby wystartować serwer na ogół wystarczy po prostu wywołać program proftpd, aby zatrzymać killall proftpd. Warto oczywiście pamiętać, że z chwilą zatrzymania systemu każdy skrypt jest wywoływany z parametrem stop. Skrypty uruchomieniowe znajdują się w jednym z następujących katalogów :
/etc/rc.d/init.d - w dystrybucji RedHat (w katalogu /etc/rc.d/rc3.d należy stworzyć do skryptu odpowiednie dowiązanie symboliczne)
/etc/rc.d - w dystrybucji Slackware (nadaj skryptowi nazwę np. rc.proftpd)
/mnt/router/rc/rcuser - we FREESCO (o ile zainstalowałeś mój pakiet jest tam skrypt rc_proftpd)
Uwagi dla użytkowników FREESCO
Z uwagi na fakt złego przyporządkowywania numeru id dla nowych użytkowników dodawanych poleceniem adduser, należy samodzielnie (dowolnym linux'owym edytorem) zmodyfikować plik /etc/passwd oraz /mnt/router/etc/passwd tak aby KAŻDY nowy użytkownik miał unikalny id. Podobnie ma się rzecz z plikami /etc/group oraz /mnt/router/etc/group, KAŻDA nowa grupa musi mieć unikalny id
Zawartość plików /etc/passwd oraz /mnt/router/etc/passwd jest zapisana w następujący sposób:
marcin:uhMNhVffk.tN.:506:100:Marcin Kowalski:/home/marcin:/bin/sh
\____/ \___________/ \_/ \_/ \_____________/ \__________/ \_____/
| | | | | | |
| | | | | | powłoka
| | | | | +--- katalog domowy
| | | | +----- rzeczywiste imię i nazwisko
| | | +--------------------- numer grupy (GID)
| | +------------------- numer użytkownika (UID)
| +--------------------------------------- zakodowane hasło
+---------------------------------------------------------- login
Zawartość plików /etc/group oraz /mnt/router/etc/group jest zapisana w następujący sposób:
users::100:marcin,jurek,grzegorz
\___/ \_/ \___________________/
| | | |
| | | +-------- Członkowie grupy
| | +-------------------- Numer grupy (GID)
| +----------------------- Zakodowane hasło
| (tu pusto, bo zazwyczaj
| nie używa się tego pola)
+---------------------------- Nazwa grupy
Rozwiazaniem tego problemu może być instalacja przygotowanego przeze mnie pakietu usaeradd (patrz tutaj), który prawidłowo przyporzadkowuje identyfikatory zarównoużytkownikom jak i grupom.
Jak zdefiniować użytkownika
Przykładowy podstawowy plik konfiguracyjny
# To jest podstawowy plik konfiguracyjny serwera ProFTPD.
# Jego zawartość umożliwia utworzenie pojedynczego serwera
# i umożliwia logowanie tylko użutkownikowi anonymous.
# Musisz posiadać w swoim systemia użytkownika/grupę
# "nobody" i "ftp".
ServerName "ProFTPD Default Installation"
ServerType standalone
DefaultServer on
# Port 21 is the standard FTP port.
Port 21
# Ustawienie Umask na 022 to dobra standardowa maska dla tworzonych nowych
# katalogów i plików
Umask 022
# Aby zabezpieczyć się przed atakami DoS (odmowa udostępnienia usługi)
# zaleca się ustawienie maksymalnej liczby procesów potomnych na 30
# Jeśli potrzebujesz więcej niż 30 połączeń jednocześnie możesz
# odpowiednio zmodyfikować tę wartość.
# (To działa TYLKO w trybie standalone)
MaxInstances 30
# Ustawienia uzytkownika i grupy z prawami których serwer normalnie startuje.
User nobody
Group nogroup
# Chcemy aby pliki mogły być nadpisywane.
AllowOverwrite on
# Podstawowa konfiguracja użytkownika anonymous configuration,
# bez katalogów upload.
User ftp
Group ftp
# Chcemy aby klienci logujący sie jako "anonymous" byli
# traktowani jako "ftp"
UserAlias anonymous ftp
# Maksymalna liczba zalogowanych użytkowników "anonymous"
MaxClients 10
# 'welcome.msg' będzie wyświetlane w chwili logowania,
# a '.message' w każdym nowo otwartym katalogu.
DisplayLogin welcome.msg
DisplayFirstChdir .message
# Tą prostą dyrektywą zabronimy zapisywania czegokolwiek w systemie
# katalogów otwieranych dla użytkownika anonymous
DenyAll
Prykładowy plik konfiguracyjny z definicją wirtualnego hosta
# 'proftpd.conf' to podstawowy plik konfiguracyjny serwera ProFTPD
# Zawarto w nim konfigurację dla pojedynczego serwera i dla jednego
# login'u anonymous. W efekcie, aby miało to szansę zadziałać musisz
# mieć zdefiniowanego użytkownika/grupę "nobody"
ServerName "Mój serwer FTP"
ServerType standalone
DefaultServer on
# Port 21 to standardowy port FTP.
Port 21
Umask 022
# Aby zabezpieczyć się przed atakami DoS (odmowa udostępnienia usługi)
# zaleca się ustawienie maksymalnej liczby procesów potomnych na 30
# Jeśli potrzebujesz więcej niż 30 połączeń jednocześnie możesz
# odpowiednio zmodyfikować tę wartość. To działa TYLKO w trybie
# standalone (we freesco tak działa)
MaxInstances 30
# Ustaw użytkownika i grupę z poziomu których serwer normalnie
# startuje.
User nobody
Group nobody
# Pliki i katalogi mogą być nadpisywane.
<Directory /*>
AllowOverwrite on
</Directory>
# Podstawowa konfiguracja użytkownika anonimowego, bez upload'u
# katalogów.
<Anonymous /mnt/router/packages/proftpd/share/pub>
User nobody
Group nobody
# Potrzebujemy uzytkownika który będzie używany gdy ktoś
# będzie się logował jako anonim. Tu po zalogowaniu się do
# serwera jako anonymous faktycznie będziemy korzystać
# z konta nobody
UserAlias anonymous nobody
# Maksymalnaliczbaużytkowników logujących się jako anonymous
MaxClients 10
# Tu ustawiamy fakt logowania bez hasła
AnonRequirePassword off
# 'welcome.msg' będzie wyświetlane w chwili logowania,
# a '.message' w każdym nowo otwartym katalogu.
DisplayLogin welcome.msg
DisplayFirstChdir .message
# Limit WRITE mówi czy można zapisywać cokolwiek w katalogu
# Dyrektywa DenyAll nie pozwala na to nikomu
# Inne możliwe dyrektywy to np.(nie wszystkie):
# AllowAll, Allow 192.168.1.*, AllowUser filip, DenyUser anonymous
# Oczywiście chodzi tu o środowisko 'chroot' stworzone dla
# użytkownika anonymous
<Limit WRITE>
DenyAll
</Limit>
</Anonymous>
# koniec definicji użytkownika anonymous
# początek definicji serwera wirtualnego
# nazwę 'host.domena' zmień na właściwą dla twojego komputera
# w przeciwnym wypadku serwer się nie uruchomi
<VirtualHost host.domena>
# Nazwa twojego hosta
ServerName "FTP Server"
# Tu piszemy logi
TransferLog /mnt/router/packages/proftpd/var/virt_tran.log
# katalog root dla tego serwera (nie można wyjść ponad ten katalog)
DefaultRoot /mnt/router/packages/proftpd/share/
# Jeśli użytkownicy nie mają konta w systemie, to w jakim pliku
# są ich dane. Najprościej rzecz ujmując - zawartość tego pliku
# jest identyczna z plikiem /etc/passwd Ja używam kont systemowych
# więc pozycja jest "zachaszowana"
#
# AuthUserFile /usr/local/var/proftpd/passwd.ftp
# początek definicji katalogu domowego użytkownika user1
# oczywiście dodaj użytkownika do systemu
# Jak już dodasz to ustaw odpowiednio prawa do własciwego katalogu
# nie zapomnij nadać unikalnego id w pliku passwd
# (freesco uparcie wpisuje 500)
# właściciel katalogu: user1
# dostęp do katalogu: rwx dla user1
#
<Directory /mnt/router/packages/proftpd/share/user1>
<Limit All>
AllowUser user1
DenyAll
</Limit>
</Directory>
# koniec definicji katalogu
# początek definicji katalogu dla kogoś kto będzie wgrywał pliki
# na serwer oczywiście dodaj użytkownika do systemu
# Jak już dodasz to ustaw odpowiednio prawa do własciwych katalogów
# nie zapomnij nadać unikalnego id w pliku passwd
# (freesco uparcie wpisuje 500)
# właściciel katalogu: ftpadmin
# dostęp do katalogu: rwx dla ftpadmin, rx grupa, rx pozostali
#
<Directory /mnt/router/packages/proftpd/share>
<Limit All>
AllowUser ftpadmin
DenyAll
</Limit>
</Directory>
# koniec definicji katalogu
# początek szczegółowej definicji katalogu dla użytkownika anonumous
# na tym serwerze wirtualnym
<Anonymous /mnt/router/packages/proftpd/share/pub>
User nobody
Group nobody
UserAlias anonymous nobody
MaxClients 10
<Directory upload>
# dozwolone wysyłanie plików na serwer
<Limit STOR>
AllowAll
</Limit>
# nie wolno nic zapisywać (zmieniać istniejących plików)
# pobierać plików czytać zawartości katalogu.
<Limit WRITE DIRS READ>
DenyAll
</Limit>
# można się poruszać po drzewie katalogowym
<Limit CWD XCWD CDUP>
AllowAll
</Limit>
</Directory>
</Anonymous>
</VirtualHost>
Lynx and Links friendly
Wyszukiwarka
Podobne podstrony:
03 Linux Konfiguracja serwera FTP PROFTPDpodstawowa konfiguracja serwera(od blumena)DNS konfiguracja serwera02 Linux Konfiguracja serwera WWW APACHEKonfiguracja serwera Apache, SSL w systemie GNU Linux04 Linux Konfiguracja serwera poczty elekrtonicznej POSTFIXKonfiguracja serwera pocztyKonfiguracja sieci serwerLinux User Konfiguracja ProFTPdKonfiguracja maszyn wirtualnych(1)Subwoofer domowy poĹączenie i konfiguracjaBiblioteka PHP WysyĹanie pliku na serwerKlastry pracy awaryjnej w srodowisku Windows Instalacja konfiguracja i zarzadzanie klastrWinXP Konfiguracja sieciwiÄcej podobnych podstron