SSH kasutajate chrootimine libpam-chroot mooduli abil Debian Etch'ga
Sisukord
Eesmärk
NB! Sarnase asjakorralduse jaoks sobib paremini kasutada Debian Lennyga OpenSSH direktiivi ChrootDirectory, mida on kirjeldatud palas Operatsioonisüsteemi Debian GNU/Linux kasutamine#OpenSSH kasutajate chrootimine Lennyga.
Eesmärgiks on Debiani paketihaldusest paigaldatud tarkvara kasutades piirata seadistusfailis kirjeldatud ssh kasutajate ligipääsu süsteemi failisüsteemile. Kui selline failisüsteemile piiratud ligipääsuga ehk chrootitud kasutaja süsteemi sisse logib, siis süsteemi vaatepunktist on tema kodukataloogiks
/home/mart/home/mart
kusjuures nö absoluutse süsteemi seisukohast on olemas kataloogid
/home/mart/bin /home/mart/home/mart /home/mart/lib /home/mart/lib64
Kui aga kasutaja peale sisselogimist ise ütleb 'cd /', siis satub ta absoluutse süsteemi mõttes kataloogi
/home/mart
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 sinna setuid faile ning failide omanikud ja loabitid oleksid sobivate väärtustega, võiks vaadelda seda kui ühte võimalikku moodust süsteemi turvalisust suurendada.
Sarnase tulemuse saavutamiseks on mitmeid võimalusi, käesolevas palas kirjeldatakse kuidas seda teha pam_chroot mooduli abil, aluseks on võetud Debiani manuaal, http://www.debian.org/doc/manuals/securing-debian-howto/ap-chroot-ssh-env.en.html
Tarkvara paigaldamine
Lisaks nö tavalisele OpenSSH serverile ning PAM'i kasutava süsteemi olemasolule tuleb paigaldada libpam-chroot moodul ning kasutaja chroot keskkonna moodustamiseks utiliit makejail
bash# apt-get install libpam-chroot makejail
Kasutaja chroot keskkonna moodustamine
Makejail on kaval süsteem, antud juhul kasutatakse tema väga triviaalseid võimalusi, seadistusfailis /root/makejail-bash.py näidatakse
- kuhu kataloogi moodustada chroot keskkond
- lisada sinna /bin/bash shell ning vastavad teegid lisada (antud juhul kasutatakse AMD64 platvormi)
# cat /root/makejail-bash.py chroot="/home/mart" forceCopy=["/lib64/ld-linux-x86-64.so.2", "/bin/bash","/lib/ld-linux-x86-64.so.2"]
moodustame kataloogi /home/mart
bash# mkdir /home/mart
ning moodustame chroot keskkonna
bash# makejail /root/makejail-bash.py Loading configuration file /root/makejail.py Defining chroot = '/home/mart' Defining forceCopy = ['/bin/bash'] Chroot directory is /home/mart Initializing list of running processes Executing : ps -e Creating temp dir /tmp/makejail_logs Adding files matching '/bin/bash' Checking path '/bin/bash' Dir '/home/mart/bin' missing Checking path '/bin' Making dir /home/mart/bin .. Creating 'lib/libncurses.so.5' as a symlink to 'libncurses.so.5.5' (pwd=/home/mart/lib) Executing : file /lib/libncurses.so.5 Sleeping for 2.00 seconds
Tulemusena tekib selline failistruktuur
bash# cd /home bash# find mart -ls 507962 4 drwxr-xr-x 4 root root 4096 Sep 9 15:12 mart 507963 4 drwxr-xr-x 2 root root 4096 Sep 9 15:12 mart/lib 507968 1260 -rwxr-xr-x 1 root root 1286104 May 15 13:19 mart/lib/libc-2.3.6.so 507972 0 lrwxrwxrwx 1 root root 17 Sep 9 15:12 mart/lib/libncurses.so.5 -> libncurses.so.5.5 507973 100 -rwxr-xr-x 1 root root 97928 May 15 13:19 mart/lib/ld-2.3.6.so 507967 368 -rw-r--r-- 1 root root 369728 Oct 19 2006 mart/lib/libncurses.so.5.5 507974 0 lrwxrwxrwx 1 root root 11 Sep 9 15:12 mart/lib/ld-linux-x86-64.so.2 -> ld-2.3.6.so 507970 12 -rw-r--r-- 1 root root 10392 May 15 13:19 mart/lib/libdl-2.3.6.so 507971 0 lrwxrwxrwx 1 root root 14 Sep 9 15:12 mart/lib/libdl.so.2 -> libdl-2.3.6.so 507969 0 lrwxrwxrwx 1 root root 13 Sep 9 15:12 mart/lib/libc.so.6 -> libc-2.3.6.so 507964 0 lrwxrwxrwx 1 root root 4 Sep 9 15:12 mart/lib64 -> /lib 507965 4 drwxr-xr-x 2 root root 4096 Sep 9 15:12 mart/bin 507966 756 -rwxr-xr-x 1 root root 769368 Dec 11 2006 mart/bin/bash
Lisaks moodustame kasutaja kodukataloogi, kuhu ta satub peale sisselogimist
bash# mkdir /home/mart/home/mart
Selleks, et veenduda kas kasutaja chroot keskkonna tekitamine õnnestus tuleb öelda, mille vastuseks saab shelli (ja siis öelda exit)
bash# chroot /home/mart bash#
See on suhteliselt minimalistlik keskkond, aga siia peale saab kasvatada vastavalt vajadusele lisades utiliite ja nt ühendada /proc failisüsteemi külge, kui kasutaja peaks saama protsesside tabelit näha.
pam-chroot mooduli seadistamine
pam-chroot mooduli seadistamiseks tuleb lisada ta /etc/pam.d/ssh faili viimaseks session'iks reaks
bash# grep session /etc/pam.d/sshd # Standard Un*x session setup and teardown. @include common-session session optional pam_motd.so # [1] session optional pam_mail.so standard noenv # [1] session required pam_limits.so # session required pam_selinux.so multiple session required pam_chroot.so
Ning mooduli seadistusfailis /etc/security/chroot.conf peavad olema näidatud kasutajad, kes millisesse kataloogi chrooditakse, siin näidatud kataloogiks on nö absoluutse süsteemi katalooginimi
mart /home/mart
Süsteemi kasutamine
Ettevalmistatud süsteemi kasutamiseks peab nö absoluutses süsteemis olema kasutaja mart ja paroolifailis /etc/passwd tema kodukataloogiks /home/mart ja shelliks /bin/bash ning peaks saama kasutaja sisse logida
bash# ssh mart@localhost mart@localhost's password: Last login: Sun Sep 9 15:32:49 2007 from localhost Linux loomaaed 2.6.18-4-xen-amd64 #1 SMP Fri May 4 02:40:51 UTC 2007 x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. -bash-3.1$ ! bash cd disown esac fg history logout return test typeset while ./ bg command do eval fi if popd select then ulimit { : bind compgen done exec for in printf set time umask } [ break complete echo exit function jobs pushd shift times unalias [[ builtin continue elif export getopts kill pwd shopt trap unset ]] caller declare else false hash let read source true until alias case dirs enable fc help local readonly suspend type wait -bash-3.1$ / bin/ home/ lib/ lib64/ -bash-3.1$ /
Kuna chroot keskkonna ainuke programm on bash shell, siis on huvitav tähele panna, et vajutades kaks korda tabulaatorit näeb kõiki bash'i sisekäske; ning sisestades kaldkriipsu ja vajutades kaks korda tabulaatorit näeb mart kasutaja jaoks kehtestatud juurikal asuvate kataloogide nimesid.
Ilma täiendustega sobib selline minimalistlik asjakorraldus ka scp programmi kasutamiseks, samuti on võimalik SSH võtmetega autentimine, kusjuures kasutaja avalik võti tuleb paigutada seljuhul kasutaja vaatest /.ssh kataloogi (absoluutse süsteemi vaatest /home/mart/.ssh kataloog).
sftp kliendi kasutamiseks tuleb paigaldada kasutaja chroot'i lisaks sftp-server programm koos vastavate teekidega. Selleks sobib kasutada makejail utiliiti, sellise seadistusfailiga
chroot="/home/mart" forceCopy=["/lib64/ld-linux-x86-64.so.2", "/bin/bash","/lib/ld-linux-x86-64.so.2","/usr/lib/sftp-server"]
Probleemid
Selleks, et Sarge (Debian GNU/Linux v 3.1) puhul pam_chroot session töötaks tuleb ssh serveri konfiguratsioonis privilege separation eemaldada. Selle tegevuse mõistlikkus jääb kasutaja enda otsustada.
Kasulikud lisamaterjalid
- pakett rssh (http://www.pizzashack.org/rssh/) - Alternatiivne moodus ssh vahendite abil failisüsteemile piiratud ligipääsu korraldamiseks
- Operatsioonisüsteemi Debian GNU/Linux kasutamine#OpenSSH kasutajate chrootimine Lennyga