home       basis       advanced       routing       switching       testen       overig      

FTP met login

(1) gebruik de machine UBU16-NET-xyz voor deze oefeningen-reeks.
(2) Indien nodig: vraag aan de docent het ip-adres van 'cassandra' en vraag tevens om er een account voor u op aan te maken, indien dit nog niet gebeurd zou zijn. cassandra is een FTP-server met LOGIN.
 
Naast het gebruik als downloader van alles en nog wat als anonymous user, wordt ftp ook heel veel ingezet als uploader/updater van websites. Je krijgt dan een account (username en paswoord) waarmee je kan inloggen. In je eigen root-directory heb je dan upload, create en delete rechten, en bijgevolg meer commando's. Je kan natuurlijk in je eigen organisatie ook een gewone ftp-account hebben, ergens, ... of misschien draai je zelf wel een server.
 
Bij het uploaden gebeurt het veel vaker, dat je de lokale directory-structuur wenst te doorbladeren. Daarvoor zijn er enkele commando's beschikbaar. Die gaan we even testen.
 
Tot slot bekijken we ook enkele manieren om ftp te gebruiken vanuit een script, om zo sneller updates te kunnen uitvoeren.
 

  • inloggen
     
    Inloggen is hetzelfde voor elke user, ook anonymous. Al is het natuurlijk wel belangrijk dat je een veilig paswoord gebruikt bij je persoonlijke account.
     
    Als je inlogt als anonymous kom je dikwijls in een directory /pub terecht. Gewone gebruikers komen eerder in een chrooted /home/<username> soort van directory terecht (al kun je daarvan het path niet zomaar zien). De chroot zorgt ervoor dat andere gebruikers jouw directory niet kunnen zien, en jij de directories van een ander niet. Je kan ook niet naar de parent directory.
     
    een voorbeeld:
    $ ftp ftp.lx800.be
    Connected to ftp.lx800.be.
    220 "Stand and deliver, login or be assimilated ..."
     
    Name (ftp.lx800.be:piet): jan
    331 Please specify the password.
    Password: <password>
    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.
    drwxr-xr-x    2 1004     100            80 Sep 16 16:31 Documents
    drwxr-xr-x    2 1004     100            48 Sep 16 16:31 bin
    drwxr-xr-x    2 1004     100            80 Sep 16 16:31 public_html
    226 Directory send OK.
     
    ftp> ls public_html
    200 PORT command successful. Consider using PASV.
    150 Here comes the directory listing.
    -rwxr-xr-x    2 1004     100            48 Sep 16 16:31 index.php
    226 Directory send OK.
     
    ftp> quit
    221 Goodbye.

    Nu gebeurt het wel eens dat we een tikfout maken in ons paswoord, of zelfs in onze gebruikersnaam. FTP verlaten is dan niet nodig. Met het commando user proberen we gewoon opnieuw:

    ...
    Name (ftp.lx800.be:piet): jan
    331 Please specify the password.
    Password: <verkeerd>
    530 Login incorrect.
    Login failed.
     
    ftp> user jan
    331 Please specify the password.
    Password: <password>
    230 Login successful.
    Remote system type is UNIX.
    Using binary mode to transfer files.
    ftp>
    ...

     

  • cd en lcd
     
    Het commando cd wordt uitgevoerd op de ftp server. Als we files willen uploaden, moeten we dikwijls ook lokaal van directory wisselen. Dat doen we met lcd. Een voorbeeld:

    ftp> lcd
    Local directory now /home/www/linux800
     
    ftp> lcd ..
    Local directory now /home/www
     
    ftp> lcd
    Local directory now /home/www
     
    ftp> cd public_html
    250 Directory successfully changed.
     
    ftp> pwd
    257 "/public_html"
    ftp>

    De voorbeelden verduidelijken de werking.
    Indien je lcd intikt zonder argument, brengt hij je lokale directory op scherm.
    pwd doet bijna hetzelfde maar dan aan de server kant.
    Omdat we aan de commandprompt niet kunnen zien waar we ons lokaal noch remote bevinden, zullen we regelmatig pwd en lcd moeten intikken.
     

  • !   ... een uitroepteken
     
    Aan de ftp-prompt heeft het uitroepteken een speciale betekenis. Het gaat commando's vooraf die uitgevoerd worden in de lokale shell op je eigen client. We kunnen dus met !ls zien wat er in onze lokale directory zit. Met !vim index.html kunnen we nog snel lokaal een file editeren, we kunnen een pas afgehaald bestand met !mv op een andere plaats zetten, enz.
    ftp> ls
    200 PORT command successful. Consider using PASV.
    150 Here comes the directory listing.
    drwxr-xr-x    2 1004     100            80 Sep 16 16:31 Documents
    drwxr-xr-x    2 1004     100            48 Sep 16 16:31 bin
    drwxr-xr-x    2 1004     100            80 Sep 16 16:31 public_html
    226 Directory send OK.
     
    ftp> cd public_html
    250 Directory successfully changed.
     
    ftp> lcd
    Local directory now /home/www/linux800
     
    ftp> !ls *ftp*
    lx-svs-info-ftpclient.html           
    lx-svs-info-vsftpd.php    
    lx-svs-prak-vsftpd.html                       
    lx-svs-info-ftpclient.php
    lx-svs-info-vsftpd-virtualhosts.html 
    lx-svs-prak-vsftpd.php
    lx-svs-info-vsftpd.html    
    lx-svs-info-vsftpd-virtualhosts.php
     
    ftp> mput lx-svs-info-*virt*
    mput lx-svs-info-apache2-virtualhosts.html? n
    mput lx-svs-info-apache2-virtualhosts.php? n
    mput lx-svs-info-vsftpd-virtualhosts.html? y
    200 PORT command successful. Consider using PASV.
    150 Ok to send data.
    226 File receive OK.
    4175 bytes sent in 0.01 secs (752.9 kB/s)
    mput lx-svs-info-vsftpd-virtualhosts.php? y
    200 PORT command successful. Consider using PASV.
    150 Ok to send data.
    226 File receive OK.
    521 bytes sent in 0.00 secs (2469.8 kB/s)
     
    ftp> quit
    221 Goodbye.

     

  • nog zeven commando's
     
    put, mput, delete, mdelete, mkdir, rmdir, chmod zijn zeven commando's die je nodig hebt om structuren aan te maken, te beheren en te verwijderen op je server. Het gebruik van deze commando's ligt voor de hand. Voor mput verwijs ik naar het voorbeeld in de vorige paragraaf. Voor de zes andere commando's nog een kort voorbeeld:
    ftp> cd public_html
    250 Directory successfully changed.
     
    ftp> lcd
    Local directory now /home/www/linux800
     
    ftp> ls
    200 PORT command successful. Consider using PASV.
    150 Here comes the directory listing.
    -rw-r--r--  1 1004  100 4175 Sep 16 17:33 lx-svs-info-vsftpd-virtualhosts.html
    -rw-------  1 1004  100  521 Sep 16 17:33 lx-svs-info-vsftpd-virtualhosts.php
    226 Directory send OK.
     
    ftp> chmod 644 lx-svs-info-vsftpd-virtualhosts.php
    200 SITE CHMOD command ok.
     
    ftp> put index.php
    local: index.php remote: index.php
    200 PORT command successful. Consider using PASV.
    150 Ok to send data.
    226 File receive OK.
    495 bytes sent in 0.01 secs (84.6 kB/s)
     
    ftp> chmod 644 index.php
    200 SITE CHMOD command ok.
     
    ftp> mkdir test
    257 "/public_html/test" created
     
    ftp> mkdir jpgs
    257 "/public_html/jpgs" created
     
    ftp> rmdir test
    250 Remove directory operation successful.
     
    ftp> mdelete *virtual*
    mdelete lx-svs-info-vsftpd-virtualhosts.html? y
    250 Delete operation successful.
    mdelete lx-svs-info-vsftpd-virtualhosts.php? y
    250 Delete operation successful.
     
    ftp> delete index.php
    250 Delete operation successful.

     

  • niet interactive modus met switches & wput
     
    Wie veel ftp uploads doet, wordt het tikken van servernaam, usernaam, paswoord en directory al snel beu.
     
    • Kunnen we ftp opnemen in een script?
       
      Dat kan, maar wees zeer voorzichtig met het opnemen van je paswoord in zo'n script. Zorg dat alleen jij leesrechten hebt op zo'n script. Zorg dat het zich in een directory bevindt waar alleen jijzelf leesrechten hebt. Een voorbeeld:
      #!/bin/bash
      HOST='ftp.lx800.be'
      USER='jan'
      PASSWD='sdf12345'
      FILE=$1
      ftp -n $HOST <<END_SCRIPT
      quote USER $USER
      quote PASS $PASSWD
      cd httpdocs
      put $FILE
      quit
      END_SCRIPT

       

    • wput is een commando op één regel ...
       
      Hoewel het gebruik van wput makkelijker is dan het script van hierboven, is het nog onveiliger.
       
      gebruik:
       
      $ wput <filenaam> ftp://<user>:<password>@ftp.example.com/httpdocs/
       
      een voorbeeld:
      $ wput -uv lx-svs-info-vsftpd.php > ftp://jan:sdf12345@ftp.lx800.be/httpdocs/
       
      --21:43:45-- `lx-svs-info-vsftpd.php'
      => ftp://ftp.lx800_be:xxxxx@97.13.196.2:21/httpdocs/lx-svs-info-vsftpd.php
      Connecting to 97.13.196.2:21... connected!
      ==> AUTH TLS ... failed (AUTH not understood).
      Logging in as jan ... Logged in!
      ==> CWD httpdocs
      ==> TYPE I ... done.
      ==> SIZE lx-svs-info-vsftpd.php ... done (508 bytes)
      Remote file size is equal to local size. Restarting at 0
      ==> PASV ... done.
      ==> STOR lx-svs-info-vsftpd.php ... done.
      Length: 508
      21:43:45 (lx-svs-info-vsftpd.php) - `10.38K/s' [508]
      FINISHED --21:43:45--
      Transfered 508 bytes in 1 file at  2.23K/s

       
      Waarom is dit wput-commando onveilig?
      Je paswoord komt terecht in .bash_history
      en iemand die ps -aux intikt op dezelfde computer terwijl wput loopt ziet jouw hele commando, inclusief je paswoord.
       
      Gebruik wput dan ook alleen op je eigen single user pc.
       
      Meer info over wput: debuntu.org/wget-wput-or-how-to-easily-download-upload-over-internet