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 z
sudo
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:
OutputStatus: 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″>
Outputtotal 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
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:
. . .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.
. . .chroot_local_user=YES. . .
dodamyuser_sub_token
aby 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.
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ń:
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:
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
Outputsammy
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:
# 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:
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
:
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:
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:
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:
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 nazwieftponly
w 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:
. . ./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:
OutputThis 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.