Sådan installeres og konfigureres FTP-server i Ubuntu


FTP (File Transfer Protocol) er en relativt gammel og mest anvendt standardnetværksprotokol, der bruges til at uploade/downloade filer mellem to computere over et netværk. Imidlertid FTP ved sin oprindelige usikkerhed, fordi den overfører data sammen med brugerlegitimationsoplysninger (brugernavn og adgangskode) uden kryptering.

Advarsel: Hvis du planlægger at bruge FTP, skal du overveje at konfigurere FTP-forbindelse med SSL/TLS (vil dække i næste artikel). Ellers er det altid bedre at bruge sikker FTP, såsom SFTP.

I denne vejledning viser vi, hvordan du installerer, konfigurerer og sikrer en FTP-server (VSFTPD i sin helhed "Very Secure FTP Daemon") i Ubuntu for at have en stærk sikkerhed mod FTP-sårbarheder.

Trin 1: Installation af VsFTP-server i Ubuntu

1. Først skal vi opdatere listen over kilder til systempakker og derefter installere VSFTPD binær pakke som følger:

$ sudo apt-get update
$ sudo apt-get install vsftpd

2. Når installationen er afsluttet, deaktiveres tjenesten oprindeligt, derfor er vi nødt til at starte den manuelt i mellemtiden og også aktivere den til at starte automatisk fra næste systemstart:

------------- On SystemD ------------- 
# systemctl start vsftpd
# systemctl enable vsftpd

------------- On SysVInit ------------- 
# service vsftpd start
# chkconfig --level 35 vsftpd on

3. Hvis du derefter har UFW-firewall aktiveret (det er ikke aktiveret som standard) på serveren, skal du åbne porte 21 og 20, hvor FTP-dæmoner lytter, for at give adgang til FTP-tjenester fra eksterne maskiner og derefter tilføje de nye firewallregler som følger:

$ sudo ufw allow 20/tcp
$ sudo ufw allow 21/tcp
$ sudo ufw status

Trin 2: Konfiguration og sikring af VsFTP-server i Ubuntu

4. Lad os nu udføre et par konfigurationer for at opsætte og sikre vores FTP-server, først opretter vi en sikkerhedskopi af den oprindelige konfigurationsfil /etc/vsftpd/vsftpd.conf sådan:

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

Lad os derefter åbne vsftpd-konfigurationsfilen.

$ sudo vi /etc/vsftpd.conf
OR
$ sudo nano /etc/vsftpd.conf

Tilføj/rediger følgende muligheder med disse værdier:

anonymous_enable=NO             # disable  anonymous login
local_enable=YES		# permit local logins
write_enable=YES		# enable FTP commands which change the filesystem
local_umask=022		        # value of umask for file creation for local users
dirmessage_enable=YES	        # enable showing of messages when users first enter a new directory
xferlog_enable=YES		# a log file will be maintained detailing uploads and downloads
connect_from_port_20=YES        # use port 20 (ftp-data) on the server machine for PORT style connections
xferlog_std_format=YES          # keep standard log file format
listen=NO   			# prevent vsftpd from running in standalone mode
listen_ipv6=YES		        # vsftpd will listen on an IPv6 socket instead of an IPv4 one
pam_service_name=vsftpd         # name of the PAM service vsftpd will use
userlist_enable=YES  	        # enable vsftpd to load a list of usernames
tcp_wrappers=YES  		# turn on tcp wrappers

5. Konfigurer nu VSFTPD til at tillade/nægte FTP-adgang til brugere baseret på brugerlistefilen /etc/vsftpd.userlist.

Bemærk, at brugere, der er angivet i userlist_file =/etc/vsftpd.userlist, som standard nægtes loginadgang med userlist_deny = YES mulighed, hvis userlist_enable = YES .

Men indstillingen userlist_deny = NO drejer betydningen af standardindstillingen, så kun brugere, hvis brugernavn er udtrykkeligt angivet i userlist_file =/etc/vsftpd.userlist, får lov til at logge ind på FTP-serveren.

userlist_enable=YES                   # vsftpd will load a list of usernames, from the filename given by userlist_file
userlist_file=/etc/vsftpd.userlist    # stores usernames.
userlist_deny=NO   

Vigtigt: Når brugere logger ind på FTP-serveren, placeres de i en rodet fængsel, dette er den lokale rodmappe, der kun fungerer som deres hjemmemappe til FTP-sessionen.

Dernæst vil vi se på to mulige scenarier for, hvordan du indstiller kataloget med rodfængsel (lokal rod), som forklaret nedenfor.

6. På dette tidspunkt, lad os tilføje/ændre/fjerne kommentar til disse to følgende muligheder for at begrænse FTP-brugere til deres hjemmekataloger.

chroot_local_user=YES
allow_writeable_chroot=YES

Indstillingen chroot_local_user = YES betyder vigtigst af alt, at lokale brugere placeres i en chroot-fængsel, deres hjemmekatalog som standard efter login.

Og vi skal lige så godt forstå, at VSFTPD ikke tillader, at chroot-fængselsmappen kan skrives, som standard af sikkerhedsmæssige årsager, men vi kan dog bruge muligheden allow_writeable_chroot = YES til at deaktivere denne indstilling.

Gem filen, og luk den. Derefter skal vi genstarte VSFTPD-tjenester for at ovenstående ændringer skal træde i kraft:

------------- On SystemD ------------- 
# systemctl restart vsftpd

------------- On SysVInit ------------- 
# service vsftpd restart

Trin 3: Test af VsFTP-server i Ubuntu

7. Nu vil vi teste FTP-serveren ved at oprette en FTP-bruger med kommandoen useradd som følger:

$ sudo useradd -m -c "Aaron Kili, Contributor" -s /bin/bash aaronkilik
$ sudo passwd aaronkilik

Derefter skal vi eksplicit liste brugeren aaronkilik i filen /etc/vsftpd.userlist med ekkokommandoen og tee-kommandoen som nedenfor:

$ echo "aaronkilik" | sudo tee -a /etc/vsftpd.userlist
$ cat /etc/vsftpd.userlist

8. Nu er det tid til at teste, at ovenstående konfigurationer fungerer efter behov. Vi begynder med at teste anonyme logins; Vi kan tydeligt se nedenstående output, at anonyme logins ikke er tilladt på FTP-serveren:

# ftp 192.168.56.102
Connected to 192.168.56.102  (192.168.56.102).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.102:aaronkilik) : anonymous
530 Permission denied.
Login failed.
ftp> bye
221 Goodbye.

9. Lad os derefter teste, om en bruger, der ikke er anført i filen /etc/vsftpd.userlist, får tilladelse til login, hvilket ikke er sandt fra den følgende output:

# ftp 192.168.56.102
Connected to 192.168.56.102  (192.168.56.102).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : user1
530 Permission denied.
Login failed.
ftp> bye
221 Goodbye.

10. Nu udfører vi en afsluttende test for at afgøre, om en bruger, der er anført i filen /etc/vsftpd.userlist, faktisk er placeret i hans/hendes hjemmekatalog efter login. Og dette gælder fra nedenstående output:

# ftp 192.168.56.102
Connected to 192.168.56.102  (192.168.56.102).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.102:aaronkilik) : aaronkilik
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls

Advarsel: Indstilling af indstillingen allow_writeable_chroot = YES kan være så farlig, at det har mulige sikkerhedsmæssige konsekvenser, især hvis brugerne har uploadtilladelse eller mere, shelladgang. Brug det kun, hvis du nøjagtigt ved, hvad du laver.

Vi skal bemærke, at disse sikkerhedsimplikationer ikke er specifikke for VSFTPD, de kan også påvirke alle andre FTP-dæmoner, der tilbyder at placere lokale brugere i chroot-fængsler.

Af denne grund vil vi i afsnittet nedenfor forklare en mere sikker metode til at indstille en anden ikke-skrivbar lokal rodmappe til en bruger.

Trin 4: Konfigurer FTP-brugermapper i Ubuntu

11. Åbn nu VSFTPD-konfigurationsfilen igen.

$ sudo vi /etc/vsftpd.conf
OR
$ sudo nano /etc/vsftpd.conf

og kommenter den usikre mulighed ved hjælp af # -tegnet som vist nedenfor:

#allow_writeable_chroot=YES

Opret derefter den alternative lokale rodmappe til brugeren (aaronkilik, din er muligvis ikke den samme) og indstil de krævede tilladelser ved at deaktivere skrivetilladelser til alle andre brugere til denne mappe:

$ sudo mkdir /home/aaronkilik/ftp
$ sudo chown nobody:nogroup /home/aaronkilik/ftp
$ sudo chmod a-w /home/aaronkilik/ftp

12. Opret derefter en mappe under den lokale rod med de relevante tilladelser, hvor brugeren gemmer sine filer:

$ sudo mkdir /home/aaronkilik/ftp/files
$ sudo chown -R aaronkilk:aaronkilik /home/aaronkilik/ftp/files
$ sudo chmod -R 0770 /home/aaronkilik/ftp/files/

Bagefter skal du tilføje/ændre nedenstående indstillinger i VSFTPD-konfigurationsfilen med deres tilsvarende værdier:

user_sub_token=$USER          # inserts the username in the local root directory 
local_root=/home/$USER/ftp    # defines any users local root directory

Gem filen, og luk den. Og genstart VSFTPD-tjenesterne med de seneste indstillinger:

------------- On SystemD ------------- 
# systemctl restart vsftpd

------------- On SysVInit ------------- 
# service vsftpd restart

13. Lad os nu udføre en sidste kontrol og sørge for, at brugerens lokale rodmappe er den FTP-mappe, vi oprettede i hans hjemmekatalog.

# ftp 192.168.56.102
Connected to 192.168.56.102  (192.168.56.102).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:aaronkilik) : aaronkilik
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls

Det er det! Husk at dele din mening om denne vejledning via nedenstående kommentarformular eller muligvis give os vigtige oplysninger om emnet.

Sidst men ikke mindst, gå ikke glip af vores næste artikel, hvor vi vil beskrive, hvordan du sikrer en FTP-server ved hjælp af SSL/TLS-forbindelser i Ubuntu 16.04/16.10, indtil da, skal du altid være tunneleret til TecMint.