LX-SVS-INFO-vsftpd
Updated sep/14/10 20:48

VSFTPD - Debian

  1. Installeer vsftpd

    # 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.
  2. (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
  3. 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.


  4. 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.
  5. 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.
  6. 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.
  7. 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

    #
    #### end of anonymous access section
  8. nuttige links

    Officiële vsftpd website: http://vsftpd.beasts.org
    Wikipedia ftp-server: http://en.wikipedia.org/wiki/FTP_server