OpenSSH administreerimine

Allikas: Kuutõrvaja

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

 # 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

Lingid