Vsftpd kasutamine Debian Lennyga
Sisukord
- 1 Sissejuhatus
- 2 Tarkvara paigaldamine
- 3 Debian Lenny
- 4 FreeBSD
- 5 FTP tööpõhimõte
- 6 vsftpd serveri seadistamise võimalused
- 7 Anonüümse vsftpd serveri seadistamine
- 8 Lokaalsete kasutajatega vsftpd serveri seadistamine
- 9 Virtuaalsete kasutajatega vsftpd serveri seadistamine
- 10 Mitme vsftpd serveri kasutamine ühes arvutis
- 11 SSL/TLS vsftpd serveri seadistamine
- 12 ftp serveri kasutamine NAT tulemüüri taga
- 13 Märkused
- 14 Kasulikud lisamaterjalid
Sissejuhatus
FTP server võimaldab üle võrgu serveri failisüsteemi andmeid üles ja alla kopeerida ning seejuures kontrollida kasutajate ligipääse. FTP on nö klassikaline teenus võrgus ja vsftpd http://vsftpd.beasts.org/ on eeskujulik ftp serveri tarkvara, mille autorid on aktsenteerinud turvalisust ja jõudlust nt enamikul juhutumitel praktilisel kasutamisel ebaoluliseks kujunevatele funktsionaalsetele omadustele.
Tarkvara paigaldamine
Debian Lenny
Debian Lenny paketihaldus sisaldab vsftp tarkvara v. 2.0.7 ja paigaldamiseks sobib öelda
# apt-get install vsftpd
Tarkvara paigaldamise käigus lisatakse süsteemi kasutaja ftp, kes kuulub gruppi nogroup.
Serveri seisukohast ei ole see oluline, aga praktiliselt ehk on katsetamiseks abiks ka paigaldada ftp serverisse ftp klient, operatsioonisüsteem Debian vaikimisi ei sisalda ftp kliendi, paigaldamiseks sobib öelda nt
# apt-get install ftp
FreeBSD
# cd /usr/ports/ftp/vsftpd && make install clean
FTP tööpõhimõte
FTP protokoll on ajaloolisetel põhjustel erinev paljudest teistest klient-server protokollidest selles osas, et kliendi ja serveri vahelisel suhtlemisel kasutatakse üle tcp kahte suhtluskanalit
- juhtimiskanal - moodustatakse alati kliendi pöördumisel oma mitteprivilegeeritud pordilt serveri 21/tcp porti (vaikimisi)
- andmevahetuse kanal - moodustatakse aktiivsel juhul serveri pöördumisel klindi poole ja passiivsel juhul kliendi pöördumisel serveri poole
Andmevahetuse kanali moodustamiseks on kaks võimalust
- aktiivne ftp - peale kliendi pöördumist juhtimiskanalil pöördub server oma 20/tcp src pordilt kliendi näidatud kliendi arvuti /tcp pordi poole
- passiive ftp - peale kliendi pöördumist lepivad klient ja serveri kokku millise serveri /tcp pordi poole pöördub klienti andmevahetuseks
Seesugune asjakorraldus teeb tulemüüride seadistamise keerulisemaks, lahendust OpenBSD tulemüüri puhul on kirjeldatud aadressil http://www.openbsd.org/faq/pf/ftp.html.
Passiivne ftp
klient server ___ ___ | |-------- internet ----------| | |___| |___| 41999/tcp (suvaline) -----> 21/tcp 42999/tcp (suvaline) -----> 21000/tcp (kokkulepitud)
- esmalt algatab klienti kontrollkanali ühenduse serveri 21/tcp porti, seda ühendust mööda liiguvad ftp käsud, ls, cd, pwd jt ning lepitakse kokku andmevahetuse kanali port
- seejärel algatab klient andmevahtuse pidamiseks ühenduse serveri 21000/tcp porti, mille kasutamine lepiti kontrollkanalil kokku (ftp serveri seadistuses saab tavaliselt fikseerida pordide vahemiku, millisest saab server kliendiga porte kokku leppida)
Aktiivne ftp
klient server ___ ___ | |-------- internet ----------| | |___| |___| 41999/tcp (suvaline) -----> 21/tcp 21000/tcp (kokkulepitud) <----- 20/tcp
- esmalt algatab klienti kontrollkanali ühenduse serveri 21/tcp porti, seda ühendust mööda liiguvad ftp käsud, ls, cd, pwd jt ning lepitakse kokku andmevahetuse kanali port
- seejärel algatab server pordilt 20/tcp andmevahtuse pidamiseks ühenduse kliendi 21000/tcp porti, mille kasutamine lepiti kontrollkanalil kokku
- nn legacy juhtumitel algatab aktiivsel juhtumil ftp server andmeühenduse oma 20/tcp pordilt, kuid see ei pea tingimata nii olema, ftp serverite seadistustes saab seda kontrollida tavaliselt; ftp-proxy programmil kontrollib seda -r võti
vsftpd serveri seadistamise võimalused
vsftpd serveri tööd juhib seadistusfail /etc/vsftpd.conf ja serverit saab käivitada
- inetd superserveri abil
- iseseisva deemonina
vsftpd kasutajad jagunevad kolme gruppi
- anonüümne kasutaja - serveri teenuse pakkuja ei ole spetsiaalselt leppinud kasutajaga ligipääsu kokku, traditsiooniliselt kasutab kasutaja kasutajanimena 'ftp' ning paroolina oma eposti aadressi (viimasel ajal võib selle jätta näitamata)
- lokaalsed kasutajad - operatsioonisüsteemi NSS süsteemile teadaolevad kasutajad, nt need, mis esinevad 'getent passwd' väljundid
- virtuaalsed kasutajad - kasutajad, mis on olemas tänu /etc/pam.d/vsftpd mooduli abil välise kasutajate andmebaasi ühendusele, nt LDAP kataloog ja mis samal ajal puuduvad NSS süsteemist
Lokaalsete ja virtuaalsete kasutajate puhul tuleb tähele panna, et kui sama LDAP kataloogi vastu on seadistatud käima nii NSS kui /etc/pam.d/vsftpd, siis muidu virtuaalsed kasutajad on lokaalsed.
Üks oluline virtuaalsete ja lokaalsete kasutajate erinevus seisneb selles, milline on kasutaja kodukataloogi nimi
- virtuaalsetel kasutajatel saab kodukataloogiks seadistada /katalooginimi/virtuaalse-kasutaja-nimi kujul esineva katalooginime
- lokaalsetel kasutajatel on kodukataloogiks /etc/passwd failis näidatud kodukataloog või kui NSS on seadistatud vastu LDAP'i siis nt homeDirectory atribuudi väärtus
vsftpd serverit saab käivitada nt selliselt
- anonüümne ftp server andmete alla kopeerimiseks - kõik ftp serveri kasutajad on ftp failisüsteemi operatsioonide jaoks teisendatud üheks süsteemi kasutajaks, nt ftp ning sellele kasutajale on lubatud liikuda nn ftp serveri juurfailisüsteemiks näidatud kataloogi all ning kopeerida faile; selliselt seadistatakse tavaliselt nt tarkvara ftp mirrorid
- anonüümne ftp server andmete alla ja üles kopeerimiseks - sarnane eelmisele kuid teatud kataloogidesse saab anonüümne kasutaja kopeerida ka andmeid ülesse; tavaliselt on need nn pimedad kataloogid, st selliselt töötavate kataloogide nime on vaja eelnevalt teada kusjuures ftp serveri kasutaja ei saa katalooge juurde moodustada ning ei saa kord üles kopeeritud andmed kustutada
- kasutajaid autentiv ftp server - ftp server autendib kasutajaid, kuid muul viisil käitub sarnaselt anonüümsele ftp serverile; nt autenditud kasutajad saavad ainult andmeid alla kopeerida; selliselt sobib seadistada mingi piiratud ligipääsuga andmete jagamine kui otsustatakse kasutada ftp protokolli ligipääsuks
- kasutajaid autentiv ftp server - kasutaja sisse ftp serverisse sisse logida oma kasutajanime ja parooliga ning seejärel toimetada oma personaalses kodukataloogis kuhu teistel ftp serveri kasutajatel puudub ligipääs; andmeid on võimalik üles ja alla laadida, moodustada katalooge ning kustutada andmeid serverist; selliselt seadistatakse tavaliselt käima nt veebimajutuse süsteemide ligipääsukontod kui otsustatakse kasutada ftp protokolli ligipääsuks
ftp serveri seadistusfailis /etc/vsftpd.conf kasutatada olevad parameetrid jagatakse kolme gruppi
- tõeväärtuse tüüpi parameetrid (ingl. k. boolean)
- numbrilised parameetrid
- tekstilised parameetrid
Anonüümse vsftpd serveri seadistamine
Vaikimisi vsftpd seadistusfail /etc/vsftpd.conf vastab anonüümse ligipääsuga ftp serverile, st ftp server on selliste omadustega
- serverist saavad kopeerida andmeid anonüümsed kasutajad (sisselogimiseks tuleb traditsiooniliselt sisestada kasutajanimi ftp ning parooliks kirjutada oma eposti aadress või niisama enteriga mööda minna)
- vaikimisi serveeritakse faile üle ftp protokolli ftp kasutaja kodukataloogist /home/ftp
- lokaalne ega virtuaalne kasutaja ei saa sisse logida
# egrep -v "^$|^#" vsftpd.conf listen=YES anonymous_enable=YES dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES secure_chroot_dir=/var/run/vsftpd pam_service_name=vsftpd rsa_cert_file=/etc/ssl/certs/vsftpd.pem
Kataloogi saab muuta muutes /etc/passwd failis ftp kasutaja kodukataloogi asukohta.
Logi tekib faili
# cat /var/log/vsftpd.log Fri Jul 31 19:49:04 2009 [pid 24044] CONNECT: Client "127.0.0.1" Fri Jul 31 19:49:06 2009 [pid 24043] [ftp] OK LOGIN: Client "127.0.0.1", anon password "?"
Lisaks saab privileege eemalda ftp serverilt kahe täiendava kasutaja-grupi lisamisega
ftpsecure:x:1006:109::/home/ftpsecure:/bin/false ftpanon:x:1007:110::/srv/ftp:/bin/false
ning lisades seadistusfaili read
nopriv_user=ftpsecure ftp_username=ftpanon
Nii seadistatud vsftpd serveri töö paistab selline
# ps auxf | grep vsftpd root 10771 0.0 0.2 21524 1384 ? S 19:01 0:00 /usr/sbin/vsftpd 1006 10780 0.0 0.2 27792 1064 ? Ss 19:01 0:00 \_ /usr/sbin/vsftpd ftpanon 10782 0.0 0.1 27816 948 ? S 19:01 0:00 | \_ /usr/sbin/vsftpd 1006 10787 0.0 0.2 27792 1064 ? Ss 19:02 0:00 \_ /usr/sbin/vsftpd ftpanon 10789 0.0 0.1 27816 948 ? S 19:02 0:00 | \_ /usr/sbin/vsftpd
kus
- juurkasutaja protsessist forkitakse iga kliendi jaoks kaks vsftpd protsessi, mis töötavad privilegeerimata kasutajatena
Lokaalsete kasutajatega vsftpd serveri seadistamine
Lokaalsete kasutajatega kasutamiseks sobib kasutada vaikimisi /etc/pam.d/vsftpd, mis sisaldab
auth required pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed # Standard blurb. @include common-account @include common-session @include common-auth auth required pam_shells.so
ning /etc/vsftpd.conf sisuga
# egrep -v "^$|^#" /etc/vsftpd.conf listen=YES anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 anon_mkdir_write_enable=NO anon_other_write_enable=NO dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES chroot_local_user=YES secure_chroot_dir=/var/run/vsftpd pam_service_name=vsftpd
FreeBSD puhul pole seejuures vaja eraldi pami all seadistusi teha ning ka vsftpd konfifailis pam_service_name eraldi defineerida.
Soovites tekitada lokaalseid kasutajaid kes saavad logida vaid ftp kaudu tuleb tekitada kasutaja tavalisel viisi kuid lisades tema shelliks /bin/nologin, sellisel juhul kasutaja enam sshd kasutada ei saan.
Kusjuures, kui NSS seadistusfailis /etc/nsswitch.conf on kirjeldatud LDAP kataloogi kasutamine ning /etc/libnss-ldap.conf failis bind'itakse administraatorina
binddn cn=admin,dc=auul bindpw ldapparool
siis on ka LDAP kasutajad lokaalsed. Tundub, et LDAP kasutaja lokaalsus on olemas just siis kui getent shadow abil on näha kasutaja parooli küptogramm, selle tagab piisava ligipääsuga kasutaja kasutamine libnss-ldap.conf failis
# getent shadow | grep mart mart:qP9QTbkwrd1HM:14456::::::0
NSS kaudu LDAPist tuleva kasutaja parool peab olema sobivalt kodeeritud, nt CRYPT kasutamine LDAP brauseris Apache Directory Studio.
Lokaalsete kasutajate kodukataloogiks on nende NSS kaudu tulev kodukataloog, kas /etc/passwd failist või LDAP kataloogist atribuut homeDirectory.
Virtuaalsete kasutajatega vsftpd serveri seadistamine
Virtuaalseteks vsftpd kasutajateks nimetatakse selliseid kasutajaid, mida pole kirjeldatud ftp serveri /etc/passwd failis, õigemini, mida ei tea NSS teenus, aga mis esinevad nt /etc/pam.d/vsftpd kaudu kättesaadavaks tehtud andmebaasis, nt LDAP kataloogis.
Olgu eesmärgiks selliste omadustega vsftpd serveri seadistamine
- sisse logida saavad virtuaalsed kasutajad, nt LDAP kataloogist
- sisselogitud kasutaja saab toimetada oma kodukataloogis
- sisselogitud kasutaja saab faile serverisse kopeerida
- anonüümne kasutaja ei saa serverisse sisse logida
Virtuaalsete kasutajate kasutamise peamine eelis seisneb asjaolus, et sellised kasutajad esinevad süsteemi kasutajatena ainult konkreetse teenuse jaoks, nt ei saa nad ssh kaudu sisse logida.
Nt selline seadistusfail sobib eesmärgi täitmiseks
# egrep -v "^$|^#" vsftpd.conf listen=YES anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 anon_mkdir_write_enable=NO anon_other_write_enable=NO dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES chroot_local_user=YES secure_chroot_dir=/var/run/vsftpd pam_service_name=vsftpd virtual_use_local_privs=YES
kusjuures tarvilik on sobiv LDAP kataloogi ja selle kataloogi kliendiks olemise seadistus, mida on kirjeldatud palas OpenLDAP kasutamine Debianiga ning lisaks sellise sisuga /etc/pam.d/vsftpd seadistusfail
# cat /etc/pam.d/vsftpd auth required pam_ldap.so account required pam_ldap.so
Virtuaalse kasutaja kodukataloogi nimi konstrueeritakse etteantud prefiksist ning kasutajanimest automaatselt.
Mitme vsftpd serveri kasutamine ühes arvutis
FTP puhul ei ole üldiselt mitme erineva seadistusega serveri pidamine samal nn interneti soketil ehk ip aadressil ja pordil võimalik nii nagu seda saab teha nt http serveriga. Põhjuseks on, et ftp puhul puudub sarnaselt http protokollile nn 'Host: domeeninimi' päise kasutamise võimalus serverile esitatavates päringutes, mille alusel saab server erinevatele nn virtuaalhostidele mõeldud päringuid eristada.
Kui soovitakse kasutada samas arvutis erinevate seadistustega ftp servereid, siis tuleb nad käivitada erinevatel soketitel, selleks on kaks võimalust
- käivitada eksemplarid samal ip aadressil ja erinevatel portidel - kuna ftp server kasutab andmevahetuseks kahte kahe ühenduskanalit, siis võib erineva pordi kasutamine tekitada omajagu lisa segadust
- käivitada eksemplarid erinevatel ip aadressidel ja samadel portidel - soovitatav valik
Teise eksemplari käivitusskripti saab olemasolevat kopeerides ning tehes vajalikud asendused, nt
# diff vsftpd* 19c19 < if [ -f /etc/vsftpd.conf ] && ! egrep -iq "^ *listen(_ipv6)? *= *yes" /etc/vsftpd.conf; then --- > if [ -f /etc/vsftpd-file.loomaaed.tartu.ee.conf ] && ! egrep -iq "^ *listen(_ipv6)? *= *yes" /etc/vsftpd-file.loomaaed.tartu.ee.conf; then 24c24 < NAME=vsftpd --- > NAME=vsftpd-file.loomaaed.tartu.ee 33c33 < start-stop-daemon --start --background -m --pidfile /var/run/vsftpd/vsftpd.pid --exec $DAEMON --- > start-stop-daemon --start --background -m --pidfile /var/run/vsftpd/vsftpd-file.loomaaed.tartu.ee.pid --exec $DAEMON /etc/vsftpd-file.loomaaed.tartu.ee.conf 38,39c38,39 < start-stop-daemon --stop --pidfile /var/run/vsftpd/vsftpd.pid --oknodo --exec $DAEMON < rm -f /var/run/vsftpd/vsftpd.pid --- > start-stop-daemon --stop --pidfile /var/run/vsftpd/vsftpd-file.loomaaed.tartu.ee.pid --oknodo --exec $DAEMON > rm -f /var/run/vsftpd/vsftpd-file.loomaaed.tartu.ee.pid 44,46c44,46 < start-stop-daemon --stop --pidfile /var/run/vsftpd/vsftpd.pid --oknodo --exec $DAEMON < rm -f /var/run/vsftpd/vsftpd.pid < start-stop-daemon --start --background -m --pidfile /var/run/vsftpd/vsftpd.pid --exec $DAEMON --- > start-stop-daemon --stop --pidfile /var/run/vsftpd/vsftpd-file.loomaaed.tartu.ee.pid --oknodo --exec $DAEMON > rm -f /var/run/vsftpd/vsftpd-file.loomaaed.tartu.ee.pid > start-stop-daemon --start --background -m --pidfile /var/run/vsftpd/vsftpd-file.loomaaed.tartu.ee.pid --exec $DAEMON 51c51 < start-stop-daemon --stop --pidfile /var/run/vsftpd/vsftpd.pid --signal 1 --exec $DAEMON --- > start-stop-daemon --stop --pidfile /var/run/vsftpd/vsftpd-file.loomaaed.tartu.ee.pid --signal 1 --exec $DAEMON
kus
- /var/run/vsftpd/vsftpd.pid - protsessi PID
- /etc/vsftpd.conf - seadistusfail
Lisaks tuleb seadistusfaili seest muuta ära logi jms olulised kohad.
SSL/TLS vsftpd serveri seadistamine
Debiani pakett sisaldab SSL/TLS tuge, mis ei ole vaikimisi sisselülitatud. Kasutamiseks tuleb seadistusfaili lisada nt read
rsa_cert_file=/etc/ssl/certs/vsftpd.pem ssl_enable=YES
kus failis vsftpd.pem sisaldub nii sertifikaadiahel kui võti, faili alguses võti ja seejärel kahaneva täpsusega kuni ca juurikani PKI ahel.
Vastava kliendina sobib kasutada paketist ftp-ssl paigaldatud ftp nimelist klientprogrammi, mis asendab ftp paketist paigaldatud ftp. ftp-ssl ftp programm käitub vaikimisi selliselt, et võimalusel kasutatakse turvalist andmevahetuskanalit, aga kui see pole võimalik, toimub andmevahetus nö tavaliselt. Kasutamine näeb välja nt selline
$ ftp ftp.loomaaed.tartu.ee Connected to 192.168.1.4. 220 (vsFTPd 2.0.7) Name (192.168.1.4:mart): mart 234 Proceed with negotiation. [SSL Cipher DES-CBC3-SHA] 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp>
TLS/SSL kasutamist saab kontrollida nii serveri kui kliendi poolelt hulga parameetritega, nt kas kliendil on serverit lubatud kasutada ainult üle turvalise kanali.
TLS/SSL sisselülitamisel tuleb arvestada, et seejuures lülitatakse käima hulk täiendavat OpenSSL koodi, mis on küll kvaliteetne, aga põhimõtteliselt muudab vsftpd serveri haavatavamaks.
ftp serveri kasutamine NAT tulemüüri taga
Iseenesest privaatse ip aadressiga FTP serveri kasutamisel NAT tulemüüri taga tuleb
- näidata lisaks muudele nö tavalistele seadistusfaili direktiividele parameeteriga ftp serveri avalik aadress selleks, et passiivset andmevahetuse režiimi kasutavad kliendid saaksid teada ftp serveri poole pöördumiseks korrektse ip aaddressi (nb! 10.0.21.254 on küll faktiliselt privaatne aadress, aga sisuliselt avalik ja küllap praktilistel juhtumitel on ka avalik)
pasv_address=10.0.21.254
- seadistada sobivalt tulemüüri paketifilter, nt nagu on kirjeldatud palas FTP kasutamine OpenBSD paketifiltriga
Märkused
- Selleks, et tarkvara peeglite pidamisel Google vms otsingumootor peeglit ära ei indekseeriks on otstarbekas kasutada peegli juurikas faili
$ cat /srv/ftp/robots.txt User-agent: * Disallow: /
- Selleks, et näidata, millises vahemikus asuvaid porte kasutab server passiivseid ühendusi pidavate klientidega, sobib kasutada nt sellised direktiive
pasv_min_port=20000 pasv_max_port=50000