HOME
DO_STR_GLOWNEJ_WYSZUKIWARKI
 
 
ProFTPd

 

Pobierz spakowaną witrynę gorzow-wlkp.pl/linux

Jeżeli pragniesz poznać Linuksa Mandrake (obecnie Mandriva), to... dobrze trafiłeś. Witryna została zauważona przez twórców magazynu KOMPUTER ŚWIAT 5/2004(141) str. 46 poprzez umieszczenie linku oraz magazynu CHIP 4/2004 (str.114) poprzez umieszczenie artykułu opisującego ten serwis internetowy. Jak na hobbystyczną stronę o Linuksie to miłe ;) Acha... na stronie mandrakelinux.pl/informacje podano też link z opisem cytuję "duży zbiór praktycznych informacji o Mandrake" (mam ją w swoim archiwum - klub.chip.pl/twarogal).

Zapraszam do zadawania pytań na FORUM oraz mailem. Chętnie udzielę (bezpłatnie) odpowiedzi. Oficjalne ceny za jedną poradę na stronie MandrakeSoftPL (mam ją w moim archiwum z dnia 2.05.2004) wahają się od 20 do 350 zł.

 


...autentyczna rozmowa na GG: BŁAGAM! POMÓŻ! ZROBIŁEM WSZYSTKO JAK OPISAŁEŚ I NIE MOGĘ WEJŚĆ NA SERWER FTP! Moje pytanie: włączyłeś serwer ftp? Odpowiedź: A JAK TO SIĘ ROBI? (odpowiedź oczywicie była na stronce www, ale mój rozmówca należał do tej grupy leniwców, co pierw pytają i zawracają głowę, a potem czytają dostępny materiał). Proszę, nie zadawaj debilnych pytań i wykaż się odrobiną samodzielności.

 

W sieci pliki przerzucamy różnymi protokołami:
* ftp - najlepszy na duże pliki
* http - mniej ekonomiczny, gdyż powiększa nieco wielkość przesyłanych plików
* pocztowy - najgorszy, z powodu rażąco dużego powiększania wielkości plików (poprzez dodawanie bitów kontrolnych).

Przyjmuję, że pracujesz na Linuksie Mandrake/Mandriva, masz w domu stałe połączenie z Internetem (np. poprzez modem SDI). O ile ustalenie Twojego nr IP jest banalnie proste (znajdziesz go na instrukcji obsługi oraz na umowie), o tyle adres słowny (domenę) często musisz odkryć sam.

Podczas prac konfiguracyjnych zamiast tradycyjnych poleceń tekstowych, możesz użyć programu MC (czyli Midnight Commander).

Strona domowa projektu PROFTPD: http://www.proftpd.org/. Nie polecam pobierania instalek oryginalnych ze wspomnianej strony www. Proponuję wybrać paczkę mdk.rpm z płytki instalacyjnej lub serwera ftp Mandrake/Mandriva. Zapewnisz sobie w ten sposób możliwość łatwiejszej aktualizacji.

Zainstalowanie serwera proftpd jest bardzo łatwe. W Mandrake/Mandriva można to zrobić w trakcie instalacji lub po pierwszym uruchomieniu (w KDE wybierz: MANDRAKE CONTROL CENTER- ZARZĄDZANIE OPROGRAMOWANIEM- INSTALACJIA OPROGRAMOWANIA- Znajdź w nazwach- proftpd i kliknij WYSZUKAJ, ZAINSTALUJ. W Mandriva 2005 (Mandrake 10.2) narzędzie INSTALACJIA OPROGRAMOWANIA nie jest instalowane domyślnie, więc (jako root) skorzystaj z polecenia urpmi. Acha... Instalator Mandrake/Mandriva oferuje dwie instalki ProFTPd: wersję podstawową oraz moduł umożliwiający logowanie anonymous.

Istnieje stronka (w języku angielskim) z zestawem pytań i odpowiedzi (FAQ) www.proftpd.org/docs/faq/proftpdfaq.html

Dla ambitnych polecam angielską stronę www zawierającą wykaz wszystkich (chyba) dyrektyw serwera ProFTPd http://spox.org/linux/proftp/Configuration.html . Mam ją w swoim archiwum.

 
*

 

NIE NAMAWIAM DO INSTALOWANIA serwera ftp!!! Czemu? Gdyż wiąże się to ze zwiększeniem zagrożenia włamaniami. Byłem świadkiem, jak przy pomocy exploita kolega włamał się na mój serwer ftp i... przejał prawo roota. Na szczęście miałem dodatkowe zabezpieczenia, więc szybko go wywaliło. Poza tym złapałem się za głowę, gdy po zainstalowaniu serwera proftpd (mając ustawienia domyślne), z klienckiego komputera zalogowałem się na konto. Podałem nazwę linuksowego konta i linuksowe hasło. Co zobaczyłem? Pełny dostęp do plików systemowych, przegląd ułożenia katalogów, które na szczęście miały restrykcyjnie nadane uprawnienia. Po prostu mogłem bezkarnie grasować po Linuksie z zewnętrznego komputera!!! Gdy do tego dodamy informację, że hasła i treść są przesyłane otwartym tekstem - to WITAJCIE WŁAMYWACZE!!! Ze zgrozą pomyślałem o konsekwencjach zalogowania się poprzez proftpd na konto... roota.

 
*

 

Nasz serwer ftp będzie pracować:
 
  • na katalogu /var/ftp/pub i ma za zadanie obsługę klientów anonimowych, którzy nie mają żadnych praw, poza możliwością listowania, odczytu i pobierania plików z ściśle wyznaczonego katalogu
  • na katalogu /home/ftptipek/pubtipek użytkownika "ftptipek" . Tutaj po podaniu loginu (linuksowego) i hasła (linuksowego) klient będzie miał więcej uprawnień: prawo do zapisu, listowania, odczytu, bez prawa do kasowania, podmieniania plików lub katalogów.
  • na katalogu /home/ftpwacek/pubwacek użytkownika "ftpwacek" . Tutaj po podaniu loginu (linuksowego) i hasła (linuksowego) klient będzie miał (prawie) maksimum uprawnień: prawo do zapisu, listowania, odczytu, kasowania i podmieniania plików lub katalogów.

 

*

 

Główny nacisk położyłem na bezpieczeństwo, jednak proszę zapamiętać:
 
  • Hasła są przesyłane OTWARTYM tekstem.
  • Logować można się wyłącznie na konta specjalnie do tego przygotowane. Pokażę jak to zrobić.
  • Wskazane jest wydzielić osobną partycję montowaną jako /var/ftp. Więcej o dzieleniu dysku na partycje tutaj.

 

*

 

Poniższy opis wykonałem pracując na Mandrake 8.x, 9.x. Oczywiście można go wykorzystać podczas konfigurowania ProFTPd pod innymi Linuksami, choć trzeba wówczas wziąć pod uwagę specyfikę danej dystrybucji (np. automatycznie instalowane zabezpieczenia).

Pod Mandrake 10.0 miałem problemy z logowaniem po zainstalowaniu w WYŻSZYM (dla serwerów) poziomie bezpieczeństwa. Wskazana jest więc przemyślana instalacja Mdk 10.0.

Należy pamiętać, że od wersji 10.0 Mandrake oraz na Mandriva istnieją dwa pliki instalacyjne: proftpd oraz proftpd-anonymous. Jest z tym związana konieczność konfiguracji dwóch plików /etc/proftpd.conf oraz /etc/proftpd-anonymous.conf. Niniejsza strona opisuje serwer ProFTPd instalowany z jednego pliku proftpd (nie było instalki pod nazwą proftpd-anonymous). Nie opisuję więc pliku /etc/proftpd-anonymous. Nie jest to zresztą jakieś znaczące utrudnienie, gdyż plik /etc/proftpd-anonymous.conf zawiera wpisy standardowo występujące w pliku /etc/proftpd.conf (w sekcji <Anonymous /var/ftp/pub>).

Pliki konfiguracyjne z Mandrake 10.2 (Mandriva 2005):
proftpd.conf
proftpd-anonymous.conf

 

*

 

 

Konfigurowanie serwera proftpd

 Pliki w katalogu /var/ftp/pub
 
  1. Sprawdź (zleceniem cd /var;ls -la) jak wyglądają prawa własności do katalogu /var/ftp i zapisz sobie na kartce te ustawienia. Utwórz katalog /var/ftp/pub i nadaj mu identyczne prawa jak w /var/ftp

    W Mandrake 8.1 katalog /var/ftp/pub będzie miał prawa: [ftp.ftp drwxr-xr-x]

    W Mandrake 9.x, 10.x katalog /var/ftp powinien mieć prawa: [root.root drwxr-xr-x] , natomiast katalog /var/ftp/pub powinien mieć prawa [ftp.ftp drwxr-xr-x]
     

  2. Pliki przeznaczone do udostępniania na publicznym koncie serwera ftp skopiuj do katalogu /var/ftp/pub . Następnie nadaj im prawa: [ftp.ftp -r--r--r--] (poleceniem chmod -R 444 * i chown -R ftp.ftp * będąc w katalogu ~/pub ) . Podkatalogom nadaj prawa [ftp.ftp drwxr-xr-x] poleceniem chown ftp.ftp jakiś_podkatalog oraz chmod 755 jakiś_podkatalog . Zapamiętaj tę uwagę, gdyż pliki konfiguracyjne serwera proftpd tak ustawimy, że nie będzie innej możliwości wkładania plików do katalogu /var/ftp/pub jak tylko przez roota! I nie zadziała tutaj automatycznie nadawana maska na pliki kopiowane, bo po prostu wybierzemy (w pliku proftpd.conf) opcję całkowitego blokowania zdalnego zapisu plików.

 

 

Pliki w katalogu /home/ftptipek/pubtipek


  1. Utwórz nowego użytkownika w Linuksie: ftptipek i nadaj jego grupie nazwę ftptipek. Powłoka domyślna nie jest istotna, gdyż nie będziesz z niej korzystać. Numer UID = kolejny ostatni. Pod KDE wykonasz to bez problemów: -K- KONFIGUROWANIE- MENADŻER UŻYTKOWNIKÓW- DODAJ UŻYTKOWNIKA-.

    Sprawdź prawa katalogu /home/ftptipek (ma być 711 czyli drwx --x --x). Prawa uzyskasz po wydaniu polecenia cd /home;ls -la . Restartuj system i ponownie sprawdź prawa katalogu /home/ftptipek. Jeżeli nastąpiła zmiana na 700, to przeczytaj tę stronę.
     
  2. Utwórz podkatalog /home/ftptipek/pubtipek i nadaj mu uprawnienia ftptipek.ftptipek rwxr-xr-x poleceniem chmod 755 pubtipek oraz chown ftptipek.ftptipek pubtipek (będąc w katalogu /home/ftptipek).

    Jeżeli chodzi o prawa przyszłych plików, to te wkładane zdalnie - będą miały właściwe prawa (serwer sam dopilnuje, aby miały właściwe ustawienia, gdyż w pliku proftpd.conf umieścimy właściwą dyrektywę). Jeżeli skopiujesz pliki bezpośrednio (mając jako root fizyczny dostęp do serwera), to będziesz musiał ręcznie nadać właściwe prawa!!!.

 

Pliki w katalogu /home/ftpwacek/pubwacek
 

  1. Utwórz nowego użytkownika w Linuksie: ftpwacek i nadaj jego grupie nazwę ftpwacek. Resztę wykonaj analogicznie, tak jak wobec konta ftptipek. Nie zapomnij sprawdzić praw do katalogu /home/ftpwacek (ma być 711 czyli drwx --x --x).

     

    Konfigurowanie pliku /etc/proftpd.conf
     
  2. Wykonaj jako root polecenie:
    • cd /etc
    • ls -la proftpd.conf lub ls -la |more (wówczas przepuszczaj strony spacją) . Zapisz na kartce prawa pliku proftpd.conf . U mnie było to root.root -rw-------
    • Usuń ten plik lub przesuń do archiwum.
    • Mając Mandrake 8.x oraz 9.x skopiuj mój proftpd.conf w miejsce starego (czyli do katalogu /etc) oraz nadaj prawa root.root -rw------- za pomocą poleceń: cd /etc oraz chown root.root proftpd.conf i chmod 600 proftpd.conf.
      Moje przykładowe pliki do Mandrake 10.2/Mandriva 2005 są tutaj: proftpd.conf oraz proftpd-anonymous.conf
    • Skoryguj w nim kilka wpisów. Przede wszystkim zamień nazwę swojego użytkownika z ftptipek na inną ładniejszą. Wstaw też nazwę swojego, rzeczywistego katalogu docelowego, zamiast /home/ftptipek/pubtipek . Ponadto możesz zmienić sposób blokowania dostępu zewnętrznych klientów.
    • Uwaga: jeżeli skopiujesz mój plik proftpd.conf i nie zadziała połączenie (przyjmuję, że wpisy w nim są prawidłowe i dobrze skonfigurowałeś pliki hosts, firewalla) możesz doświadczyć problemu, którego genezy nie rozumiem. Chodzi o sytuację, gdy do prawidłowego działania serwera proftpd trzeba będzie... ręcznie wypełnić oryginalny plik proftpd.conf. Co ciekawe - dokładnie tą samą treścią! Podobny problem znają webmasterzy w plikach html: tekst skopiowany z pliku zapisanym w innym kodowaniu, po wklejeniu do pliku html kodowanego inaczej, potrafi uszkodzić kodowanie czcionki CAŁEJ strony.
    • W poniższym przykładzie pliku /etc/proftpd.conf umieściłem fragmenty w kolorze brązowym (dla anonima i dla każdego usera osobno). To nieobowiązkowe opcje regulujące transferem do i z serwera ftp. Przydatne w sytuacji gdy narwani wielbiciele dużych plików zajmują cały transfer przydzielony dla usługi SDI (nie ma to nic wspólnego z CBQ).

    Tak wygląda mój plik proftpd.conf. Objaśnienia są w kolorze czarnym i możesz je pominąć. Właściwa treść jest w kolorze niebieskim.
     



    #####################################################

    #USTAWIENIA GLOBALNE#

    #####################################################

    #Nazwa serwera (wpisz ladny tytul)

    ServerName "Prywatny serwer FTP Filotka Geronimusa"

    #ukrycie wersji serwera proftpd - pojawi sie ladny tytul

    ServerIdent on "Witam. To Twoj szczesliwy dzien ;)"

    #Mail do admina. Jezeli nie masz skonfigurowanego swojego

    #programu pocztowego, to oczywiscie wpis nie zadziala ;)

    ServerAdmin ftptipek@pd125.wroclaw.sdi.tpnet.pl

    #Serwer MUSI mieć wpis standalone . Co to oznacza?

    #Standalone, czyli serwer uruchamiany w postaci osobnego procesu - więcej znajdziesz tutaj

    ServerType standalone

    #Wyswietla info o serwerze PO udanym zalogowaniu.

    #Potrzebny do uaktywnienia wpisu DisplayLogin welcome.msg
    DeferWelcome on

    #Wiadomosc pojawiajaca się na powitanie. Patrz DeferWelcome on

    DisplayLogin welcome.msg

    #Tak MUSI byc

    DefaultServer on

    #Ograniczenie pola dzialania do katalogu /var/ftp/pub

    DefaultRoot /var/ftp/pub

    #Port na ktorym pracuje ftp - domyslnie 21 na calym swiecie :)

    Port 21

    #Ustawienie prawa wlasciciela do modyfikacji pliku.

    #022 - pliki moga byc czytane przez wszystkich (prawa 755)

    #077 - pliki może odczytac tylko zalogowany uzytkownik (prawa 700)

    #Jezeli nic nie rozumiesz, to wybierz 002 (czyli 775) lub 022 (755).

    Umask 002

    #Uzytkownik na jakim jest uruchomiony serwer

    #W Mandrake 8.0, 8.1 wybierz nobody, nobody

    #W Mandrake 9.0, 9.1, 9.2, 10.0 wybierz ftp, ftp
    # Można ustalić prawidłową nazwę użytkownika edytując oryginalny plik proftpd.conf

    User ftp
    Group ftp

    #Timeout - czyli po jakim czasie przerwac polaczenie z

    #serwerem. Ustawienia standardowe sa logiczne

    TimeoutIdle 300
    TimeoutStalled 300
    TimeoutLogin 60
    TimeoutNoTransfer 300

    #Miejsce przechowywania pliku proftp.log z zapisem aktywnosci serwera

    #Sprawdz, czy istnieje faktycznie (po restarcie i zaladowaniu serwera ftp)

    #U mnie pilk powstal automatycznie po pierwszym odwiedzeniu konta ftp.

    ExtendedLog /var/log/proftp.log

    #Konsola, w ktorej sa na biezaco wyswietlane logi.

    #Wcisnij CTRL ALT F10 aby ja uruchomic. Aby powrocic

    #do konsoli X_WINDOW (np. KDE) wcisnij CTRL ALT F7

    #Aby powrocic do konsoli bez okienek wcisnij CTRL ALT F1

    ExtendedLog /dev/tty10

    #Aby uchronic się przed atakami DoS ustalono standard

    #maksymalnie 20 uruchomionych procesow potomnych

    MaxInstances 20

    #Ilosc akceptowanych prob logowania - liczba standardowa = 2

    #Chroni przed probami silowego odgadniecia hasla

    MaxLoginAttempts 2

    #Ilosc klientow maksymalnie obslugiwanych przez serwer.

    #Chroni przed przeciazeniem i spowolnieniem pracy serwera.

    MaxClients 10 ">>>Za duzo chetnych :( Zapraszam innym razem.<<<"

    #Ilosc polaczen z jednego komputera (zabezpiecza przed atakami

    #i nazbyt nachalnymi klientami)

    MaxClientsPerHost 5 "Przystopuj! Za duzo polaczen z jednego IP."

    #Ustalenie (globalne) miejsc, skad klient może się zalogowac

    #Potem w ustawieniach poszczegolnych ANONYMOUS mozna to jeszcze

    #bezbolesnie zmienic (dostosowac precyzyjniej dostep).

    #Allow znaczy zgoda, Deny znaczy blokada, from znaczy z...

    #IP 192.168.0.2 to przykładowy numer komputera z Twojej sieci

    <Limit LOGIN>
    Order allow,deny
    Allow from .pl
    Allow from 192.168.0.2
    DenyAll
    </Limit>

    #AllowOverwrite on, czyli pozwolenie na zdalne

    #nadpisywanie plikow na serwerze - koniecznie ON

    #AllowRetrieveRestart on, czyli pozwolenie na wznowienie pobierania

    #(domyslnie on). Jeżeli chcesz ON, to nie musisz wpisywać.

    #AllowStoreRestart on, czyli pozwolenie na wznowienie

    #zapisu na serwer (domyslnie off)

    <Directory /*>
    AllowOverwrite on
    #AllowRetrieveRestart on
    AllowStoreRestart on
    </Directory>

    #Potrzebne przy NIS

    #O NIS wiecej przeczytasz tutaj.

    PersistentPasswd off

    #####################################################

    #Ustawienia UZYTKOWNIKA ANONIMOWEGO#

    #####################################################

    #Uzytkownik anonimowy ma dostep do serwera publicznego

    #ftp prezentujacego zawartosc katalogu /var/ftp/pub

    <Anonymous /var/ftp/pub>
    User ftp
    Group ftp

    #Aliasy dla uzytkownikow - Klienci zostali zrownowazeni:

    # "anonymous" ma takie same prawa co "ftp"

    UserAlias anonymous ftp
    # Czy "anonymous" ma podawac haslo "anonymous" - proponuje NIE (off)
    AnonRequirePassword off

    #Wazne. Jezeli zahaszujesz lub usuniesz ten wiersz, to wymusisz

    #logowanie na login i haslo (co w przypadku publicznie

    #dostepnego ftp-a nie ma sensu). W wolnym tlumaczeniu

    #oznacza: WskazanyPrawidlowyShell - wylaczone

    RequireValidShell off

    #Parametry indywidualne dla anonimowego uzytkownika

    #Patrz na wyjasnienia w linii USTAWIENIA GLOBALNE

    DisplayLogin welcome.msg
    DisplayFirstChdir .message
    GroupOwner ftp
    Umask 002
    HideUser root
    HideGroup root
    HideNoAccess on
    MaxClients 10 "Za duzo chetnych. Zapraszam innym razem"
    MaxClientsPerHost 5 "Przystopuj! Za duzo poloczen z jednego IP."

    #Regulacja transferem - ustawienia dla serwera
    #laczacego sie z Internetem poprzez SDI.

    #Wlaczanie ograniczen zapisu na serwer do 750000 B/s (wpisz w bajtach)
    RateWriteBPS 750000
    #Bez limitu zapisu dla malych plikow o pojemnosci 100000 B (wpisz w bajtach)
    #RateWriteFreeBytes 100000
    #Wlaczenie ograniczenia zapisu przy kilku userach
    RateWriteHardBPS on

    #Ograniczenie odczytu na serwer do 750000 B/s (wpisz w bajtach)
    RateReadBPS 750000
    #Bez limitu odczytu dla malych plikow o pojemnosci 100000 B (wpisz w bajtach)
    #RateReadFreeBytes 100000
    #Wlaczenie ograniczenia odczytu przy kilku userach
    RateReadHardBPS on

    #Ustawienie praw uzytkownika anonimowego. DenyAll dla wszystkiego

    #co jest potencjalnie niebezpieczne dla serwera.

    #AllowAll czyli pozwolenie na listowanie (LIST DIRS);

    #Linia IgnoreHidden zabezpiecza nasz system chowajac

    #pliki z atrybutem UKRYTY (hidden-ukryty, on-aktywne)

    #Ustawimy wiec bardzo restrykcyjnie prawa dla anonimowego

    #uzytkownika: bedzie mogl tylko listowac i kopiowac pliki.

    <Limit WRITE MKD DELE RMD STOR>
    DenyAll
    </Limit>
    <Limit LIST DIRS READ>
    AllowAll
    IgnoreHidden on
    </Limit>
    </Anonymous>

    #####################################################

    #Ustawienia dla WYBRANEGO UZYTKOWNIKA (tutaj ftptipek)

    #####################################################

    #Uzytkownik ftptipek musi miec zalozone wczesniej linuksowe konto (z haslem,

    #katalogiem w /home/ftptipek itd). User i grupa pod jedna nazwa: ftptipek.

    #Nastepnie trzeba zalozyc katalog /home/ftptipek/pubtipek

    #w ktorym beda trzymane pliki ftpa

    #Czemu nie nalezy trzymac plikow w /home/ftptipek?

    #Gdyz uzytkownik po zalogowaniu bedzie mogl harcowac po calym katalogu

    #ftptipek i widziec wszystkie pliki (takze systemowe)

    #Aby zalogowac się na to konto potrzebny bedzie po stronie klienta

    #program obslugujacy ftp np. Windows Commandera. Z niego

    #zalogujesz się przy uzyciu LOGINU (czyli nazwy linuksowego konta:

    #ftptipek) oraz HASLA (czyli systemowego hasla konta ftptipek).


    <Anonymous /home/ftptipek/pubtipek>
    User ftptipek
    Group ftptipek
    AnonRequirePassword on
    RequireValidShell off
    DisplayLogin welcome.msg
    DisplayFirstChdir .message
    GroupOwner ftptipek
    Umask 002
    HideUser root
    HideGroup root
    HideNoAccess on
    MaxClients 10 "Za duzo chetnych. Zapraszam innym razem"
    MaxClientsPerHost 5 "Przystopuj! Za duzo poloczen z jednego IP."

    #Regulacja transferem - ustawienia dla serwera
    #laczacego sie z Internetem poprzez SDI.

    #Wlaczanie ograniczen zapisu na serwer do 500000 B/s (wpisz w bajtach)
    RateWriteBPS 500000
    #Bez limitu zapisu dla malych plikow o pojemnosci 100000 B (wpisz w bajtach)
    #RateWriteFreeBytes 100000
    #Wlaczenie ograniczenia zapisu przy kilku userach
    RateWriteHardBPS on

    #Ograniczenie odczytu na serwer do 500000 B/s (wpisz w bajtach)
    RateReadBPS 750000
    #Bez limitu odczytu dla malych plikow o pojemnosci 100000 B (wpisz w bajtach)
    #RateReadFreeBytes 100000
    #Wlaczenie ograniczenia odczytu przy kilku userach
    RateReadHardBPS on

    #Logowanie dostepne wylacznie z domen .pl

    <Limit LOGIN>
    Order allow,deny
    Allow from .pl
    DenyAll
    </Limit>

    #Ustawienie praw zalogowanego uzytkownika

    #może zapisywac (ale nie kasowac czy nadpisywac)

    <Directory /home/ftptipek/pubtipek>
    <Limit WRITE STOR MKD READ>
    AllowAll
    </Limit>
    <Limit DELE RMD>
    DenyAll
    IgnoreHidden on
    </Limit>
    </Directory>
    </Anonymous>

    #Ostatni (w drzewie) katalog powyżej którego

    #klient nie może zdalnie wejsc.

    DefaultRoot /home/ftptipek/pubtipek

    #####################################################

    #Ustawienia dla WYBRANEGO UZYTKOWNIKA (tutaj ftpwacek)

    #####################################################

    #Uzytkownik ftpwacek musi miec zalozone wczesniej linuksowe konto (z haslem,

    #katalogiem w /home/ftpwacek itd). User i grupa pod jedna nazwa: ftpwacek.

    #Nastepnie trzeba zalozyc katalog /home/ftpwacek/pubwacek

    #w ktorym beda trzymane pliki ftpa

    #Czemu nie nalezy trzymac plikow w /home/ftpwacek?

    #Gdyz uzytkownik po zalogowaniu bedzie mogl harcowac po calym katalogu

    #ftpwacek i widziec wszystkie pliki (takze systemowe)

    #Aby zalogowac się na to konto potrzebny bedzie po stronie klienta

    #program obslugujacy ftp np. Windows Commandera. Z niego

    #zalogujesz się przy uzyciu LOGINU (czyli nazwy linuksowego konta:

    #ftpwacek) oraz HASLA (czyli systemowego hasla konta ftpwacek).


    <Anonymous /home/ftpwacek/pubwacek>
    User ftpwacek
    Group ftpwacek
    AnonRequirePassword on
    RequireValidShell off
    DisplayLogin welcome.msg
    DisplayFirstChdir .message
    GroupOwner ftpwacek
    Umask 002
    HideUser root
    HideGroup root
    HideNoAccess on
    MaxClients 10 "Za duzo chetnych. Zapraszam innym razem"
    MaxClientsPerHost 5 "Przystopuj! Za duzo poloczen z jednego IP."

    #Regulacja transferem - ustawienia dla serwera
    #laczacego sie z Internetem poprzez SDI.

    #Wlaczanie ograniczen zapisu na serwer do 500000 B/s (wpisz w bajtach)
    RateWriteBPS 500000
    #Bez limitu zapisu dla malych plikow o pojemnosci 100000 B (wpisz w bajtach)
    #RateWriteFreeBytes 100000
    #Wlaczenie ograniczenia zapisu przy kilku userach
    RateWriteHardBPS on

    #Ograniczenie odczytu na serwer do 500000 B/s (wpisz w bajtach)
    RateReadBPS 750000
    #Bez limitu odczytu dla malych plikow o pojemnosci 100000 B (wpisz w bajtach)
    #RateReadFreeBytes 100000
    #Wlaczenie ograniczenia odczytu przy kilku userach
    RateReadHardBPS on

    #Logowanie dostepne wylacznie z domen .pl

    <Limit LOGIN>
    Order allow,deny
    Allow from .pl
    DenyAll
    </Limit>

    #Ustawienie praw zalogowanego uzytkownika

    #może zapisywac, kasowac i nadpisywac.

    <Directory /home/ftpwacek/pubwacek>
    <Limit READ WRITE DIRS>
    AllowAll
    #</Limit>
    #<Limit RMD>
    # DenyAll
    IgnoreHidden on
    </Limit>
    </Directory>
    </Anonymous>

    #Ostatni (w drzewie) katalog powyżej którego

    #klient nie może zdalnie wejsc.

    DefaultRoot /home/ftpwacek/pubwacek

     

     


     

     

  3. Restartuj system i obserwuj uważnie komunikaty startowe. Jeżeli coś namieszałeś w pliku proftpd.conf to zobaczysz krótki komunikat błędu. Uważnie go przeczytaj. Samego demona (a nie system) restartuj poleceniem (pod rootem): /etc/rc.d/init.d/proftpd restart (lub stop, start). Serwer proftpd można oczywiście uruchamiać automatycznie podczas startu. Problem autostartu opisałem tutaj.
     
  4. Będziesz udostępniał trzy konta:
    • publiczne, które wywołasz w przeglądarce internetowej ftp://pd132.wroclaw.sdi.tpnet.pl
    • drugie, tajne, które odległy klient wywoła w przeglądarce internetowej wpisując w pasku adresu linię: ftp://ftptipek:haslo@pd132.wroclaw.sdi.tpnet.pl lub programem do transmisji ftp np. Windows Commanderem. Wówczas wpiszesz adres ftp://pd132.wroclaw.sdi.tpnet.pl i podasz linuksowy-shellowy login (ftptipek) plus linuksowe hasło dla tego loginu . To drugie konto jest dla wtajemniczonych - będą oni mogli kopiować i wgrywać pliki. Ustawiłem swój plik proftpd.conf w takiej opcji, że goście nie mogą podmieniać i kasować plików - można to będzie robić jedynie mając bezpośredni dostep do Linuksa. Zabezpieczy to przed głupotą znajomych, ale grozi przepełnieniem konta. Cóż, coś za coś. Jak widać, bardziej obawiam się głupoty, niż braku miejsca na dysku :)
    • trzecie dla użytkownika ftpwacek logujacego się poprzez hasło. Będzie mógł jak na cywilizowany serwer ftp przystało: kopiować, usuwać pliki. Słowem - administrować :)

     
  5. Przypominam o ważnej rzeczy: jeżeli jako root będziesz dodawał pliki do katalogu /var/ftp/pub to MUSISZ nadać właściwe prawa: katalogi mają ftp.ftp drwxr-xr-x , a pliki ftp.ftp -r--r--r-- . Jest to ważne, gdyż w przeciwnym wypadku pliki nie będą widoczne na zewnątrz (mimo, że faktycznie będą w katalogu ~/pub).

 

 
*       *       *

 

 

Serwer powinien chodzić. Ale nie musi.

 


 
  • Większość błędów wyłapiesz, jeżeli w pierwszej kolejności przetestujesz poprawność konfiguracji poprzez klienta ftp odpalonego na tym samym komputerze, na którym pracuje demon proftpd. Przyjazny, okienkowy klient ftp pod KDE to: -K -SIEĆ -PRZESYŁANIE PLIKÓW- gFTP
     
  • Jeżeli chcesz udostępniać pliki na publicznym koncie ftp dla userów anonymous, a serwer uparcie odmawia współpracy, to w pliku /etc/ftpaccess dodaj słowo anonymous.
     
  • Pamiętaj, by wpisać prawidłowego użytkownika (plik /etc/proftpd.conf) w wierszach:
    User ftp
    Group ftp
    Tutaj mamy użytkownika ftp, ale z każdą dystrybucją lub wersją może być inny. Najprościej ustalisz użytkownika edytując oryginalny (domyślny) plik konfiguracyjny.
     
  • Uwaga: jeżeli nie możesz zobaczyć plików użytkownika ftptipek, sprawdź czy nie zostały zmienione prawa do katalogu /home/ftptipek (powinno być 711 czyli drwx --x --x ; na wszelki wypadek przypominam składnię poleceń jako root: cd /home , ls -la). Sprawdź też, czy nie została wyłączona opcja autostartu proftpd.

    Odrobina wyjaśnień. Wspomniana powyżej "samoczynna" zmiana praw do katalogów w /home/* nastąpi po wybraniu WYSOKIEGO(4) DLA SERWERÓW POZIOMU BEZPIECZEŃSTWA (lub zleceniem msec 4). Zerują się wówczas (między innymi) ustawienia praw wobec newralgicznych katalogów (np. /home/*) oraz przy okazji wyłączany jest autostart niektórych demonów. Więcej na ten temat na stronie o MSEC.
     

  • Może się zdażyć, że widzisz zawartość konta ftp, ale tylko z komputera na którym zainstalowano proftpd, zaś komputery z Internetu nie mogą załadować danych. Należy wówczas skonfigurować firewalla poprzez MANDRAKE CONTROL CENTER (możesz też użyć zlecenia drakfirewall lub pośrednio mcc). Powinno pomóc. Pamiętaj, że konsekwencją ustawienia na nowo FIREWALLa może być zablokowanie podsieci domowej (jeżeli serwer służy także jako brama do Internetu). Wówczas trzeba spokojnie w -MANDRAKE CONTROL CENTER- Sieć i Internet- Współdzielenie Połączenia- Konfiguruj- ponownie skonfigurować udostępnianie (można też użyć zlecenia drakgw lub mcc). Restartuj system.

    Uwagi związane z Mandrake 8.1.
    Dystrybucja ta posiada duży błąd - pod KDE w MANDRAKE CONTROL CENTER samo klikniecie w napis BEZPIECZEŃSTWO może zablokować SDI (nie ma tego problemu w Mandrake 9.x). Co ciekawe, błąd nie zadziała, jeżeli MANDRAKE CONTROL CENTER uruchomisz w KDE ale... z powłoki tekstowej poleceniem mcc. Nie zaszkodzi też zajrzeć do pliku /etc/rc.d/rc.*firewall2.2 (2.4).
     

  • Aby mieć kontrolę kto i kiedy logował się na serwerze ftp - trzeba (jako root) edytować plik: /var/log/secure. Zawiera on przy okazji inne dane np. raporty o czynnościach związanych z administrowaniem użytkownikami (dodawanie i usuwanie). Natomiast w celu sprawdzenia co i kto robił na koncie ftp należy edytować pli /var/log/proftp.log (o ile umieściłeś właściwy wpis w opisanym powyżej pliku /etc/proftpd.conf).

 


 
Osobnym problemem jest przydzielanie miejsca na dysku dla użytkowników mających swoje konta ftp. Można to załatwić na dwa sposoby:

  • Wydzielić dla każdego użytkownika osobną partycję po np. 20MB i restrykcyjnie montować ją. Wskazane ze względu bezpieczeństwa, niestety kłopotliwe, bo trzeba mieć niezagospodarowany obszar na dysku, z którego po dodaniu użytkownika wykroimy partycję i zamontujemy np. /home/antek . Więcej o podziale na partycji i montowaniu tutaj.
  • Zastosować narzędzie quota. Polecam stronkę www.jtz.org.pl/Html/mini/Quota.pl.html . Mam ją też w swoim archiwum.

 


 

Uwagi dotyczące bezpieczeństwa

 

 

Na początku pliku /etc/proftpd.conf umieściłem opcję ServerIdent on "komunikat" . Jest to bardzo ważny parametr. Ukrywa on numer wersji serwera proftpd przed osobami z zewnątrz, utrudniając dobranie exploita potencjalnie mogącego zaatakować serwer.

 

*

 

Jeżeli podczas instalacji systemu byłeś zapobiegliwy i wydzieliłeś osobną partycję na katalog /var/ftp/ to możesz polepszyć stopień bezpieczeństwa plików z katalogu publicznego /var/ftp/pub , modyfikując plik /etc/fstab . W linii /dev/hda10 /var/ftp (...) dopisz ro (tylko do odczytu) , nosuid (bez uprawnień do bitu SUID), noexec (bez prawa uruchamiania plików wykonywalnych). U mnie tak to wygląda:

/dev/hda10 /var/ftp ext3 ro,nosuid,noexec,nodev 1 2

Oczywiście za każdym razem, gdy będziesz chciał coś dodać do katalogu, będziesz musiał zamienić ro na rw (a najlepiej na defaults) i przemontować partycję. Więcej o montowaniu tutaj. Po skopiowaniu plików zmienisz z powrotem ustawienia na restrykcyjne i przemontujesz partycję. Od teraz nawet jeżeli coś przeoczyłeś w pliku proftpd.conf - nic nikt Ci nie skasuje, ani podmieni! Aby coś zrobić włamywacz by musiał jako root zmienić wpis w /etc/fstab i odmontować oraz zamontować na nowo partycję /var/ftp lub... przekonfigurować położenie katalogu domowego, edytując plik /etc/proftpd.conf w wierszu DefaultRoot /var/ftp/pub .

Jako admin bądź czujny. Możesz skupić całą uwagę na zabezpieczeniu plików z konta ftp i zapomnieć, że włamywacz bezczelnie zmieni zawartość plików konfiguracyjnych serwera, a następnie... założy inny (nowy) katalog w dowolnym miejscu np. w /tmp do którego wszyscy mają dostęp. W ten sposób serwer zacznie udostępniać w Internecie nowe, podmienione pliki z nowego katalogu, a stare będą sobie bezużytecznie leżeć w katalogu macierzystym :[ Rozwiązanie tego problemu opisałem na sąsiedniej stronie o BHP.

 

*

 

Poważną luką w bezpieczeństwie serwera ftp jest fakt, że odległy użytkownik loguje się na osobiste konto ftp podając linuksową (shellową) nazwę konta i hasło do konta shellowego. Co oznacza w praktyce? Ano, że jakiś cwaniaczek może łatwo wychwycić (wysnifować) systemową nazwę konta plus hasło do niego (w proftpd dane podczas logowania nie są szyfrowane), a to pierwszy krok do ataku na serwer. Powinieneś w takich okolicznościach radykalnie ograniczyć możliwość uruchomienia procesów i powłok systemowych. Jak to zrobić? Poczytaj tutaj. Wskazane też jest wydzielenie osobnej partycji (montowanej bardzo restrykcyjnie) jako /var/ftp oraz /home/uzytkownik . Wspomniałem o tym powyżej.

 

*

 

Jeżeli użytkownicy kont ftp nie będą potrzebowali dostępu do shella (co jest bardzo dobrym pomysłem), to po utworzeniu usera wykonaj małą korektę ustawień: wpisz im w plikach /etc/passwd oraz /etc/passwd- powłokę /bin/false (zamiast domyślnej /bin/bash). Oczywiście nie zapomnij wpisać wiersza /bin/false w pliku /etc/shells (jeżeli go tam jeszcze nie ma). Takie rozwiązanie uniemożliwi zdalne (i bezpośrednie) zalogowanie na shella, ale jednocześnie udostępni pełnoprawne konto ftp użytkownikwi indywidualnemu. Można też ustawić jako domyślną powłokę /bin/false dla nowych userów - robisz to zmieniając w plik /etc/default/useradd wpis /bin/bash na /bin/false lub/oraz w pliku /etc/adduser.conf wpisując DSHELL=/bin/false

Uwaga: jeżeli dany user będzie miał dostęp do shella poprzez sshd (co jest niebezpiecznym rozwiązaniem), to proponuję rezygnację z ProFTPd i logowanie się na koncie usera poprzez sftp (szyfrowany ftp będący składową serwera OpenSSHd). Oczywiście takie konto będzie tylko dla wtajemniczonych (znających shellowe hasło i nazwę konta). Polecam notatkę ze strony opisującej ssh o sftp.

 

*

 
Jeżeli nie będziesz udostępniać danych na publicznym koncie ftp (dla userów anonymous), to z przyczyn bezpieczeństwa w pliku /etc/ftpaccess usuń słowo anonymous.

 

*

 
W pliku konfiguracyjnym /etc/proftpd.conf zaproponowałem parametr AllowStoreRestart w wersji on (czyli pozwolenie na wznowienie zapisu na serwer, domyslnie off). Jakie są związane z tym zagrożenia? Wyobraź sobie, że jako jedno z wyrafinowanych, ale i brutalnych zabezpieczeń serwera używasz... restart połączenia z Internetem, gdy ktoś niebezpiecznie penetruje Twój komputer. Wywalisz zalogowanego intruza, ale i... znajomych, którzy w tym czasie coś wrzucali na swoje konto ftp. Jeżeli dasz AllowStoreRestart off, to Twoi znajomi będą klnąć. Ty masz jednak wrażliwe serce i wpisałeś on. Niestety, kto ma wrażliwe serce, ten może mieć kłopoty. Jakie? Otóż włamywacze często po udanym przejęciu praw użytkownika, instalują swoje oprogramowanie w sobie wiadomym celu. Po restarcie połączenia... będą mogli dociągnąć brakujący plik (przy opcji off muszą transferować od nowa).

 


 
Otrzymałem pytanie: jak zabezpieczyć serwer przed swobodnym przeglądaniem zawartości dysku przez użytkowników prywatnego konta ftp na Mandrake 9.1. Co dziwne - nie zadziałał wpis DefaultRoot /home/uzytkownik/publiczny w pliku /etc/proftpd.conf . Otórz jest kilka wpisów mających wpływ na bezpieczeństwo serwera:

DefaultRoot /home/uzytkownik/publiczny
IgnoreHidden on
(ukrywający przed gośćmi pliki ukryte).

Ja na razie zrezygnowałem z Mandrake 9.1 (gdyż zawiera zbyt dużo błędów) i wybrałem 9.0 lub 9.2, więc nie mogę zweryfikować tych uwag. Mam jednak radę: zastąp mój domyślny wpis DefaultRoot /home/ftptipek/pubtipek na taki: DefaultRoot ~ lub na jeszcze lepszy: DefaultRoot ~/pubtipek

 


 
Słownik przydatnych terminów:

  • NIS - jest jednym z najprostszych sposobów rozpowszechniania w sieci informacji o użytkowniku , zapisanych w plikach passwd oraz group. Niestety, nie należy do bezpiecznych, gdyż nie szyfruje danych.

    Wybór opcji serwera ProFTPd:

  • Opcje mogą być samodzielnymi wartościami lub zestawem kilku wartości. Pojedynczą wartość zawiera np. CWD, a złożoną z kilku np. ALL.

    • DIRS - zestaw poleceń dotyczących listowania katalogów (zawiera LIST, NLST] [All FTP commands which deal with directory listing. i.e LIST and NLST.]
    • READ - grupa poleceń FTP związanych z czytaniem plików (bez listowania katalogów). Zawiera RETR, STAT. [All FTP commands which deal with file reading (directory listing not included). i.e. RETR, STAT, etc.]
    • WRITE - grupa poleceń radząca sobie z plikiem (zawiera write/creation/deletion) lub katalogiem (zawiera MKD, RMD) [All FTP commands which deal with file or directory write/creation/deletion (MKD and RMD included).]
    • RNFR (ReName FRom), RNTO (ReName TO) - tzw. podwójne zlecenia od klienta do serwera zawierające zmianę nazwy i ścieżkę dostępu. [Sent as a pair by client to rename a directory entry.]
    • STOR (STORe) - z ang. magazyn, czyli prawo do zapisu (magazynowania) nowych plików na serwer.
    • MKD (MaKe Directory) - prawo do tworzenia katalogów.
    • RMD (ReMove Directory) - prawo do usunięcia katalogów.
    • LIST - listowanie zawartości katalogu.
    • DELE (DELEte) - kasowanie.
    • CWD (Change Working Directory) - zmiana katalogu.
    • RETR (RETRieve) - pobieranie plików z serwera do klienta.
    • ALL - wszystkie polecenia FTP (zawiera READ WRITE DIRS).

 


 
Aby zobaczyć komunikat powitalny po udanym zalogowaniu na konto ftp użytkownika np. antek, należy w jego katalogu /home/antek/pub umieścić plik tekstowy welcome.msg i nadać mu prawa root.root 644 . Pamiętaj, że aby ProFTPd mógł go uaktywnić, potrzebny jest wpis DeferWelcome on


Jako ciekawostkę potraktuj dyrektywy: DisplayQuit, DisplayLogin, DisplayFirstChdir. Ih argumentami są pliki textowe, zawierające komunikaty o serwerze, użytkowniku itd.

Przykład takiego pliku:


Informacje o serwerze:
Nazwa serwera: %L
Dostepne miejsce w systemie: %F
E-mail administratora serwera ftp: %E

Informacje u uzytkowniku:
Czas zalogowania: %T
Zalogowany jako: %U
Polaczony z: %R

Informacje na temat polaczen:
Maksymalna ilosc polaczen: %M
Numer Twojego polaczenia: %N

 


 

Istnieje ciekawy, linuksowy klient ftp - wget, który pracuje w konsoli tekstowej i potrafi pobrać dowolny plik poprzez protokoły HTTP oraz FTP. Może także zassać całą witrynę www. Umie wznawiać zerwane połączenia. Przykład wywołania: wget adres.serwer.com.pl/nazwapliku . Jeżeli połączenie z serwerem zostało zerwane do wywołania wgeta trzeba dodać parametr -c . Program wtedy dokończy pobieranie. Aby zapisać na dysku cały serwis internetowy, należy wydać komendę: wget -r -l2 www.adres.pl (parametr -l ustawia głębokość zagłębienia w podkatalogi - domyślnie jest to wartość 5). Inna komenda: wget -r -l3 -A.jpg,.gif http://www.wp.pl/ & zassa pełną witrynę zagłębioną do 3poziomu, z grafikami JPG, GIF. Znak & na końcu zlecenia sygnalizuje, że program wget uruchomi się w tle (podczas pobierania witryny powłoka tekstowa będzie pusta i gotowa do przyjmowania kolejnych zleceń). Uwaga: program wget uruchomiony z flagą -b będzie działał do momentu zakończenia działana, nawet po wylogowaniu usera z powłoki. Inny klient to gftp, który potrafi pracować w ładnych okienkach np. KDE oraz zwykłej powłoce tekstowej.

 

*

 

Na zakończenie ciekawostka związana z montowaniem odległego katalogu (z serwera ftp) na linuksowym, klienckim komputerze z wykorzystaniem zlecenia lufsmount. Niestety, Mandrake/Mandriva nie udostępnia na razie Kernela automatycznie skonfigurowanego pod obsługę systemu plików ftpfs. Z obecnie znanych (2006) mi Linuksów, tylko SystemRescureCD umie jako klient zamontować odległy katalog. Uruchom więc na klienckim komputerze Linuksa SystemRescureCD. Utwórz w nim katalog np. /mnt/ftp . Oczywiście zapewnij mu prawo do odczytu dla danego usera (czyli odpowiednie prawa dla katalogu /mnt oraz /mnt/ftp) i wydaj zlecenie:

lufsmount ftpfs://login:haslo@IPkomputeraftp/katalog /mnt/ftp

i od teraz wystarczy na naszym linuksowym, klienckim komputerze skopiować coś do katalogu /mnt/ftp, a pliki... znajdą się na odległym serwerze ftp, we wskazanym katalogu.

Wyjaśnienia:

lufsmount ftpfs: - uruchomienie zlecenia połączenia klienta ftp z odległym serwerem ProFTPd.
login:haslo@IPkomputeraftp/katalog - dane z odległego konta serwera ProFTPd.
/mnt/ftp - ten katalog (na komputerze-kliencie ftp) jest podmontowany do odległego katalogu serwera ftp. Pliki wkładane do niego będą automatycznie przerzucane na odległe konto ftp.

 

 
twarogal@wp.pl

Uwaga: z powodu namnożenia się różnych złodziejskich witryn www, które kopiują moje strony i umieszczają je u siebie wraz z komercyjnymi reklamami (na których zarabiają) informuję, że wszelkie prawa są zastrzeżone.

Uwaga. Aby uniknąć zasysania całej witryny gorzow-wlkp.pl/linux za pomocą programów typu TeleportPro, WebCopier itd. informuję, że udostępniłem spakowaną wersję (w formacie RAR).

 
 

 

 

Witryna była dostępna pod adresami: strony.wp.pl/wp/twarogal , strony.wp.pl/wp/linuxtwarka , twarogal.republika.pl , klub.chip.pl/twarogal oraz gorzow-wlkp.net (w latach 2003/04).

 

 

gorzow-wlkp.pl

Informacje o odwiedzających są rejestrowane i publicznie udostępniane na pod adresem: http://gorzow-wlkp.pl/licznik/