Jak skonfigurować vsftpd dla użytkownika'Katalog s na Ubuntu 18.04

wprowadzenie

FTP, skrót od File Transfer Protocol, jest protokołem sieciowym, który był kiedyś powszechnie używany do przenoszenia plików między Klientem a serwerem. Od tego czasu został zastąpiony przez szybsze, bezpieczniejsze i wygodniejsze sposoby dostarczania plików. Wielu zwykłych użytkowników Internetu oczekuje pobierania bezpośrednio z przeglądarki internetowej za pomocą https, a użytkownicy wiersza poleceń częściej korzystają z bezpiecznych protokołów, takich jak scp lub SFTP.,

FTP jest nadal używany do obsługi starszych aplikacji i przepływów pracy o bardzo specyficznych potrzebach. Jeśli masz wybór, jakiego protokołu użyć, rozważ zbadanie bardziej nowoczesnych opcji. Gdy jednak potrzebujesz FTP, vsftpd jest doskonałym wyborem. Zoptymalizowany pod kątem bezpieczeństwa, wydajności i stabilności, vsftpd oferuje silną ochronę przed wieloma problemami bezpieczeństwa występującymi na innych serwerach FTP i jest domyślnym rozwiązaniem dla wielu dystrybucji Linuksa.,

w tym samouczku skonfigurujesz vsftpd tak, aby umożliwić użytkownikowi przesyłanie plików do jego katalogu domowego za pomocą FTP z poświadczeniami logowania zabezpieczonymi przez SSL/TLS.

wymagania wstępne

aby skorzystać z tego samouczka, potrzebujesz:

  • serwera Ubuntu 18.04 i użytkownika non-root z uprawnieniami sudo: możesz dowiedzieć się więcej o tym, jak skonfigurować użytkownika z tymi uprawnieniami w naszym wstępnym poradniku Konfiguracja serwera z Ubuntu 18.04.,

Krok 1 — Instalacja vsftpd

zacznijmy od aktualizacji naszej listy pakietów i zainstalowania demona vsftpd:

  • sudo apt update
  • sudo apt install vsftpd

Po zakończeniu instalacji skopiujmy plik konfiguracyjny, abyśmy mogli zacząć od pustej konfiguracji, zachowując oryginał jako kopię zapasową:

  • sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.orig

z kopii zapasowej konfiguracji w miejscu, jesteśmy gotowi do skonfigurowania zapory.

Krok 2 — otwarcie zapory

sprawdźmy stan zapory, aby sprawdzić, czy jest włączona., Jeśli tak, upewnimy się, że ruch FTP jest dozwolony, aby reguły zapory nie blokowały naszych testów.

Sprawdź stan zapory:

  • sudo ufw status

w tym przypadku tylko SSH jest dozwolone poprzez:

Output
Status: activeTo Action From-- ------ ----OpenSSH ALLOW AnywhereOpenSSH (v6) ALLOW Anywhere (v6)

możesz mieć inne reguły lub w ogóle nie masz reguł zapory. Ponieważ w tym przypadku dozwolony jest tylko ruch SSH, musimy dodać reguły ruchu FTP.,

otwórzmy porty 20 I 21 dla FTP, port 990 dla gdy włączymy TLS, i porty 40000-50000 dla zakresu pasywnych portów planujemy ustawić w pliku konfiguracyjnym:

  • sudo ufw allow 20/tcp
  • sudo ufw allow 21/tcp
  • sudo ufw allow 990/tcp
  • sudo ufw allow 40000:50000/tcp
  • sudo ufw status

nasze reguły Firewalla powinny teraz wyglądać tak:

Po zainstalowaniu vsftpd I otwarciu niezbędnych portów przejdźmy do utworzenia dedykowanego użytkownika FTP.,

Krok 3 — Przygotowanie katalogu użytkownika

utworzymy dedykowanego użytkownika FTP, ale możesz już mieć użytkownika potrzebującego dostępu FTP. Zadbamy o zachowanie dostępu istniejącego użytkownika do jego danych w poniższych instrukcjach. Mimo to zalecamy rozpoczęcie od nowego Użytkownika do momentu skonfigurowania i przetestowania konfiguracji.

najpierw dodaj użytkownika testowego:

  • sudo adduser sammy

Przypisz hasło po wyświetleniu monitu. Możesz nacisnąć ENTER poprzez inne monity.,

FTP jest na ogół bezpieczniejszy, gdy użytkownicy są ograniczeni do określonego katalogu. vsftpd Gdy chroot jest włączona dla użytkowników lokalnych, są oni domyślnie ograniczeni do ich katalogu domowego. Jednak ze względu na sposób, w jaki vsftpd zabezpiecza katalog, użytkownik nie może go zapisywać. Jest to dobre dla nowego użytkownika, który powinien łączyć się tylko przez FTP, ale istniejący użytkownik może potrzebować zapisu do swojego folderu domowego, jeśli ma również dostęp do powłoki.,

w tym przykładzie, zamiast usuwać uprawnienia zapisu z katalogu domowego, utwórzmy katalog ftp, który będzie służył jako katalog chrootI katalog do zapisu files do przechowywania rzeczywistych plików.,misje:

  • sudo ls -la /home/sammy/ftp
Output
total 84 dr-xr-xr-x 2 nobody nogroup 4096 Aug 24 21:29 .4 drwxr-xr-x 3 sammy sammy 4096 Aug 24 21:29 ..

następnie utwórz katalog do przesyłania plików i przypisaj własność użytkownikowi:

  • sudo mkdir /home/sammy/ftp/files
  • sudo chown sammy:sammy /home/sammy/ftp/files

sprawdzenie uprawnień na ftp katalog powinien zwracać następujące wartości:

  • sudo ls -la /home/sammy/ftp

na koniec dodajmy test.txt plik do użycia podczas testowania:

  • echo "vsftpd test file" | sudo tee /home/sammy/ftp/files/test.txt

teraz, gdy zabezpieczyliśmy ftp katalogu i umożliwił użytkownikowi dostęp do katalogu files, zmodyfikujmy naszą konfigurację.,

Krok 4 — Konfiguracja dostępu FTP

planujemy umożliwić pojedynczemu użytkownikowi z lokalnym kontem shell łączenie się z FTP. Dwa kluczowe ustawienia są już ustawione w vsftpd.conf. Zacznij od otwarcia pliku konfiguracyjnego, aby sprawdzić, czy ustawienia w konfiguracji są zgodne z poniższymi:

  • sudo nano /etc/vsftpd.conf
/etc/vsftpd.conf

następnie umożliwimy użytkownikowi przesyłanie plików, wyróżniając write_enable ustawienie:

/etc/vsftpd.,conf
. . .write_enable=YES. . .

odkomentujemy również chroot aby uniemożliwić użytkownikowi połączonemu z FTP Dostęp do plików lub poleceń spoza drzewa katalogów:

/etc/vsftpd.conf
. . .chroot_local_user=YES. . .

dodajmy równieżuser_sub_tokenaby wstawić nazwę Użytkownika do naszej ścieżkilocal_root directory aby nasza konfiguracja działała dla tego użytkownika i wszystkich dodatkowych przyszłych użytkowników. Dodaj te ustawienia w dowolnym miejscu w pliku:

/etc/vsftpd.,conf
. . .user_sub_token=$USERlocal_root=/home/$USER/ftp

ograniczmy również zakres portów, które mogą być używane dla pasywnego FTP, aby upewnić się, że dostępna jest wystarczająca liczba połączeń:

/etc/vsftpd.conf
. . .pasv_min_port=40000pasv_max_port=50000

Uwaga: w Kroku 2 otworzyliśmy porty ustawione tutaj dla pasywnego zakresu portów. Jeśli zmienisz wartości, zaktualizuj ustawienia zapory.

aby umożliwić dostęp FTP dla każdego przypadku, ustawmy konfigurację tak, aby użytkownicy mieli dostęp tylko wtedy, gdy są wyraźnie dodawani do listy, a nie domyślnie:

/etc/vsftpd.,conf
. . .userlist_enable=YESuserlist_file=/etc/vsftpd.userlistuserlist_deny=NO

userlist_denywłącza logikę: gdy jest ustawiona naYES, użytkownicy na liście nie mają dostępu FTP. Gdy jest ustawiona na NO, dostęp mają tylko użytkownicy z listy.

Kiedy skończysz wprowadzać zmiany, zapisz plik i zamknij Edytor.

na koniec dodajmy naszego użytkownika do /etc/vsftpd.userlist., Użyj znacznika -a aby dołączyć do pliku:

  • echo "sammy" | sudo tee -a /etc/vsftpd.userlist

sprawdź, czy został dodany zgodnie z oczekiwaniami:

  • cat /etc/vsftpd.userlist
Output
sammy

Uruchom ponownie demona, aby załaduj zmiany konfiguracji:

  • sudo systemctl restart vsftpd

Po skonfigurowaniu przejdźmy do testowania dostępu FTP.

Krok 5 — testowanie dostępu FTP

skonfigurowaliśmy serwer tak, aby zezwalał tylko użytkownikowisammy na łączenie się przez FTP. Upewnijmy się, że to działa zgodnie z oczekiwaniami.,

użytkownicy anonimowi nie powinni się łączyć: wyłączyliśmy dostęp anonimowy. Przetestujmy to, próbując połączyć się anonimowo. Jeśli nasza konfiguracja jest poprawnie skonfigurowana, anonimowi użytkownicy powinni otrzymać odmowę zgody. Otwórz inne okno terminala i uruchom następujące polecenie. Pamiętaj, aby zastąpić 203.0.113.0 publicznym adresem IP serwera:

  • ftp -p 203.0.113.0

Zamknij połączenie:

  • bye

użytkownicy inni niż sammy nie powinni się połączyć: następnie spróbujmy połączyć się jako nasz użytkownik sudo.,> powinien być w stanie łączyć, odczytywać i zapisywać pliki: upewnijmy się, że nasz wyznaczony użytkownik może się połączyć:

  • ftp -p 203.0.113.0

przejdźmy do katalogu files I skorzystajmy z polecenia get aby przenieść utworzony wcześniej plik testowy do naszej lokalnej maszyny:

  • cd files
  • get test.txt

następnie prześlij plik o nowej nazwie, aby przetestować uprawnienia zapisu:

  • put test.txt upload.txt

Zamknij połączenie:

  • bye

teraz, gdy przetestowaliśmy naszą konfigurację, podejmijmy kroki, aby jeszcze bardziej zabezpieczyć nasz serwer.,

Krok 6 — zabezpieczanie transakcji

ponieważ FTP nie szyfruje żadnych przesyłanych danych, w tym danych uwierzytelniających użytkownika, włączymy TLS / SSL, aby zapewnić takie szyfrowanie. Pierwszym krokiem jest utworzenie certyfikatów SSL do użytku z vsftpd.

użyjopenssl, aby utworzyć nowy certyfikat i Użyj flagi-days, aby był ważny przez jeden rok. W tym samym poleceniu dodamy prywatny 2048-bitowy klucz RSA., Ustawiając flagi -keyout I -out na tę samą wartość, klucz prywatny i certyfikat będą znajdować się w tym samym pliku:

  • sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem

zostaniesz poproszony o podanie informacji adresowych dla certyfikatu., Zastąp swoje własne informacje podświetlonymi wartościami poniżej:

aby uzyskać bardziej szczegółowe informacje o flagach certyfikatów, zobacz OpenSSL Essentials: praca z certyfikatami SSL, kluczami prywatnymi i CSR

Po utworzeniu certyfikatów otwórz plik konfiguracyjny vsftpd ponownie:

  • sudo nano /etc/vsftpd.conf

w dolnej części pliku zobaczysz dwie linie które zaczynają się od rsa_. Skomentuj je tak, aby wyglądały tak:

/etc/vsftpd.,conf
. . .# rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem# rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key. . .

Poniżej dodaj następujące linie, które wskazują na certyfikat i klucz prywatny, który właśnie stworzyliśmy:

/etc/vsftpd.conf
. . .rsa_cert_file=/etc/ssl/private/vsftpd.pemrsa_private_key_file=/etc/ssl/private/vsftpd.pem. . .

następnie wymusimy użycie protokołu SSL, co uniemożliwi klientom, którzy nie mogą poradzić sobie z TLS, łączenie się. Jest to konieczne, aby upewnić się, że cały ruch jest szyfrowany, ale może to zmusić użytkownika FTP do zmiany klientów. Zmiana ssl_enablena YES:

/etc/vsftpd.,conf
. . .ssl_enable=YES. . .

następnie dodaj następujące linie, aby wyraźnie zablokować anonimowe połączenia przez SSL i wymagać SSL zarówno do transferu danych, jak i logowania:

/etc/vsftpd.conf
. . .allow_anon_ssl=NOforce_local_data_ssl=YESforce_local_logins_ssl=YES. . .

następnie skonfiguruj serwer tak, aby używał protokołu TLS, preferowanego następcy protokołu SSL, dodając następujące linie:

/etc/vsftpd.conf
. . .ssl_tlsv1=YESssl_sslv2=NOssl_sslv3=NO. . .

na koniec dodamy jeszcze dwie opcje. Po pierwsze, nie będziemy wymagać ponownego użycia SSL, ponieważ może złamać wiele klientów FTP., Będziemy wymagać pakietów szyfrów szyfrujących „high”, które obecnie oznaczają klucze o długości równej lub większej niż 128 bitów:

/etc/vsftpd.conf
. . .require_ssl_reuse=NOssl_ciphers=HIGH. . .

gotowa sekcja plików powinna wyglądać tak:

/etc / vsftpd.conf

Po zakończeniu zapisz i zamknij plik.

Uruchom ponownie serwer, aby zmiany weszły w życie:

  • sudo systemctl restart vsftpd

w tym momencie nie będziemy już mogli połączyć się z niebezpiecznym klientem wiersza poleceń., Jeśli spróbujemy, zobaczymy coś w stylu:

następnie sprawdźmy, czy możemy połączyć się za pomocą klienta obsługującego TLS.

Krok 7 — testowanie TLS za pomocą FileZilla

większość nowoczesnych klientów FTP można skonfigurować tak, aby używały szyfrowania TLS. Zademonstrujemy, jak połączyć się z Filezillą ze względu na obsługę wielu platform. Zapoznaj się z dokumentacją dla innych klientów.

po pierwszym otwarciu FileZilla znajdź ikonę Menedżera witryny tuż nad Słowem Host, ikonę po lewej stronie w górnym wierszu. Kliknij go:

otworzy się nowe okno., Kliknij przycisk Nowa strona w prawym dolnym rogu:


Pod My Sites pojawi się nowa ikona ze słowami nowa strona. Możesz go nazwać teraz lub wrócić później i użyć przycisku Zmień nazwę.

wypełnij pole Host z nazwą lub adresem IP. W menu rozwijanym Szyfrowanie wybierz pozycję Wymagaj jawnego protokołu FTP przez TLS.

Dla typu logowania wybierz opcję zapytaj o hasło. Wypełnij swój użytkownik FTP w polu użytkownik:

kliknij Połącz na dole interfejsu., Zostaniesz zapytany o hasło użytkownika:

kliknij OK, aby się połączyć. Teraz powinieneś być połączony z serwerem za pomocą szyfrowania TLS / SSL.,po zaakceptowaniu certyfikatu kliknij dwukrotnie folderfilesI przeciągnijupload.txtpo lewej stronie, aby potwierdzić możliwość pobierania plików:

Kiedy to zrobisz, kliknij prawym przyciskiem myszy na lokalnej kopii, zmień jej nazwę naupload-tls.txtI przeciągnij ją z powrotem na serwer, aby potwierdzić, że możesz przesłać pliki:

teraz potwierdziłeś, że możesz bezpiecznie i pomyślnie przesyłaj pliki z włączoną obsługą SSL/TLS.,

Krok 8 — wyłączenie dostępu do powłoki (Opcjonalnie)

Jeśli nie możesz korzystać z TLS z powodu wymagań klienta, możesz uzyskać pewne bezpieczeństwo, wyłączając możliwość logowania użytkownika FTP w dowolny inny sposób. Jednym ze stosunkowo prostych sposobów, aby temu zapobiec, jest utworzenie niestandardowej powłoki. Nie zapewni to żadnego szyfrowania, ale ograniczy dostęp do zagrożonego konta do plików dostępnych przez FTP.,

najpierw otwórz plik o nazwie ftponly w katalogu bin:

  • sudo nano /bin/ftponly

Dodaj wiadomość informującą użytkownika, dlaczego nie może się zalogować:

/bin/ftponly
#!/bin/shecho "This account is limited to FTP access only."

zapisz plik i zamknij Edytor.,Zmień uprawnienia, aby plik był wykonywalny:

  • sudo chmod a+x /bin/ftponly

Otwórz listę ważnych powłok:

  • sudo nano /etc/shells

na dole dodaj:

/etc/Shell
. . ./bin/ftponly

zaktualizuj powłokę użytkownika za pomocą następującego polecenia:

  • sudo usermod sammy -s /bin/ftponly

teraz spróbuj zalogować się do serwera jako sammy:

powinieneś zobaczyć coś takiego:

Output
This account is limited to FTP access only.Connection to 203.0.113.0 closed.

to potwierdza, że użytkownik nie może już ssh do serwera i jest ograniczony tylko do dostępu FTP.,

podsumowanie

w tym tutorialu omówiliśmy konfigurację FTP dla użytkowników z kontem lokalnym. Jeśli potrzebujesz użyć zewnętrznego źródła uwierzytelniania, warto przyjrzeć się obsłudze vsftpddla użytkowników wirtualnych. Oferuje to bogaty zestaw opcji dzięki użyciu Pam, wtykowych modułów uwierzytelniania i jest dobrym wyborem, jeśli zarządzasz użytkownikami w innym systemie, takim jak LDAP lub Kerberos.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *