OpenSSH administreerimine
Sisukord
[peida]- 1 Sissejuhatus
- 2 OpenSSH paigaldamine
- 3 OpenSSH seadistamine
- 4 SFTP serveri seadistamine
- 5 SSHFS
- 6 OpenSSH kasutajate chrootimine
- 7 PPP kasutamine üle SSH
- 8 OpenSSH tunneli kasutamine
- 9 OpenSSH serverile kasutajate ligipääsemise kontrollimine
- 10 TCP Wrapperi kasutamine
- 11 Kasulikud lisamaterjalid
- 12 Lingid
Sissejuhatus
OpenSSH http://www.openssh.org/ tarkvara võimaldab turvalist kaugligipääsu võrku ühendatud seadmetele, nt arvutitele ja ruuteritele. OpenSSH on üks OpenBSD projekti ettevõtmistest, mis on osutunud niivõrd populaarseks, et sellest on kujunenud praktiliselt kõigi 2009 aastal kasutuses olevate vabade operatsioonisüsteemide standardne kauguligipääsu korraldamise instrument. Lisaks on OpenSSH kasutuses ka mitmete mitte-vabade lahenduste juures, nt erinevate tootjate ruuterites.
Peale üle võrgu nö teise arvuti käsureale jõudmise sisaldab OpenSSH muu hulga selliseid võimalusi
- andmete kopeerimine - sftp, scp
- turvaline transport muudele programmidele - rsync, subversion, pppd, X Window System
- portide edasisuunamine - võtmetega -L ja -R
- L2 ja L3 tunnelite tegemine - direktiiviga Tunnel või pppd-üle-ssh lahendus
- SOCKS server
- failisüsteemi külgeühendamine - sshfs (FUSE tehnoloogia abil)
OpenSSH kasutamist kirjeldatakse Kuutõrvajas kahes tekstis
- käesolev tekst kirjeldab OpenSSH serveri haldamist ning keerulisemad kasutusvõimalusi
- aadressil OpenSSH kasutamine asuv tekst on mõeldud nö süsteemi tavakasutajatele oluliste ülesannete lahendamiseks OpenSSH abil
OpenSSH paigaldamine
Debian Lenny paketihalduses on olemas OpenSSH tarkvara versioon 5.1, tarkvara paigaldamiseks öelda
# apt-get install openssh-server
mille paigaldamise käigus paigaldatakse ka pakett openssh-client.
Erinevatel muudel Linuxi distributsioonidel (gentoo, suse jms) on see üldiselt juba vaikimisi paigaldatud. Ka FreeBSD sisaldab enda baasinstallatsioonis openssh serverit ning klienti ja seejuures on seal leiduvad rajad identsed linuxiliste omaga st /etc/ssh seadistusfailide asukohaks jms
OpenSSH seadistamine
OpenSSH serveri tööd kontrollib seadistusfail
/etc/ssh/sshd_config
Süsteemis kasutatava OpenSSH kliendi tööd juhib globaalselst seadistusfail
/etc/ssh/ssh_config
kusjuures lisaks kontrollivad klientide SSH kasutamist nende kodukataloogis asuva kataloog .ssh sees sisalduvad failid
...
Hosti võtmete genereerimine
TODO
SFTP serveri seadistamine
OpenSSH SFTP alamsüsteemi (ingl. k. subsystem) kasutamiseks peab OpenSSH serveri seadistusfailis olema rida
Subsystem sftp /usr/lib/openssh/sftp-server
või
Subsystem sftp internal-sftp
SFTP kliendi teenindamiseks käivitatakse vastavalt eraldi protsess või toimub teenindamine sshd sees sisalduvate sftp vahenditega.
SSHFS
SSHFS on üks FUSE (Filesystem in Userspace) kasutusjuhtum. Kui tavaliselt toimub failisüsteemidega tegelemine, nt külgeühendamine, privilegeeritud kasujana ning nn kernel-space'is, siis FUSE ( http://fuse.sourceforge.net/ tehnika võimaldab seda teha tavakasutajana user-space'is. Debian Lenny tuum sisaldab FUSE tuge ning paketihaldusest saab paigaldada SSHFS öeldes, kusjuures lisaks paigaldatakse FUSE üldkasutatavad utiliidid paketist fuse-utils
# apt-get install sshfs
FreeBSD's asub see ports harus sysutils/fusefs-sshfs
Kasutamise peab kasutaja kuuluma gruppi fuse, külgeühendamiseks sobib öelda
$ sshfs mart@loomaaed.tartu.ee:/katalooginimi-ssh-serveris /katalooginimi-kohalikus-arvutis
Lahtiühendamiseks
$ fusermount -u /katalooginimi-kohalikus-arvutis
OpenSSH kasutajate chrootimine
Debian Lenny sisaldab piisavalt uut OpenSSH tarkvara versiooni (OpenSSL 0.9.8g), mis võimaldab kasutada ChrootDirectory direktiivi kasutajate chrootimiseks
$ ssh -V OpenSSH_5.1p1 Debian-5, OpenSSL 0.9.8g 19 Oct 2007
Kasutamiseks tuleb
- moodustada chroot kasutajate kodukataloogidesse chroot keskkond, nt makejail programmi abil; makejail kasutamist on kirjeldatud tekstis Operatsioonisüsteemi Debian GNU/Linux kasutamine#makejail abil chroot keskkonna moodustamine
- seadistada OpenSSH server kasutama vastavate kasutajate jaoks ChrootDirectory direktiivi
# cat /etc/ssh/sshd_config ... Subsystem sftp internal-sftp ... Match User mart,priit ChrootDirectory /home/%u AllowTCPForwarding no X11Forwarding no
kusjuures Match sektsioon peab esinema seadistusfaili lõpus, antud juhul on lisaks neil kasutajatel keelatud tcp ja x edasisuunamine.
- kasutaja kodukataloogi ja sellest üles jäävate kataloogide omanik:grupp peab olema root:root ning neisse kataloogidesse ei tohi saada keegi peale juurkasutaja kirjutada
Tulemusena saab kasutaja süsteemi sisse logida ssh ja sftp kliendiga ning see kataloog, mis on süsteemi jaoks tema kodukataloog on tema jaoks tema juurkataloog. Oluline on seejuures, et tavaliseks ssh ligipääsuks ei ole tarvis chroot keskkonda tekitada mingeid seadmeid, ega pole vaja ühendada külge mingeid failisüsteeme (nt /proc, /dev/pty vms) - tähendab, kasutaja ei saa süsteemis liialt ringi uurida ka siis, kui ta omale ise nt netstat ja ps utiliidid kopeerib.
scp klienti selliselt seadistatud serveriga kasutada ei saa, tundub, et scp eeldab paremat varustatust serveri poolelt, muuhulgas /dev/null seadet ja scp programmi). Praktiliselt ehk ei ole tingimata scp kasutamise võimalus ka väga oluline kuna nt WinSCP klient oskab sftp protokolli samuti kasutada.
Kui kasutajal on vajalik porti edasi suunata, siis tuleb asenda
AllowTCPForwarding yes
ning sõltuvalt chroot keskkonna omadustest, st kas seal nimed lahenduvad öelda nt
$ ssh mart@valis.loomaaed.tartu.ee -L 2000:localhost:3306
või
$ ssh mart@valis.loomaaed.tartu.ee -L 2000:127.0.0.1:3306
PPP kasutamine üle SSH
Üle kahe arvuti vahelise ssh sessiooni PPP ühenduse tekitamiseks peab mõlemisse arvutisse olema paigaldatud lisaks OpenSSH tarkvarale ppp pakett, nt Debian Lenny keskkonnas öeldes
# apt-get install ppp
Kasutamiseks sobivad vaikeseadistused ja PPP ühenduse tekitamiseks tuleb öelda ühes arvutis
# pppd -detach noauth pty "ssh -t root@teine.arvuti pppd passive noauth" 10.100.0.1:10.100.0.2
kus
- -detach - pppd protsess jääb nö esiplaanile (ingl. k. foreground) käima
- noauth - ppp ei teosta autentimist
- 10.100.0.1:10.100.0.2 - vastavalt ühe ja teise arvuti ppp0 seadme ip aadress
Tulemusena tekivad arvutitesse sarnased seadmed
ppp0 Link encap:Point-to-Point Protocol inet addr:10.100.0.2 P-t-P:10.100.0.1 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1 RX packets:7 errors:0 dropped:0 overruns:0 frame:0 TX packets:7 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:3 RX bytes:240 (240.0 B) TX bytes:246 (246.0 B)
Teise arvuti küljes olevate võrkude kasutamiseks tuleb
- esimeses arvutis seadistada sobiv ruuting
- teises arvutis lubada ip forwarding
Esitatud lahendus sobib nö ad-hoc võrguühenduse tekitamiseks ja sellel on lisaks tõenäoliselt pedagoogiline väärtus.
OpenSSH tunneli kasutamine
OpenSSH sisemiste vahenditega saab moodustada kahes kihis töötavaid tunneleid
- L2 - nn link layer ehk etherneti kiht
- L3 - nn ip layer ehk ip pakketide kiht
Selliseid tunnelid sobivad nö ad-hoc võrguühenduse tekitamiseks ja lisaks on neil tõenäoliselt pedagoogiline väärtus.
Tunneli kasutamiseks peab ssh deemoni seadistusfailis olema näitatud parameeter PermitTunnel
PermitTunnel=yes
Ruuditud tunnel
Logida kliendist serverisse nt selliselt
# ssh -o Tunnel=point-to-point -w any:any root@192.168.1.4
kus kasutatud võtmetel on selline tähendus
- -w any:any - kasutada kummalgi pool järmist kasutamata tun seadet
Tulemusena tekivad mõlemas arvutis juurde tun nimelised seadmed
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 POINTOPOINT NOARP MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:500 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Seejärel tuleb need seadmed sobivalt seadistada, nt kliendis öelda
# ifconfig tun1 10.100.0.10 pointopoint 10.100.0.11
ning serveris öelda
# ifconfig tun1 10.100.0.11 pointopoint 10.100.0.10
Sillatud tunnel
Olgu eesmärgiks lülitada klientarvuti üle avaliku võrgu tulemüüri taga olevasse võrku, sedasi
Klient ___ | | tap0, 10.0.5.200 |___| | .. internet .. | | _|_ 192.168.102.35, valis.loomaaed.tartu.ee | | tulemüür, OpenSSH server |___| | br0 = eth0, tap0 ___ | ___ | |----------------|----------------| | |___| |___| eth0, 10.0.5.25 eth0, 10.0.5.26
Kliendi poolel tuleb öelda
# ssh -o Tunnel=ethernet -w any:any root@192.168.1.4
ning seadistada tekkinud tap0 seadmele ip aadress kohtvorgust
# ifconfig tap0 10.0.5.200 netmask 255.255.255.0
Serveri poolel tuleb moodustada linuxis sild br0 järgnevalt
# brctl addbr br0 # brctl addif br0 tap0 # brctl addif br0 eth0
Kusjuures serveri tap0 ja br0 seadmetel ei ole ip aadresse. Lisaks peab vajadusel br0 seadme üles tõstma
# ifconfig br0 up
FreeBSDs lükkame kõigepealt vajalikud moodulid kernelisse
kldload if_bridge kldload if_tap
Edasi teeme silla ja ühendame virtuaalse seadme (tap0) füüsilise seadmega (em0)
ifconfig tap0 create up ifconfig bridge0 create ifconfig bridge0 addm tap0 addm em0 up
Tulemusena saab klientarvutist kasutada 10.0.5 võrgu teenuseid ning ka vastupidi, efektiivselt asub klient ja muud kontvõrgu arvutid samab subnetis.
Sellise lahenduse puhul on iseloomulik, et iga kliendiga seoses tekib OpenSSH serverisse juurde uus tap seade.
OpenSSH serverile kasutajate ligipääsemise kontrollimine
OpenSSH serveri kaudu süsteemi sisselogimist saab üldiselt piirata kahe instrumendiga
- OpenSSH seadistusfail - /etc/ssh/sshd_config
- PAM seadistufailid - /etc/pam.d/ssh ja /etc/security/access.conf
OpenSSH seadistusfail /etc/ssh/sshd_config
Vaikimisi saavad OpenSSH serveri kaudu süsteemi sisse logida kõik kasutajad. Parameetri AllowUsers kasutamisega saab kontrollida, millised kasutajad ja millistelt ip aadressidelt pöördudes saavad süsteemi üle ssh kasutada. Nt
PermitRootLogin yes ... AllowUsers root@varundus.loomaaed.tartu.ee root@localhost.localdomain mart
tähendab, et
- juurkasutaja saab sisse pöördudes root@localhost ning varundusserverist
- kasutaja mart saab pöörduda kõikjalt
- teised kasutajad ssh'ga süsteem sisse logida ei saa
Ainult võtmega sisselogimine
Suhteliselt turvaline on keelata kasutajatele ssh serverile parooli alusel ligipääs ning lubada kasutada ainult võtmetel põhinevat autentimist. Selleks sobib kasutada ssh serveri seadistusfailis /etc/ssh/sshd_config rida
PasswordAuthentication no
Selleks, et veenduda, et on saavutatud soovitav tulemus sobib kasutada ssh klienti -v võtmega ning pöörata tähelepanu toetatud autentimise võimalustele, alltoodud juhtum vastab olukorrale kui kasutajal puudub võti
$ ssh root@192.168.1.241 -v ... debug1: Authentications that can continue: publickey debug1: Next authentication method: publickey debug1: Trying private key: /root/.ssh/identity debug1: Offering public key: /root/.ssh/id_rsa debug1: Authentications that can continue: publickey debug1: Trying private key: /root/.ssh/id_dsa debug1: No more authentication methods to try. Permission denied (publickey). $
Match direktiivi abil saab korraldada, et mõnele kasutajale on lubatud parooli kasutada ja mõnele teisele mitte. Nt juurkasutaja saab sisse ainult võtmetega (täpsemini, ei saa sisse parooliga)
PasswordAuthentication yes ... Match User root PasswordAuthentication no
Selleks, et ainult root kasutaja ei saaks parooliga sisse, st saab sisse nt sertifikaadiga sobib kasutada rida
PermitRootLogin without-password
PAM
Üheks võimalused PAM abil kontrollida ssh serverile ligipääsu on pam_access mooduli abil. Vaikimisi on Debiani /etc/ssh/sshd_config seadistusfailis
UsePAM yes
ning /etc/pam.d/ssh sisaldab sellist soovitust
# Uncomment and edit /etc/security/access.conf if you need to set complex # access limits that are hard to express in sshd_config. # account required pam_access.so
Näiteks selline /etc/security/access.conf sisu võimaldab logida sisse juurkasutajana ainult 192.168.10.0/24
+ : root : 192.168.10.0/24 - : root : ALL
kus
- esimene välja väärtus (+ või -) määrab, kas ligipääsu lubatakse või keelatakse
- teise välja väärtus näitab kasutajanime
- kolmanda välja väärtus näitab kust pöördutakse
- esimene klappiva kasutajanime ja aadressiga rida rakendub
PAM abil ei saa täpsustada, millist autentimise mehhanismi kasutaja pöördumisel tohib kasutada.
TCP Wrapperi kasutamine
Kui ssh klient jääb pöördumisel nii seisma töötab serveri TCP Wrapper
# ssh root@172.17.35.19 -v OpenSSH_5.5p1 Debian-6, OpenSSL 0.9.8o 01 Jun 2010 debug1: Reading configuration data /etc/ssh/ssh_config debug1: Applying options for * debug1: Connecting to 172.17.35.19 [172.17.35.19] port 22. debug1: Connection established. debug1: permanently_set_uid: 0/0 debug1: identity file /root/.ssh/id_rsa type -1 debug1: identity file /root/.ssh/id_rsa-cert type -1 debug1: identity file /root/.ssh/id_dsa type -1 debug1: identity file /root/.ssh/id_dsa-cert type -1
Leenvendamiseks tuleb ssh serveris kohendada /etc/hosts.allow ja /etc/hosts.deny faili.
Kasulikud lisamaterjalid
- OpenSSH kasutamine
- SOCKS proxy kasutamine
- Sertifikaadid Sertifitseerimiskeskuse loomine ja sertifikaadi kinnitamine
- sshd mysql Mysql ja pam abil sshd autentimise korraldamine
- Openssh chroot Kasutaja chrootimine openssh patchi kasutades kodukataloogi
- rsync Vabavaraline failide ja kaustade sünkroniseerimise ja backupimise vahend
- PPP üle SSH kanali
- VPN ja SSH
- MIT Kerberose kasutamine Debianiga
Lingid
- http://wouter.horre.be/doc/vpn-over-ssh
- http://www.nardol.org/2009/1/12/quick-and-dirty-vpn-with-pppd-and-ssh
- http://www.opensource.apple.com/source/OpenSSH/OpenSSH-87/openssh/README.tun
- http://www.openssh.org/
- http://en.wikipedia.org/wiki/OpenSSH
- https://wiki.itcollege.ee/index.php/Ssh
- https://wiki.itcollege.ee/index.php/OpenSSH:_turvamise_meetodid
- http://www.semicomplete.com/articles/ssh-security/