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). Dechroot
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
enlcd
Het commandocd
wordt uitgevoerd op de ftp server. Als we files willen uploaden, moeten we dikwijls ook lokaal van directory wisselen. Dat doen we metlcd
. 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 jelcd
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 regelmatigpwd
enlcd
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. Voormput
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 vanwput
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 ditwput
-commando onveilig?
Je paswoord komt terecht in.bash_history
en iemand dieps -aux
intikt op dezelfde computer terwijlwput
loopt ziet jouw hele commando, inclusief je paswoord.
Gebruikwput
dan ook alleen op je eigen single user pc.
Meer info overwput
: debuntu.org/wget-wput-or-how-to-easily-download-upload-over-internet
- Kunnen we ftp opnemen in een script?