FTP-server med Linux

FTP er en funktion der giver brugere adgang til filer på serveren. Herunder opsætter vi en FTP server, hvor serverens brugere får adgang til deres hjemmemapper og intet andet. På denne måde kan de hver især tilgå deres filer og hjemmeside. I denne guide anvendes vsftpd. En af fordelene er, at man ved hjælp af FTP og en LAMP server kan give brugere på et system adgang til en personlig hjemmeside. Det vil blive gennemgået i webserver guiden.

Vær opmærksom på at FTP er en ældre protokol, hvis hovedformål var at give let adgang til filer. I denne guide gennemgås en installation af en let tilgængelig FTP-server, hvor der er adgang for oprettede brugere på serveren, men også en anonym adgang, der kan anvendes af alle. FTP kan konfigureres så overførsler bliver krypteret, men det det vil ikke blive gennemgået i denne guide. Til sidst i guiden vil der være et kapitel med forslag til hvordan installationen kan sikres lidt mere og brugerne.

Installer vsftpd

Installer vsftp med følgende kommando:

sudo apt install vsftpd -y

Når man installerer vsftpd kan man som udgangspunkt intet. Man skal konfigurere det som programmet skal kunne i filen /etc/vsftpd.conf. Vi vil konfigurere vsftpd sådan at:

  1. brugere på computeren kan uploade og ændre i filer (write_enable), og at de bliver låst til deres home-mappe (chroot)
  2. der bliver en offentlig mappe alle kan tilgå og downloade fra (anonymous FTP)

Sæt brugerrettigheder

For at aktivere brugerne på systemet skal der aktiveres to linier i /etc/vsftpd.conf ved at fjerne # og der skal tilføjes en linie. Åbn filen med nano:

sudo nano /etc/vsftpd.conf

Søg efter linierne ved at anvende genvejstasterne Ctrl + w.

# Uncomment this to enable any form of FTP write command.
write_enable=YES <--- hashtag (#) fjernes

… 

# chroot_list_enable below.
chroot_local_user=YES <--- hashtag (#) fjernes
allow_writeable_chroot=YES <--- Hele denne linie tilføjes

Genstart vsftpd:

sudo systemctl restart vsftpd

Opret Anononym FTP

For at lave en offentlig FTP server, hvor folk kan downloade fra ændres følgende linie:

anonymous_enable=No

til

anonymous_enable=YES

Genstart vsftpd:

sudo systemctl restart vsftpd

Filer der skal være tilgængelig for anonym FTP lægges i mappen (/srv/ftp). Undersøger vi rettighederne for mappen kan vi se at den tilhører root, men at gruppen ftp har ret til læse og køre programmer derfra.

thoj@mainsrv:~$ ls -al /srv
totalt 28
drwxr-xr-x  4 root root  4096 jul  2 23:48 .
drwxr-xr-x 24 root root  4096 jul  2 12:11 ..
drwxr-xr-x  2 root ftp   4096 jul  2 23:48 ftp
drwx------  2 root root 16384 jul  2 11:30 lost+found

FTP med Filezilla

Installer Filezilla på klienten.

sudo apt install filezilla -y

For at teste det virker opretter vi to testfiler. En i vores hjemmemappe og en i /srv/ftp.

thoj@mainsrv:~$ touch ~/testfile
thoj@mainsrv:~$ sudo touch /srv/ftp/testfile_ftp

Vi behøver ikke bekymre os om filrettigheder, da de filer root opretter som standard har læseadgang for både gruppe og alle. Lad os kigge på filerne og deres rettigheder:

thoj@mainsrv:~$ ls ~ -al | grep testfile 
-rw-rw-r-- 1 thoj thoj    0 jul  3 00:31 testfile
thoj@mainsrv:~$ ls /srv/ftp/ -al | grep testfile 
-rw-r--r-- 1 root root    0 jul  3 00:38 testfile_ftp

Når man starter filezilla har man mulighed for at indtaste ens bruger oplysninger. Først med anonym bruger:

På venstre side har man sin egen computer og på højre side er FTP-serveren. Som du kan se ligger filen testfile_ftp i mappen. Man overfører filen ved at trække den over eller dobbeltklikke på den.

Herunder er der valgt en der har en bruger på FTP-serveren:

Læg mærke til at FTP-brugeren er låst til sin hjemmemappe. Havde vi ikke chrooted brugeren, ville brugeren have haft adgang til hele filstrukturen.

FTP med kommandolinien

Man kan også logge på ftp serveren ved hjælp af kommandolinien. Her kører man blot kommandoen:

ftp 192.168.0.10

Efter kommandoen er kørt beder FTP-serveren om brugernavn og password. Herunder logger jeg på FTP-serveren fra en Ubuntu klient:

thoj@thoj-VirtualBox:~$ ftp 192.168.0.10
Connected to 192.168.0.10.
220 (vsFTPd 3.0.3)
Name (192.168.0.10:thoj): thoj
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> 

læg mærke til at kommandoprompten bliver afløst af: ftp>. Man kan se de forskellige kommandoer ved at skrive ? og trykke Enter:

ftp> ?
Commands may be abbreviated.  Commands are:

!		dir		mdelete		qc		site
$		disconnect	mdir		sendport	size
account		exit		mget		put		status
append		form		mkdir		pwd		struct
ascii		get		mls		quit		system
bell		glob		mode		quote		sunique
binary		hash		modtime		recv		tenex
bye		help		mput		reget		tick
case		idle		newer		rstatus		trace
cd		image		nmap		rhelp		type
cdup		ipany		nlist		rename		user
chmod		ipv4		ntrans		reset		umask
close		ipv6		open		restart		verbose
cr		lcd		prompt		rmdir		?
delete		ls		passive		runique
debug		macdef		proxy		send

Herunder er en tabel med nogle af de vigtigste kommandoer.

Kommando Beskrivelse Kommando Beskrivelse
ls Viser indholdet af mappen get Hent en fil
pwd Viser mappen man står i mget Hent flere filer
cd Skift mappe på FTP-serveren put upload en fil
lcd Skifter mappe lokalt mput Upload flere
mkdir Opret en mappe exit / bye Afslut FTP
rmdir Slet en mappe

Læs mere: http://www.cyberciti.biz/faq/linux-unix-ftp-commands/

FTP med browseren

Ved at anvende browseren får man læseadgang til FTP drevet. I stedet for at starte linien med http anvender man ftp, f.eks: ftp:192.168.0.10.

Vil man have adgang til en brugers FTP mappe angiver man brugernavnet sammen med adressen f.eks: ftp:thoj@10.0.2.10. Browseren beder herefter om ens password, hvorefter man får adgang til ens filer.

Mere sikkerhed

Som det er lige nu udbydes FTP-tjenesten til alle brugerne på computeren. Udfordringen er, at et potentielt giver adgang til alle brugernes mapper på computeren ved hjælp af FTP. For at omgå dette kan man lave en liste med tilladte brugere. På den måde kan man oprette en specifik bruger, som man kan anvende til FTP - uden at andre brugere er tilgænglige.

Lad os oprette brugeren thoj_ftp

sudo adduser thoj_ftp

For at afgrænse brugen af FTP til denne bruger skal følgende linier tilføjes i bunden af /etc/vsftpd:

userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd.allowed_users

Opret og rediger herefter filen /etc/vsftpd.allowed_users og indsæt følgende:

sudo nano /etc/vsftpd.conf
thoj_ftp

... og genstart vsftpd

sudo systemctl restart vsftpd

Herefter vil brugere der ikke er i /etc/vsftpd.allowed_users blive nægtet adgang

thoj@thoj-VirtualBox:~$ ftp 192.168.0.10 <--- Login på FTP
Connected to 192.168.0.10.
220 (vsFTPd 3.0.3)
Name (192.168.0.10:thoj): thoj
530 Permission denied. <--- Brugeren "thoj" bliver afvist
Login failed.
ftp> bye <--- Afslut FTP
221 Goodbye.
thoj@thoj-VirtualBox:~$ ftp 192.168.0.10 <--- Login på FTP
Connected to 192.168.0.10.
220 (vsFTPd 3.0.3)
Name (192.168.0.10:thoj): thoj_ftp
331 Please specify the password.
Password:
230 Login successful. <--- Brugeren "thoj_ftp" bliver godkendt
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> exit
221 Goodbye.
thoj@thoj-VirtualBox:~$

Prøver man at logge ind med thoj ved hjælp af Chrome vil FTP-serveren blive ved med at bede om et nyt brugernavn der virker.

Herefter kan brugere der har adgang til FTP-serveren tilføjes løbende.

Læs mere

https://security.appspot.com/vsftpd.html

http://vsftpd.beasts.org/vsftpd_conf.html

https://help.ubuntu.com/lts/serverguide/ftp-server.html#vsftpd-security

http://ubuntuforums.org/showthread.php?t=518293