Openssh chroot
Sisukord
Sissejuhatus
Chroot on vahend kasutaja eraldamiseks teistest kasutajatest ning süsteemist. kasutaja saab siis logida ssh-ga ka masinasse ja saab kasutada mõningaid määratud käske kuid ei pääse kogu muule süsteemile ja käskudele ligi. Pisut nagu jail aga tunduvalt piiratum ja vähemate võimalustega.
Tuleb rõhutada, et käesolevas palas kirjeldatud tehnikat kasutades on piiratud vaid ligipääs failisüsteemile, iseenesest chrootitud kasutaja näeb kõiki süsteemis töötavaid protsesse, saab kasutada võrku jne. Siiski, kombineerides seda muude tehnikatega, nt linuxi tuuma grsecurity paigad ning hoolitsedes, et kasutaja chroot keskkonna ettevalmistamisel ei tekitata faile ja utiliite mida kasutaja saaks süsteemi vastu kurjasti ära kasutada võiks vaadelda seda kui ühte võimalikku moodust süsteemi turvalisust suurendada.
Selle saavutamiseks tuleb teha järgnevad sammud
- uus sshd
- tekitame vajalikud kaustad
- kopeerime endale vajalikud programmmid mida tahame lubada kasutada kasutadesse
- kopeerime lib'id mida programmid vajavad kaustadesse
- teeme kasutaja
Chroot paigaga openssh install
Linux
Järgnev lahendus peaks töötama enamuses Linux distributsioonides. Avame faili /etc/ssh/sshd_config
Match group sshuser ChrootDirectory /home/%h X11Forwarding no AllowTcpForwarding no
Kasutaja lisamisel peab siis silmas pidama, et ta satuks gruppi sshuser
useradd -g users -G sshuser
FreeBSD
FreeBSD sisaldab juba vastavat patchitud openssh'd enda portsudes
/usr/ports/security/openssh-portable
Seejärel anname käsu make config ning märgime ära openssh_chroot toe kompileerimise
[X] OPENSSH_CHROOT Enable CHROOT support
Seejärel võime anda
make install clean
Ning lisame /etc/rc.conf faili read
sshd_enable="NO" # OpenSSH server openssh_enable="YES" # OpenBSD OpenSSH-portable
Kasutaja ja tema keskkonna loomine
Kasutaja loomine ja chroot seaditamine peaks olema sarnane nii FreeBSD kui Linuxites juhul kui lugeja siiski mõnd viga märkab võib teksti parandada.
Tekitame kasutaja kodukausta selleks hakkab olema /home/chroot. Sinna tekitame järgneva struktuuri
# mkdir /home/chroot # cd /home/chroot # mkdir bin home lib # mkidir home/kasutaja
Lisame kasutajale faili /bin/sh ehk shelli selleks kopeerime esiteks sh binaar faili bin kausta.
# cp /bin/sh /home/chroot/bin
Ning siis kopeerime sh'le vajalikud lib'id.
FreeBSD's sh lib'ide kopeerimine
Kui kasutame FreeBSD'd siis libexec on oluline sõltuvus FreeBSD's chroot kasutamieks nii siis lisame.
# mkdir libexec # cp /libexec/ld-elf.so.1 /usr/home/chroot/libexec/
Seejärel vaatame mis lib'e kasutab sh seda teeme käsuga ldd
#/bin/sh: libedit.so.6 => /lib/libedit.so.6 (0x28097000) libncurses.so.7 => /lib/libncurses.so.7 (0x280ac000) libc.so.7 => /lib/libc.so.7 (0x280ef000)
Ning kopeerime need kolm lib talle lib kausta
# cp /lib/libedit.so.6 /home/chroot/lib # cp /lib/libncurses.so.7 /home/chroot/lib # cp /lib/libc.so.7 /home/chroot/lib
Linux'is sh lib'ide kopeerimine
Toimingut on sarnased FreeBSD'le tavalises 32 bitises linuxis
# ldd /bin/sh linux-gate.so.1 => (0xb7ef6000) libncurses.so.5 => /lib/libncurses.so.5 (0xb7eae000) libdl.so.2 => /lib/libdl.so.2 (0xb7eaa000) libc.so.6 => /lib/libc.so.6 (0xb7d84000) /lib/ld-linux.so.2 (0xb7ef7000)
Ning kopeerime samamoodi lib'id lib kausta
Kui aga on kasutusel 64bitile linux siis on pilt selline
# ldd /bin/sh linux-vdso.so.1 => (0x00007fff641fe000) libncurses.so.5 => /lib/libncurses.so.5 (0x00002b8746a9d000) libdl.so.2 => /lib/libdl.so.2 (0x00002b8746c95000) libc.so.6 => /lib/libc.so.6 (0x00002b8746e99000) /lib64/ld-linux-x86-64.so.2 (0x00002b8746a79000)
Ning tuleb lisaks veel luua lib64 kaust ja kopeerida ld-linux fail sinna eraldi
mkdir lib64 cp /lib64/ld-linux-x86-64.so.2 /home/chroot/lib64
Edasiste programmide kasutajakeskonda installimise lihtsustamise skript
Kui käske ja programme on hulgi mida soovime kasutajale kättesaadavaks teha on käsitöö üsnagi vaevanõudev ja tüütu. Selle lihtsustamiseks üks shell skript. Muutujaga CHROOT määratakse kasutaja kodu ja muutujale APPS võib kirjutada täisrajaga kõin binary failid mida soovime kasutajale ligipääsetavaks teha, eraldada tuleb need failid tühikuga üksteisest. Antud skriptis lisame kasutajale utiliidid
- ls
- mkdir
- pwd
- rm
- id
CHROOT="/usr/home/chroot" APPS="/bin/ls /bin/mkdir /bin/mv /bin/pwd /bin/rm /usr/bin/id" for prog in $APPS; do cp $prog $CHROOT/bin ldd $prog > /dev/null if [ "$?" = 0 ] ; then LIBS=`ldd $prog | awk '{ print $3 }'` cp $LIBS $CHROOT/lib fi done
Teeme kasutaja nimega "kasutaja". Kasutaja tegemises pole mitte midagi ebatavalist ainukeses erinevuseks chrooditud kasutaja ja tavalise kasutaja vahel on see ,et tema kodukaustaks saab /home/jail/./home/kasutaja ja shelliks /bin/sh. Muidugi ei pea sh'd kasutama kasutaja shelliks kindlasti vaid see on pigem antud näites. Nii võib samahästi ka bashi kohe alguses paigaldad.
Probleemid
Juhul kui logimisel teatab
csh: Cannot open /etc/termcap ja või mõne tarkvara käivitamisel Error opening terminal: xterm Ning kasutusel on shellina csh bsd's
siis tuleb paigaldada termcap
cp /etc/termcap /usr/home/chroot/etc cp .cshrc /usr/home/chroot/home/kasutaja
ja lisame faili .cshrc rea
setenv TERMCAP /etc/termcap
Kui mc ei taha käivituda siis tuleb tekitada kasutaja omanduses tmp kaust
Juhul kui vaja ,et toimiksid ka programmid nagu ssh vaja tekitada vajalikud dev failid ja kaust dev vajalike seadmetega