plik


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 PROFTPD
podstawowa konfiguracja serwera(od blumena)
DNS konfiguracja serwera
02 Linux Konfiguracja serwera WWW APACHE
Konfiguracja serwera Apache, SSL w systemie GNU Linux
04 Linux Konfiguracja serwera poczty elekrtonicznej POSTFIX
Konfiguracja serwera poczty
Konfiguracja sieci serwer
Linux User Konfiguracja ProFTPd
Konfiguracja maszyn wirtualnych(1)
Subwoofer domowy połączenie i konfiguracja
Biblioteka PHP Wysyłanie pliku na serwer
Klastry pracy awaryjnej w srodowisku Windows Instalacja konfiguracja i zarzadzanie klastr
WinXP Konfiguracja sieci

więcej podobnych podstron