LEKCJA 14 - SERWER FTP

Wprowadzenie do lekcji

Nastąpił czas aby do naszego serwera dołożyć kolejną cegiełkę i uruchomić na nim serwer FTP, który jest często wykorzystywany do łatwego udostępniania i wymiany plików. FTP to skrót od File Transfer Protocol i jest to protokół komunikacyjny, wykorzystujący transmisję TCP, umożliwiający dwukierunkowy transfer plików. FTP pracuje w dwóch trybach – aktywnym oraz pasywnym. Ten pierwszy tryb wykorzystuje port 21 do przesyłania poleceń oraz port 20 do przesyłania danych. Połączenie na port 21 zestawia klient, a na port 20 zestawia serwer. Powoduje to chociażby problemy ze stroną kliencką, która musi mieć w firewallu odblokowany port 20. Problem ten rozwiązuje tryb pasywny, gdzie zamiast portu 20 wykorzystywany jest port o numerze większym niż 1024. Wtedy oba połączenia zestawia klient i nie ma problemu z firewallem. Nasz serwer FTP będzie pracował w trybie aktywnym jako, że nie ma problemu z firewallami w naszej sieci. Implementacja protokołu FTP jaką sobie użyjemy nosi nazwę vsftpd, co rozwija się jako Very Secure FTP Daemon. Jest to bardzo lekki i prosty w konfiguracji serwer FTP, który do uwierzytelniania wykorzystuje konta znajdujące się w naszym systemie. Pozwala również uruchomić szyfrowane połączenie, jednakże my tym na razie nie będziemy się zajmować. Warto jednak wspomnieć co zrobimy z samym serwerem FTP. Otóż: - zainstalujemy go i skonfigurujemy; - uruchomimy konto anonimowe; - stworzymy pewną strukturę gdzie będą istnieć trzy foldery, dwa konta oraz trzy grupy. Do jednego folderu będzie miała dostęp jedna grupa, do drugiego druga grupa, a do trzeciego oba konta poprzez trzecią grupę; - na koniec powiem również jak uruchomić tryb pasywny, a także skonfigurować użytkownika dla danego folderu.

I. Instalacja i konfiguracja serwera FTP.

10-01
Wpisujemy więc w konsoli: $ sudo apt install vsftpd -y No i oczywiście potwierdzamy proces instalcji.
10-02
Po instalacji serwera, możemy sprawdzić jego status poleceniem: $ sudo systemctl status vsftpd Domyślnie powinien się uruchomić i być gotowy do działania, co potwierdza powyższy screen.
10-03
Przechodzimy zatem do katalogu /etc i wykonujemy kopię naszego pliku, którą umieścimy w katalogu domowym użytkownika. Użyjemy do tego polecenia: $ sudo cp /etc/vsftpd.conf ~/vsftpd.conf-kopia Następnie edytujemy nasz plik konfiguracyjny /etc/vsftpd.conf, poleceniem: $ sudo nano /etc/vsftpd.conf Na początek ustawimy sobie następujące opcje: - listen_ipv6 - upewniamy się, że jest ustawione na YES. W przeciwnym wypadku serwer może przestać nasłuchiwać również na IPv4; - local_enable - ta opcja musi być ustawiona na YES, w przeciwnym wypadku użytkownicy lokalni nie będą mogli się logować; - write_enable - ta opcja musi być ustawiona na YES, aby można było coś zapisywać; - anon_root=/srv/ftp/public - wskazujemy folder, który będzie przechowywał publiczne pliki dla użytkownika anonimowego; - no_anon_password=YES - dodajemy tę opcję, aby klient FTP nie żądał od nas wpisywania hasła dla użytkownika anonimowego (kosmetyczna zmiana); - hide_ids=YES - ta opcja jest po to, aby nie było widać właścicieli danego zasobu na serwerze; Zapisujemy zmiany w naszym pliku, ale jeszcze z niego nie wychodzimy.
10-04
Zjeżdżamy w naszym pliku trochę niżej i odnajdujemy ustawienie ftpd_banner, w nim podajemy napis jaki ma się wyświetlić po zalogowaniu na serwer. Czysto kosmetyczna zmiana, ale będzie jakaś informacja. Następnie pod sekcją "You may restrict…", dodajemy następujące ustawienia: - chroot_local_user=YES - ta opcja jest po to, aby użytkownicy byli ograniczeni do katalogu jaki został im przypisany (zawsze jest to katalog domowy, bez jego zmiany nie da się zmienić katalogu FTP, niestety); - allow_writeable_chroot=YES - z kolei ta opcja jest po to, aby nasi użytkownicy mogli zapisywać w swoich folderach. Gdyby nie opcja wyżej, to ta nie byłaby wymagana, ale wtedy użytkownicy mogliby wyjść ze swojego katalogu i przeglądać inne rzeczy; Podobnie jak wyżej, zapisujemy zmiany w naszym pliku, ale jeszcze z niego nie wychodzimy.
10-05
Następnie przechodzimy na sam koniec pliku i dodajemy finałowe ustawienie: - userlist_enable=YES - ta opcja jktóre mówi serwerowi, że uruchomiona jest lista użytkowników; - userlist_file=/etc/vsftpd.user_list - ta opcja ustawia lokalizację tej listy; - userlist_deny=NO - ta opcja natomiast mówi serwerowi, że ta lista zawiera użytkowników, którzy MOGĄ wejść na serwer, a nie tych którzy nie mogą. Gdybyśmy to ustawili na YES to ta lista byłaby to klasyczna blacklist. W naszym przypadku jest to whitelist; Teraz, kiedy wszystko już skonfigurowaliśmy możemy jeszcze raz zapisać plik i zamknąć edytor.
10-06
Jako, że wcześniej ustawiliśmy tzw. whitelist to musimy edytować (a w zasadzie utworzyć) plik /etc/vsftpd.user_list klasycznym poleceniem: $ sudo nano /etc/vsftpd.user_list I w kolejnych linijkach dodać użytkowników, którzy mają mieć dostęp do FTP. W naszym przypadku będą to wcześniej utworzone konta takie jak: student001, student002, wozny001, a także anonymous i jego alternatywna nazwa, czyli ftp, których loginy też musimy tutaj dopisać.
10-07
Najpierw więc wpisujemy polecenie, które utworzy nam folder ftp, a w nim folder public: $ sudo mkdir -p /srv/ftp/public Następnie wpisujemy kolejne polecenie, które zmieni nam właściciela dla folderu /srv/ftp i jego podkatalogom: $ sudo chown -R nobody:nogroup /srv/ftp A na koniec ustawimy pełne uprawnienia dla użytkownika, odczyt i zapis dla grupy i innych. Jest to konieczne, ponieważ inaczej serwer FTP nie dopuści użytkownika anonimowego do zalogowania się. Wpisujemy zatem: $ sudo chmod -R 755 /srv/ftp Możemy jeszcze sprawdzić czy nasze katalogi zostały utworzone i czy mają właściwe uprawnienia. Zastosujemy znane już polecenia: $ ls -l $ sudo tree Jak widać, wszystko jest tak jak należy.
10-08
Teraz wystarczy tylko zrestartować serwer FTP poleceniem systemctl, a także sprawdzić jego status, czy działa on poprawnie: $ sudo systemctl restart vsftpd $ sudo systemctl status vsftpd Jak widać wszystko się udało – serwer działa i można go przetestować.
10-09
Aby połączyć się z naszym serwerem musimy wybrać opcję "Pliki", potem "Inne położenia" i w okienku "Połącz z serwerem" wpisać: ftp://, gdzie adres to w naszym przypadku jest 192.168.10.10
10-10
Ubuntu poprosi nas o to, aby wybrać typ połączenia użytkownika. My na początku wybieramy Anonimowy, gdyż ten chcemy przetestować. Więc upewniamy się, że takowy jest zaznaczony i wybieramy połącz. Katalog jest pusty, więc spróbujemy utworzyć tutaj jakiś folder.
10-11
Operacja ta nie powinna się powieść, ale klikamy PPM i wybieramy Nowy katalog. Wpisujemy nazwę Testowanie i naciskamy Utwórz. Otrzymujemy informację, że takie działanie się nie powiodło.
10-12
Wróćmy na serwer, przejdźmy do katalogu /srv/ftp/public i utwórzmy tam jakiś plik i folder. Niech to będzie katalog Testowanie oraz plik plik1.txt. Zastosujemy znane polecenia: $ sudo mkdir Testowanie $ sudo touch plik1.txt
10-13
I ponownie z poziomu klienta zalogujmy się jako anonimowy użytkownik. Nasz plik i folder są już widoczne.
10-14
Aby pokazać jak w pełni działa serwer ftp (łącznie z komunikatem powitalnym), wykorzystamy do tego terminal, a właściwie klienta ftp wbudowanego w terminal. Uruchamiamy więc na kliencie terminal i najpierw utworzymy na pulpicie plik o nazwie "send.txt", a potem podłączymy się do naszego serwera (wpiszemy jego IP oraz nazwę użytkownika: anonymous), zmienimy ścieżkę, pobierzemy plik na pulpit i spróbujemy coś wysłać na serwer. Należy użyć nastepujących poleceń: $ nano /home/clientadmin/Pulpit/send.txt $ ftp 192.168.10.10 Wpisujemy anonymous i nie podajemy hasła tylko naciskamy Enter $ ls -l $ lcd /home/clientadmin/Pulpit $ get plik1.txt I widzimy, że plik jest już na "Pulpicie". Natomiast gdy chcemy coś wysłać na serwer, to używamy polecenia: $ put send.txt Zgodnie z nadanymi uprawnieniami, widzimy odmowę dostępu. Aby rozłączyć się z serwerem FTP, wpisujemy Exit.
10-15
Teraz łączymy się z serwerem FTP jeszcze raz, jednakże tym razem jako użytkownik z dostępem autoryzowanym i wpisujemy login i hasło do jakiegoś konta, które dodaliśmy do whitelist'y. U nas będzie to student001. Po zalogowaniu sprawdzamy zawartość serwera FTP (nic tam jeszcze nie ma), a następnie spróbujemy wysłać na serwer nasz "plik1.txt" z pulpitu. Wykonamy zatem serię podobnych poleceń: $ ftp 192.168.10.10 Wpisujemy student001 i podajemy hasło $ ls -l $ lcd /home/clientadmin/Pulpit $ put plik1.txt $ ls -l I widzimy, że nasz plik został wysłany na serwer ftp.
10-16
A ponieważ ten typ połączenia polega na tym, że katalog domowy danego użytkownika, którym logowaliśmy się jest miejscem przechowywania danych na serwerze FTP, to możemy sprawdzić jego zawartość: $ ls -l /home/student001 I oczywiście nasz plik się tam znajduje

II. Konfiguracja połączenia autoryzowanego dla kilku użytkowników do serwera FTP.

10-17
Edytujemy zatem nasz plik /etc/shells poleceniem: $ sudo nano /etc/shells Na samym jego końcu dopisujemy /usr/sbin/noshell. Będzie to nasza fałszywa powłoka systemowa, która jako, że nie istnieje, nie pozwoli się zalogować na serwer.
10-18
Zaczniewmy zatem od stworzenia grup i użytkowników. Poleceniem addgroup utworzymy trzy grupy: nauczyciele, nauczyciele_polski i nauczyciele_info: $ sudo addgroup nauczyciele $ sudo addgroup nauczyciele_polski $ sudo addgroup nauczyciele_info Teraz pozostaje nam dodać użytkowników. Użyjemy do tego tym razem polecenia useradd z parametrem d, gdzie wskażemy katalog domowy użytkownika (będzie nim katalog /srv/ftp/nauczyciele), a z parametrem s, gdzie wskażemy naszą nieistniejącą powłokę: $ sudo useradd -d /srv/ftp/nauczyciele -s /usr/sbin/noshell nauczyciel001 $ sudo useradd -d /srv/ftp/nauczyciele -s /usr/sbin/noshell nauczyciel002 Na koniec poleceniem passwd musimy ustawić hasła naszym użytkownikom: $ sudo passwd nauczyciel001 $ sudo passwd nauczyciel002
10-19
Kolejną czynnością będzie stworzenie odpowiednich folderów, nadanie im właściwych uprawnień oraz zmiana właścicieli i grup. Do utworzenia folderów użyjemy poleceń: $ sudo mkdir -p /srv/ftp/nauczyciele/polski $ sudo mkdir -p /srv/ftp/nauczyciele/info $ sudo mkdir -p /srv/ftp/nauczyciele/wspolne Następnie ustawimy uprawnienia do wszystkich folderów na 770: $ sudo chmod 770 /srv/ftp/nauczyciele/polski $ sudo chmod 770 /srv/ftp/nauczyciele/info $ sudo chmod 770 /srv/ftp/nauczyciele/wspolne I pozostała nam jeszcze zmiana właścicieli (a właściwie grup): $ sudo chown :nauczyciele_polski /srv/ftp/nauczyciele/polski $ sudo chown :nauczyciele_info /srv/ftp/nauczyciele/info $ sudo chmod :nauczyciele /srv/ftp/nauczyciele/wspolne Możemy jeszcze poleceniem tree sprawdzić naszą strukturę folderów: $ sudo tree /srv/ftp
10-20
Na koniec, zgodnie z założeniami trzeba jeszcze przypisać naszych użytkowników do odpowiednich grup: $ sudo usermod -G nauczyciele -a nauczyciel001 $ sudo usermod -G nauczyciele -a nauczyciel002 $ sudo usermod -G nauczyciele_polski -a nauczyciel001 $ sudo usermod -G nauczyciele_info -a nauczyciel002 I poleceniem getent group sprawdzamy członków naszych grup: $ getent group nauczyciele $ getent group nauczyciele_polski $ getent group nauczyciele_info Oczywiście wszystko się zgadza.
10-21
Teraz musimy tylko do naszej whitelist'y, mieszczącej się w pliku /etc/vsftpd.user_list, dodać użytkowników nauczyciel001 oraz nauczyciel002. Edytujemy zatem nasz plik poleceniem: $ sudo nano /etc/vsftpd.user_list I na końcu dopisujemy naszych użytkowników. Oczywiście zapisujemy zmiany i zamykamy plik.
10-22
Teraz wystarczy tylko zrestartować serwer FTP, a także sprawdzić jego status, czy działa on poprawnie: $ sudo systemctl restart vsftpd $ sudo systemctl status vsftpd Jak widać wszystko jest OK.
10-23
Aby właściwie przetestować nasz serwer FTP, warto jeszcze utworzyć na nim jakieś dane. Przejdziemy zatem do katalogu /srv/ftp/nauczyciele i utworzymy w każdym z folderów po trzy pliki: $ cd /srv/ftp/nauczyciele $ ls -l $ sudo touch info/info1.txt $ sudo touch polski/polski1.txt $ sudo touch wspolne/wspolne1.txt Możemy jeszcze poleceniem tree sprawdzić naszą strukturę: $ sudo tree
10-24
Logujemy się więc z klienta do serwera FTP za pomocą terminala, najpierw na konto nauczyciel001: $ ftp 192.168.10.10 Po wpisaniu nazwy użytkownika i hasła sprawdzamy co mamy na serwerze FTP znanym poleceniem: ftp> ls -l Następnie spróbujemy wejść do katalogu info poleceniem: ftp> cd info Ale oczywiście nie mamy do niego dostępu. Następnie spróbujemy wejść do katalogu polski poleceniem: ftp> cd polski Tym razem jest sukces, więc sprawdzamy co tam się znajduje, klasycznym poleceniem: ftp> ls -l Widzimy trzy, utworzone wcześniej przez nas pliki. Zmieniamy więc ścieżkę lokalną na /home/clientadmin/Pulpit poleceniem: ftp> lcd /home/clientadmin/Pulpit I wysyłamy z Pulpitu na serwer plik o nazwie send.txt poleceniem: ftp> put send.txt Operacja została zakończona sukcesem, a dla pewności możemy jeszcze sprawdzić czy ten plik znajduje się już na serwerze: ftp> ls -l Wszystko się zgadza, plik send.txt już tam jest. Opuszczamy zatem nasz serwer poleceniem: ftp> exit
10-25
Podobne czynności wykonujemy dla drugiego użytkownika. Logujemy się więc z klienta do serwera FTP za pomocą terminala na konto nauczyciel002: $ ftp 192.168.10.10 Po wpisaniu nazwy użytkownika i hasła sprawdzamy co mamy na serwerze FTP znanym poleceniem: ftp> ls -l Następnie spróbujemy wejść do katalogu polski poleceniem: ftp> cd polski Ale oczywiście nie mamy do niego dostępu. Następnie spróbujemy wejść do katalogu info poleceniem: ftp> cd info Tym razem jest sukces, więc sprawdzamy co tam się znajduje, klasycznym poleceniem: ftp> ls -l Widzimy trzy, utworzone wcześniej przez nas pliki. Zmieniamy więc ścieżkę lokalną na /home/clientadmin/Pulpit poleceniem: ftp> lcd /home/clientadmin/Pulpit I wysyłamy z Pulpitu na serwer plik o nazwie send.txt poleceniem: ftp> put send.txt Operacja została zakończona sukcesem, a dla pewności możemy jeszcze sprawdzić czy ten plik znajduje się już na serwerze: ftp> ls -l Wszystko się zgadza, plik send.txt już tam jest. Opuszczamy zatem nasz serwer poleceniem: ftp> exit
10-26
Na koniec sprawdzimy obydwoma użytkownikami dostęp do folderu wspolne. Najpierw zrobimy to z konta nauczyciel001: $ ftp 192.168.10.10 ftp> ls -l Spróbujemy wejść do katalogu wspolne poleceniem: ftp> cd wspolne Oczywiście czynność zakończona została sukcesem, więc sprawdzamy co tam się znajduje, klasycznym poleceniem: ftp> ls -l Widzimy trzy, utworzone wcześniej przez nas pliki. Zmieniamy więc ścieżkę lokalną na /home/clientadmin/Pulpit poleceniem: ftp> lcd /home/clientadmin/Pulpit I wysyłamy z Pulpitu na serwer plik o nazwie send.txt poleceniem: ftp> put send.txt Operacja została zakończona sukcesem, a dla pewności możemy jeszcze sprawdzić czy ten plik znajduje się już na serwerze: ftp> ls -l Wszystko się zgadza, plik send.txt już tam jest. Opuszczamy zatem nasz serwer poleceniem: ftp> exit
10-27
Teraz logujemy się użytkownikiem nauczyciel002: $ ftp 192.168.10.10 ftp> ls -l Tak jak poprzednio spróbujemy wejść do katalogu wspolne poleceniem: ftp> cd wspolne Oczywiście czynność zakończona została sukcesem, więc sprawdzamy co tam się znajduje, klasycznym poleceniem: ftp> ls -l Widzimy trzy, utworzone wcześniej przez nas pliki oraz ten czwarty, który przed chwilą wysłaliśmy na serwer. Ponownie zmieniamy ścieżkę lokalną na /home/clientadmin/Pulpit poleceniem: ftp> lcd /home/clientadmin/Pulpit I wysyłamy z Pulpitu na serwer plik o nazwie plik1.txt poleceniem: ftp> put plik1.txt Operacja została zakończona sukcesem, a dla pewności możemy jeszcze sprawdzić czy ten plik znajduje się już na serwerze: ftp> ls -l Wszystko się zgadza, plik plik1.txt już tam jest. Opuszczamy zatem nasz serwer poleceniem: ftp> exit