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 pokażemy, jak skonfigurować vsftpd, 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 16.04 z użytkownikiem Nie-root zsudo przywileje: możesz dowiedzieć się więcej o tym, jak skonfigurować użytkownika z tymi uprawnieniami w naszym wstępnym poradniku konfiguracji serwera z Ubuntu 16.04.

Po zainstalowaniu serwera Ubuntu możesz zacząć.,

Krok 1 — Instalacja vsftpd

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

  • sudo apt-get update
  • sudo apt-get install vsftpd

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

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

dzięki kopii zapasowej konfiguracji jesteśmy gotowi skonfigurować zaporę sieciową.

Krok 2 — otwarcie zapory

sprawdzimy stan zapory, aby sprawdzić, czy jest włączona., Jeśli tak, upewnimy się, że ruch FTP jest dozwolony, więc nie napotkasz reguł zapory blokujących cię, gdy przyjdzie czas na test.

  • 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 sieciowej. Ponieważ tylko ssh ruch jest w tym przypadku dozwolony, musimy dodać reguły ruchu FTP.,

będziemy musieli otworzyć porty 20 i 21 dla FTP, port 990 dla później, gdy włączymy TLS, i porty 40000-50000 dla zakresu pasywnych portów, które 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

teraz nasze reguły zapory wyglądają następująco:

z vsftpd zainstalowane i otwarte niezbędne porty, jesteśmy gotowi przejść do następnego kroku.

Krok 3-Przygotowanie katalogu użytkownika

w tym samouczku utworzymy użytkownika, ale być może masz już 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 dodamy użytkownika testowego:

  • sudo adduser sammy

Przypisz hasło po wyświetleniu monitu i możesz nacisnąć „ENTER” w innych monitach.

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, utworzymy katalog ftp, który będzie służył jako katalog chroot I katalog do zapisu files do przechowywania rzeczywistych plików.,33″>

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 utworzymy katalog, w którym można przesyłać pliki i przypisać własność użytkownikowi:

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

sprawdzanie uprawnień w katalogu files powinno zwracać następujące wartości:

  • sudo ls -la /home/sammy/ftp

wreszcie dodamy plik test.txt do użycia podczas późniejszego testu:

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

teraz, gdy zabezpieczyliśmy katalog ftp i umożliwiliśmy użytkownikowi dostęp do katalogu files katalog, zwrócimy naszą uwagę na 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 będziemy musieli zmienić niektóre wartości w pliku. Aby umożliwić użytkownikowi przesyłanie plików, odkomentujemy ustawienie write_enable tak, że mamy:

/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. . .

dodamyuser_sub_tokenaby wstawić nazwę Użytkownika do naszej ścieżkilocal_root directory aby nasza konfiguracja działała dla tego użytkownika i przyszłych użytkowników, którzy mogą zostać dodani.

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

ograniczymy 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: wstępnie otworzyliśmy porty, które ustawiliśmy tutaj dla pasywnego zakresu portów. Jeśli zmienisz wartości, zaktualizuj ustawienia zapory.

ponieważ planujemy zezwalać na dostęp FTP tylko indywidualnie, skonfigurujemy konfigurację tak, aby dostęp był udzielany użytkownikowi tylko wtedy, gdy zostanie on wyraźnie dodany do listy, a nie domyślnie:

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

userlist_deny włącza logikę. Gdy jest ustawiona na „tak”, użytkownicy na liście nie mają dostępu do FTP. Gdy jest ustawiona na „nie”, dostęp mają tylko użytkownicy z listy. Gdy skończysz wprowadzać zmiany, Zapisz i zamknij plik.

na koniec utworzymy i dodamy naszego użytkownika do pliku., Używamy znacznika -a aby dołączyć do pliku:

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

dwukrotnie sprawdź, czy został dodany zgodnie z oczekiwaniami:

cat /etc/vsftpd.userlist
Output
sammy

Uruchom ponownie plik Demon do załadowania zmian konfiguracji:

  • sudo systemctl restart vsftpd

teraz jesteśmy gotowi do testów.

Krok 5 — testowanie dostępu FTP

skonfigurowaliśmy serwer tak, aby zezwalał tylko użytkownikowisammy na łączenie się przez FTP. Upewnijmy się, że tak jest.

użytkownicy anonimowi nie powinni się łączyć: wyłączyliśmy dostęp anonimowy., Tutaj przetestujemy to, próbując połączyć się anonimowo. Jeśli zrobiliśmy to poprawnie, anonimowi użytkownicy powinni mieć odmowę uprawnień:

  • ftp -p 203.0.113.0

Zamknij połączenie:

  • bye

użytkownicy inni niż sammy powinni nie łączyć się: następnie spróbujemy połączyć się jako nasz sudo user. Im również należy odmówić dostępu i powinno to nastąpić, zanim będą mogli wprowadzić swoje hasło.,i zapisz pliki: tutaj upewnimy się, że nasz wyznaczony użytkownik canconnect:

  • ftp -p 203.0.113.0

zmienimy się w katalog files, a następnie użyjemy polecenia get, aby przenieść utworzony wcześniej plik testowy na naszą lokalną maszynę:

  • cd files
  • get test.txt

zawrócimy w prawo i spróbujemy przesłać plik o nowej nazwie, aby przetestować uprawnienia zapisu:

  • put test.txt upload.txt

zamknij połączenie:

  • bye

teraz, gdy przetestowaliśmy naszą konfigurację, podejmiemy kroki w celu dalszego zabezpieczenia naszego serwera.,

Krok 6 — zabezpieczanie transakcji

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

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

zrobimy to za pomocą następującego polecenia:

  • 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 danych adresowych certyfikatu., Poniżej wpisz swoje własne informacje:

aby uzyskać bardziej szczegółowe informacje na temat flag 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 powinny być dwie linie, które powinny być ustawione na”462085D14A”>

begin with rsa_. Skomentuj je tak, aby wyglądały jak:

/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 w celu zapewnienia, że cały ruch jest szyfrowany, ale może zmusić użytkownika FTP do zmiany klientów. Zmiana ssl_enable na 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 skonfigurujemy serwer do korzystania z TLS, preferowanego następcy 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

Po zakończeniu zapisz i zamknij plik.

teraz musimy ponownie uruchomić serwer, aby zmiany zaczęły obowiązywać:

  • 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 sprawdzimy, 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ę za pomocą FileZilla ze względu na jego obsługę wielu platform. Zapoznaj się z dokumentacją dla innych klientów.

po pierwszym otwarciu FileZilla znajdź ikonę Menedżera witryny tuż pod plikiem word, ikonę po lewej stronie w górnym wierszu. Kliknij go:

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


pod „Moje strony” 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ę.

musisz wypełnić pole „Host” nazwą lub adresem IP. W menu rozwijanym „Szyfrowanie” wybierz „Wymagaj jawnego FTP przez TLS”.

Dla „typ logowania” wybierz „zapytaj o hasło”. Wypełnij utworzony użytkownik FTP w polu” użytkownik”:


Kliknij” Połącz ” na dole interfejsu., Zostaniesz poproszony o podanie hasła 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 folder files I przeciągnij upload.txt po lewej stronie, aby potwierdzić, że możesz pobierać pliki.

kiedy to zrobisz, kliknij prawym przyciskiem myszy na lokalnej kopii, Zmień nazwę na upload-tls.txt ' i przeciągnij go z powrotem na serwer, aby potwierdzić, że możesz przesłać pliki.,


potwierdziłeś, że możesz bezpiecznie i skutecznie przesyłać 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 nazwieftponlyw katalogu bin:

  • sudo nano /bin/ftponly

dodamy wiadomość informującą użytkownika, dlaczego nie może się zalogować.,/p>

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

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ę 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 vsftpd dla 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.

Articles

Dodaj komentarz

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