SSH kasutajate chrootimine libpam-chroot mooduli abil Debian Etch'ga

Allikas: Kuutõrvaja

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