# apt-get install vsftpd Reading package lists... Done
Building dependency tree... Done
The following NEW packages will be installed:
vsftpd
0 upgraded, 1 newly installed, 0 to remove and 142 not upgraded.
Need to get 114kB of archives.
After unpacking 418kB of additional disk space will be used.
Get:1 http://ftp.belnet.be etch/main vsftpd 2.0.5-2 [114kB]
Fetched 114kB in 1s (104kB/s)
Selecting previously deselected package vsftpd.
(Reading database ... 72100 files and directories currently installed.)
Unpacking vsftpd (from .../vsftpd_2.0.5-2_i386.deb) ...
Setting up vsftpd (2.0.5-2) ...
Adding system user `ftp' (UID 112) ...
Adding new user `ftp' (UID 112) with group `nogroup' ...
Not creating home directory `/home/ftp'. Starting FTP server: vsftpd.
(re-)Start de service
Dit hoeft normaal gezien niet te gebeuren. apt-get heeft dit reeds gedaan als alles goed is verlopen.
# /etc/init.d/vsftpd restart
Test vsftpd
De default configuratie werkt onmiddellijk met de anonymous user. We testen met het shell commando ftp:
$ ftp localhost Connected to localhost.
220 Welcome to FTP service.
Name (localhost:): anonymous 331 Please specify the password.
Password: whateveryouwant 230 Login successful.
Remote system type is UNIX. Using binary mode to transfer files.
Tik nu ls aan de ftp prompt om te zien of alles naar behoren werkt, de directory is waarschijnlijk wel leeg.
ftp>ls 200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
226 Directory send OK. ftp>
Tik nu quit om ftp af te sluiten ftp> quit
221 Goodbye.
Plaats nu wat files of een directory in de root-directory van anonymous ftp. En kijk opnieuw.
Maar hoe vinden we de root van user anonymous?
In de debian familie is dit default /home/ftp, in de RedHat familie /var/ftp.
In de passwd file vind je dikwijls een user ftp, wiens home directory verwijst naar de anonymous root:
bij debian:
$ grep ftp /etc/passwd ftp:x:109:65534::/home/ftp:/bin/false
bij redhat:
[root@localhost ~]# grep ftp /etc/passwd ftp:x:14:50:FTP User:/var/ftp:sbin/nologin
bij SuSE:
# grep ftp /etc/passwd ftp:x:40:49:FTP account:/srv/ftp:/bin/bash
Ik werk onder debian en plaats een directory clonezilla in /home/ftp:
# mkdir /home/ftp/clonezilla
# ls -l /home/ftp total 4
drwxrwxrwx 2 ftp users 4096 2009-11-27 15:06 clonezilla
Ik test nu om te zien of de directory inderdaad aangemaakt was op de juiste plaats:
# ftp localhost Connected to localhost.
220 La2 NetBoot Service
Name (localhost:jan): anonymous 331 Please specify the password.
Password:<enter> 230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
drwxrwxrwx 2 109 100 4096 Nov 27 2009 clonezilla
226 Directory send OK.
ftp> quit
221 Goodbye.
errors: 500 OOPS
Indien u een error 500 OOPS ... krijgt, of een ander probleem, moeten we kijken of er fouten in de configuratie zitten. Open daarvoor het bestand /etc/vsftpd.conf
en analyseer de log file /var/log/vsftpd.log .
Kijk na op het internet of uw foutmelding daar voorkomt.
Na je onderzoek, en wijzigingen aan de configuratie of de permissions, moet je de vsftpd service herstarten:
# /etc/init.d/vsftpd restart
Daarna moet je opnieuw testen zoals in punt 3
een voorbeeldprobleem:
220 "ftp.intec.be, login as anonymous only ..." Name (172.16.0.4:jan): anonymous 331 Please specify the password. Password:***** 500 OOPS: vsftpd: refusing to run with writable anonymous root
Login failed.
Een eerste actie is even de logfile te bekijken:
# tail /var/log/vsftpd.log
Sat Jun 21 17:59:19 2010 [pid 25346] CONNECT: Client "172.16.0.7"
Sat Jun 21 17:59:19 2010 [pid 25345] [ftp] OK LOGIN: Client "192.168.0.7", anon password "-wget@"
Wed Aug 12 17:44:25 2010 [pid 14394] CONNECT: Client "172.16.0.150"
Wed Aug 12 17:44:30 2010 [pid 14393] [anonymous'] FAIL LOGIN: Client "192.168.0.150"
Wed Aug 12 17:44:38 2010 [pid 14393] [ftp] OK LOGIN: Client "172.16.0.15", anon password "?"
Thu Sep 16 10:16:35 2010 [pid 15715] CONNECT: Client "172.16.0.8"
Thu Sep 16 10:16:42 2010 [pid 15714] [jan] OK LOGIN: Client "172.16.0.8"
Thu Sep 16 10:17:23 2010 [pid 15718] CONNECT: Client "172.16.0.8"
Thu Sep 16 10:17:27 2010 [pid 15717] [ftp] OK LOGIN: Client "172.16.0.8", anon password "?"
Op het eerste zicht is daar niks mis mee ...
Als we de OOPS nog eens herlezen is er een probleem met de schrijfrechten van de root-directory. Maar, wat is "root" van anonymous?
De vsftpd.conf geeft het antwoord:
dirmessage_enable=YES
ftpd_banner="ftp.intec.be, login as anonymous only ..."
anonymous_enable=YES anon_root=/home/music
xferlog_enable=YES
connect_from_port_20=YES
pam_service_name=vsftpd
nu zoeken we wat er mis is:
$ ls -l /home
drwxrwxrwx 2 root root 176 2010-09-06 08:19 music
drwxr-xr-x 17 jan users 840 2010-09-13 14:02 jan
drwxr-xr-x 7 sarah users 536 2006-08-13 12:07 sarah
drwxr-xr-x 7 marienda users 304 2007-12-09 13:47 mariende
drwxr-xr-x 7 joris users 536 2006-08-13 12:08 joris
Het is duidelijk dat de rechten van /home/music niet mogen staan zoals ze staan.
We tikken:
# chmod 755 /home/music
Nu nog even de vsftpd herstarten:
# /etc/init.d/vsftpd restart
en het probleem is opgelost.
Kunnen anonymous users dan nooit uploaden met vsftpd?
Toch wel, maar niet in de anon_root, wel in subdirectories van de anon_root.
configureren
Indien de test normaal verloopt, kunnen we de configuratie van /etc/vsftpd.conf aanpassen met vim:
Ergens in dit bestand vinden we de volgende regel: # ftpd_banner=Welcome to blah FTP service.
We kunnen het kommentaarhekje # voor deze regel verwijderen, en desgewenst de welkomstgroet van de server aanpassen.
ftpd_banner=Welcome to Linux800 FTP service.
Na je wijzigingen aan de configuratie moet je de vsftpd service herstarten:
# /etc/init.d/vsftpd restart
En daarna moeten we opnieuw testen zoals in punt 3 om te kijken of de welkomstgroet inderdaad is aangepast.
Indien dit niet het geval is, heeft u misschien wel
de verkeerde configuratiefile aangepast (in de verkeerde directory),
of u is misschien vergeten vsftpd te herstarten,
of misschien is u gewoon vergeten het # teken voor de configuratieregel weg te halen.
lokale gebruikers
In principe maak je een ftp server voor ofwel lokale gebruikers, ofwel voor alleen anonymous gebruikers. Om hacks te vermijden is het niet aan te raden één server te gebruiken voor zowel lokale gebruikers als voor anonymous gebruikers.
In deze paragraaf komen de lokale gebruikers aan bod. Zij worden enabled, krijgen schrijfrechten, worden opgesloten in hun eigen home-directory, en tot slot wordt anonymous toegang geblokkeerd.
De home-directory van de lokale gebruikers is automatisch hun home-directory onder linux. Voor jan wordt dat dan /home/jan
Om de lokale gebruikers te laten inloggen verwijdert u de # van de regel
local_enable=YES
Om lokale gebruikers schrijfrechten te geven verwijdert u de # van regel write_enable=YES
Om lokale gebruikers op te sluiten in hun eigen home-directory gebruikt u chroot_local_user=YES
Om de anonymous toegang te verwijderen plaatst u anonymous_enable=NO
Test voor elke wijziging telkens opnieuw zoals in punt 3
Probeer na deze 4 wijzigingen een file te plaatsen in je home directory met het ftp-commando put.
Probeer ftp tenslote vanuit een andere pc op je netwerk met
$ ftp 172.16.31.xy
en kijk of alles werkt zoals je verwacht.
anonymous toegang
Soms wil je bewust anonymous toegang verlenen. De volgende opties maken dit makkelijker:
#### anonymous access section #
# ik laat anonymous toegang toe anonymous_enable=YES
# dit is de root directory van anonymous ftp login anon_root=/home/test
# dit is de user die anonymous operations uitvoert op het linux systeem
# ik ben wel ingelogd als anonymous maar dit wordt vertaald naar user: test
# vergeet de user niet aan te maken met useradd ftp_username=test
# de anonymous user mag files uploaden met put anon_upload_enable=YES
# de anonymous user mag directories cre-eren met mkdir anon_mkdir_write_enable=YES
# de anonymous user mag files en directories deleten of renamen anon_other_write_enable=YES