Strona główna BSD FTP z obsługą LDAP

FTP z obsługą LDAP

przez CoreBlog

We FreeBSD można znaleźć kilka serwerów ftp wspierających LDAP. Są nimi na przykład proftpd i pure-ftpd. Osobiście korzystam z pure-ftpd dlatego w oparciu o to oprogramowanie opiszę proces uwierzytelniania użytkowników przy dostępie do tej usługi.

Korzystając z mechanizmu portów instalujemy serwer pure-ftpd:

cd /usr/ports/ftp/pure-ftpd
make install clean

Przy wyborze opcji wybieramy LDAP – wsparcie dla kont użytkowników przechowywanych w katalogach LDAP. Dodatkowo proponuję wcześniej (żeby potem nie przekompilowywać) włączyć opcję THROTTLING.

Przejdźmy do konfiguracji serwera. Na konfigurację składają się 2 pliki – /usr/local/etc/pure-ftpd.conf oraz pureftpd-ldap.conf. Pierwszy z nich odpowiada za konfigurację samej usługi, w drugim podajemy parametry do połączenia z katalogiem LDAP. Zacznijmy od drugiego. Przykładowa konfiguracja wygląda tak:

LDAPServer localhost
LDAPPort   389
LDAPBaseDN ou=people,dc=firma,dc=bogus
LDAPBindDN cn=admin,dc=firma,dc=bogus
LDAPBindPW password
LDAPAuthMethod BIND

Trzy pierwsze linijki wystarczą aby pure-ftpd mógł autoryzować użytkowników. Podajemy w nich kolejno adres serwera LDAP, port (standardowo 389), oraz DN, w którym serwer będzie szukał kont użytkowników. Konfiguracja LDAPBindDN oraz LDAPBindPW zależy od ustawień naszego serwera LDAP. Jeśli nie mamy ustawionych ACL’i, a użytkownik anonimowy ma prawo do przeglądania tej części drzewa LDAP, możemy te linijki pominąć. LDAPAuthMethod – standartowo ustawione jest na BIND, jeśli jednak korzystamy z uprzywilejowanego kota dostępu do LDAP ustawmy PASSWORD.

W pliku /usr/local/etc/pure-ftpd.conf konfigurujemy sam serwer ftp. Na tą chwilę pominę samą konfigurację i skupię się tylko na opcjach związanych z LDAP. W pliku konfiguracyjnym musi znaleźć się poniższy wpis:

LDAPConfigFile /usr/local/etc/pureftpd-ldap.conf

Z tych istotniejszych dla mnie opcji (nie związanych z LDAP) są jeszcze:

ChrootEveryone  no
TrustedGID      100

Powoduje to “zamknięcie” użytkownika w jego katalogu domowym, a wiec zabezpieczamy się przed tym, aby użytkownik nie szperał nam po serwerze. W przypadku gdy użytkownik należy do grupy TrustedGID (właściwie do grupy, której gid podajemy w tym parametrze), będzie miał prawo wyjść poza swój katalog domowy. Moim zdaniem warto też dodać opcję CreateHomeDir yes, która w przypadku braku, automatycznie założy katalog domowy użytkownika.

W tej chwili możemy uruchomić serwer ftp:

/usr/local/etc/rc.d/pure-ftpd start

W naszym katalogu LDAP mamy założone konto użytkownika test. Używając dowolnego klienta ftp, spróbujmy się połączyć z serwerem. Mam nadzieję, że zadziałało.

Rozszerzamy możliwości.

W katalogu /usr/local/share/doc/pure-ftpd znajdziemy plik pureftpd.schema. Zawiera on schemat dla LDAP, dzięki któremu będziemy mogli do konta użytkownika dodać kolejne atrybuty związane z pure-ftpd, takie jak status, quota, ograniczenia prędkości czy ratio. Skopiujmy ten plik do katalogu /usr/local/etc/openldap/schema. Następnie dodajmy do pliku /usr/local/etc/openldap/slapd.conf zapis:

include  /usr/local/etc/openldap/schema/pureftpd.schema

oraz zrestartujmy serwer LDAP:

/usr/local/etc/rc.d/slapd restart

W tym momencie wpis użytkownika możemy rozszerzyć o kolejną objectClass’ę:

objectClass: PureFTPdUser

oraz opcjonalne atrybuty:

FTPStatus: enabled
FTPQuotaFiles: 50
FTPQuotaMBytes: 10
FTPDownloadBandwidth: 50
FTPUploadBandwidth: 50
FTPDownloadRatio: 5
FTPUploadRatio: 1

Po krótce wyjaśnię za co one odpowiadają:

FtpStatus może przyjąć wartość ‘enabled’ lub każdą inną (ale dla czytelności przyjmijmy ‘disabled’). Jeśli to pole będzie ustawione na cokolwiek innego niż ‘enabled’ użytkownik nie otrzyma dostępu do serwera ftp. Jeśli ten atrybut nie będzie istniał, użytkownik będzie mógł się normalnie zalogować do serwera. FTPQuotaFiles oraz FTPQuotaMbytes określają ile plików użytkownik może przechowywać na serwerze oraz maksymalną wielkość (w megabajtach) plików. FTPDownloadBandwidth oraz FTPUploadBandwidth określają (w kilobajtach/sekundę) prędkość z jaką użytkownik może pobierać lub wysyłać na serwer pliki. FTPDownloadRatio oraz FTPUploadRatio określają ratio dla użytkownika (ktoś jeszcze z tego korzysta?). Możliwe jest jeszcze ustawienie FTPuid oraz FTPgid, które nadpisują wartość uidNumber oraz gidNumber użytkonika, co pozwala na inne mapowanie numerów uid/gid dla serwera ftp oraz innych usług.

Powiązane artykuły

Napisz komentarz