ProFTPD - serwer ftp na Linuxa (wirtualni użytkownicy)

  • Data: 2011

Proftpd jest jednym z najpopularniejszych serwerów ftp dla Linuxa. Łatwy w konfiguracji, dość powiedzieć, że od razu po instalacji można z niego korzystać.
UWAGA:Po zainstalowaniu proftpd uzyskujemy pełny dostęp do plików i katalogów na serwerze!!! Dlatego odradzałbym pozostawienie proftpd w domyślnej konfiguracji.
Przed omówieniem podstawowej konfiguracji musimy sobie zadać pytanie: "kogo ma obsługiwać nasz serwer plików i jakie zasoby udostępniać?"
Mamy do wyboru:

  • użytkownicy systemowi - użytkownicy mający dostęp do kont shell na naszym serwerze (zaufani)
  • użytkownicy ftp - użytkownicy posiadający tylko dostęp do konta na ftp (mniej zaufani)
  • użytkownicy anonimowi - użytkownicy posiadający dostęp to tzw. anonymous FTP, czyli przeważnie mogący ściągać pliki udostępnione przez administratora bez podawania loginu ani hasła
Domyślna konfiguracja jest zorientowana na użytkowników systemowych i na razie skupię się na niej.
Edytujemy plik proftpd.conf:

# Dołączamy konfigi ewentualnie aktywowanych modułów.
Include /etc/proftpd/modules.conf

# Tryb pracy serwera, uruchamiamy jako samodzielny proces.
ServerType                      standalone
# Określamy konfigurację jako domyślną
DefaultServer                   on

# Jesli nie używamy IPv6.
UseIPv6                         off

# Te 3 opcje znacznie skracają czas logowania.
UseReverseDNS                   off
IdentLookups                    off
ServerIdent                     off

# Określamy nazwę naszego serwera, nie podajemy jego nazwy ani wersji.
ServerName                      "ftp by ulos.pl"

# Komunikat powitalny.
DisplayLogin                    welcome.msg

# Zezwalamy na komunikat powitalny dopiero po zalogowaniu.
DeferWelcome                    on

MultilineRFC2228                on

# Zezwalamy na wyświetlanie dowiązań.
ShowSymlinks                    on

# Czas w jakim zostanie przerwane połączenie z serwerem.
TimeoutNoTransfer               600
TimeoutStalled                  600
TimeoutIdle                     1200


DisplayChdir                    .message true

DenyFilter                      \*.*/

# Blokada logowania użytkownikowi root.
RootLogin                       off

# Uwięzienie użytkownika w wyznaczonym katalogu, z którego nie będzie mógł się wydostać.
# znak ~ katalog domowy w systemie Linux.
DefaultRoot                     ~

# Opcje do listowania plików w trybie binarnym:
# "-a"="ls -a" , "+a"=blokada parametru a czyli plików ukrytych(z kropką).
ListOptions "+a"

# Sprawdzamy czy dany użytkownik, który się loguje 
# posiada przypisaną w /etc/shells powłokę (szybka metoda do zablokowania).
RequireValidShell               on

# Port na którym nasłuchuje proftpd.
Port                            21

# Konfiguracja portów trybu pasywnego używanego przez przeglądarki (ftp://host.pl).
# PassivePorts                  49152 65534

# Użyteczna opcja jeśli nasz komputer stoi za NAT-em.
# MasqueradeAddress             1.2.3.4

# This is useful for masquerading address with dynamic IPs:
# refresh any configured MasqueradeAddress directives every 8 hours

# DynMasqRefresh 28800


# Maksymalna liczba procesów demona FTP. 
# Dzięki tej dyrektywie możemy ustrzec się przed atakami typu DoS. 
MaxInstances                    30

# Użytkownik i grupa do których będzie należał proces serwera.
User                            proftpd
Group                           nogroup

# Ustawienie prawa dostępu właściciela do modyfikacji pliku i katalogów.
# 022 => 755 , 077 => 700 , 002 =>  775
Umask                           022  022

# Pozwolenie na nadpisywanie plików.
AllowOverwrite                  on

# Konfiguracja logów.
TransferLog /var/log/proftpd/xferlog
SystemLog   /var/log/proftpd/proftpd.log

Oczywiście po zmianie w pliku proftpd.conf restartujemy serwer.

Jest to przykład podstawowej konfiguracji proftpd z zachowaniem pewnych norm bezpieczęństwa dla użytkowników systemowych.
Należy wspomnień o jeszcze jednej istotnej sprawie, protokół ftp przesyła hasła i loginy w postaci niezaszyfrowanej , jako tzw.plain text co daje możliwość podsłuchania tych dość ważnych informacji.

Teraz zajmiemy się wirtualnymi użytkownikami, którzy będą tylko posiadali konto ftp.

  • Pierwszym krokiem będzie stworzenie katalogu dla wirtualnych użytkowników i nadanie mu odpowiednich praw.
  • mkdir /home/ftp
    chown proftpd:nobody /home/ftp
    chmod 751 /home/ftp
  • Tworzenie użytkowników realizujemy za pomocą narzędzia ftpasswd:
  • ftpasswd --passwd --file /etc/proftpd/ftpd.passwd --name nazwa_usera  --home /home/ftp/nazwa_katalogu -p  --uid id_usera_ftp  --gid id_grupy_ftp --shell /bin/false

    gdzie: id_usera_ftp i id_grupy_ftp są to z pliku proftpd.conf dyrektywy: User i Group
    Możemy się posłużyć prostym skryptem który uwolni nas od żmudnego pisania tylu parametrów:
  • mcedit ftpcreate.sh
  • 
    #!/bin/sh
    if [ $# -lt 2 ] ; then
    echo "podaj jako pierwszy parametr nazwe uzytkownika, jako drugi parametr jego folder"
    else
    ftpasswd --passwd --file /etc/proftpd/.ftpd.passwd --name $1  --home /home/ftp/$2 -p  --uid 106  --gid 65534 --shell /bin/false
    mkdir -p /home/ftp/$2
    chown -R proftpd:nogroup /home/ftp/$2
    chmod 751 /home/ftp/$2
    fi
    
    

    Nadajemy odpowiednie uprawnienia: chmod 700 ftpcreate.sh Korzystamy w następujący sposób: ./ftpcreate.sh nazwa_użytkownika jego_katalog, po czym padnie pytanie o hasło...
    Pamiętajmy również o modyfikacji uprawnień pliku ftpd.passwd: chmod 600 .ftpd.passwd
  • Następnie trzeba poddać lekkim modyfikacją główny plik konfiguracyjny proftpd.conf
  • Dodajemy ścieżkę do pliku z użytkownikami i hasłami, w naszym przypadku: AuthUserFile /etc/proftpd/ftpd.passwd
    Zmieniamy dyrektywę: RequireValidShell on na RequireValidShell off

W tym momencie serwer obsługuje użytkowników zarówno wirtualnych jak i systemowych.

Powrót »