Erinevus lehekülje "Openssh chroot" redaktsioonide vahel

Allikas: Kuutõrvaja
(Kasutaja ja tema keskkonna loomine)
 
(ei näidata sama kasutaja 23 vahepealset redaktsiooni)
1. rida: 1. rida:
 +
===Sissejuhatus===
 
Chroot on vahend kasutaja eraldamiseks teistest kasutajatest ning süsteemist.
 
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
 
kasutaja saab siis logida ssh-ga ka masinasse ja saab kasutada mõningaid määratud käske
kuid ei pääse muulde süsteemile ja käskudele ligi. Pisut nagu jail aga tunduvalt piiratum ja vähemate võimalustega.  
+
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
 
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
13. rida: 14. rida:
 
# teeme kasutaja
 
# teeme kasutaja
  
 +
===Chroot paigaga openssh install===
  
 
'''Linux'''
 
'''Linux'''
  
http://www.howtoforge.com/chrooted_ssh_howto_debian_p2
+
Järgnev lahendus peaks töötama enamuses Linux distributsioonides. Avame faili /etc/ssh/sshd_config
  
  fetch http://chrootssh.sourceforge.net/download/openssh-4.2p1-chroot.tar.gz
+
  Match group sshuser
tar -xf openssh-4.2p1-chroot.tar.gz
+
          ChrootDirectory /home/%h
cd openssh-4.2p1-chroot
+
          X11Forwarding no
./configure
+
          AllowTcpForwarding no
make
 
make install
 
  
 +
Kasutaja lisamisel peab siis silmas pidama, et ta satuks gruppi sshuser
  
 +
useradd -g users -G sshuser
  
 
'''FreeBSD'''
 
'''FreeBSD'''
42. rida: 44. rida:
 
  make install clean
 
  make install clean
  
Seejärel teeme kasutaja kodukausta
+
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
 
selleks hakkab olema /home/chroot. Sinna tekitame järgneva struktuuri
  
50. rida: 62. rida:
 
  # mkidir home/kasutaja
 
  # mkidir home/kasutaja
  
libexec on esmane vajalik sõltuvus kõige kasutamieks nii siis lisame.
+
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
 
  # mkdir libexec
 
  # cp /libexec/ld-elf.so.1 /usr/home/chroot/libexec/
 
  # cp /libexec/ld-elf.so.1 /usr/home/chroot/libexec/
  
Juhul kui vaja ,et toimiksid ka programmid naug ssh
+
Seejärel vaatame mis lib'e kasutab sh seda teeme käsuga ldd
vaja tekitada vajalikud dev failid ja kaust dev vajalike seadmetega
 
 
 
Näiteks lisame kasutajale faili /bin/chs ehk shelli selleks kopeerime esiteks csh binaar faili bin kausta.
 
 
 
# cp /bin/csh /home/chroot/bin
 
  
Seejärel vaatame mis lib'e kasutab csh 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)
  
# ldd /bin/csh
 
/bin/csh:
 
        libncurses.so.7 => /lib/libncurses.so.7 (0x280c6000)
 
        libcrypt.so.4 => /lib/libcrypt.so.4 (0x28109000)
 
        libc.so.7 => /lib/libc.so.7 (0x28122000)
 
  
 
Ning kopeerime need kolm lib talle lib kausta
 
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/libncurses.so.7 /home/chroot/lib
# cp /lib/libcrypt.so.4 /home/chroot/lib
 
 
  # cp /lib/libc.so.7 /home/chroot/lib
 
  # cp /lib/libc.so.7 /home/chroot/lib
  
'''Installi lihsustamise skript'''
+
'''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
 
Kui käske ja programme on hulgi mida soovime kasutajale
105. rida: 146. rida:
 
  done
 
  done
  
 
+
Teeme kasutaja nimega "kasutaja". Kasutaja tegemises pole mitte midagi ebatavalist
Teeme kasutaja nimega kasutaja. Kasutaja tegemises pole mitte midagi ebatavalist
 
 
ainukeses erinevuseks chrooditud kasutaja ja tavalise kasutaja vahel on see ,et
 
ainukeses erinevuseks chrooditud kasutaja ja tavalise kasutaja vahel on see ,et
 
tema kodukaustaks saab '''/home/jail/./home/kasutaja'''
 
tema kodukaustaks saab '''/home/jail/./home/kasutaja'''
ja shelliks '''/bin/csh'''. Muidugi ei pea csh'd kasutama kasutaja shelliks
+
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
 
kindlasti vaid see on pigem antud näites. Nii võib samahästi ka bashi
kohe alguses paigaldada.
+
kohe alguses paigaldad.
  
'''Probleemid'''
+
===Probleemid===
  
 
Juhul kui logimisel teatab
 
Juhul kui logimisel teatab
119. rida: 159. rida:
 
csh: Cannot open /etc/termcap  
 
csh: Cannot open /etc/termcap  
 
ja või mõne tarkvara käivitamisel Error opening terminal: xterm
 
ja või mõne tarkvara käivitamisel Error opening terminal: xterm
 +
Ning kasutusel on shellina csh bsd's
  
 
siis tuleb paigaldada termcap
 
siis tuleb paigaldada termcap
  
 
  cp /etc/termcap /usr/home/chroot/etc
 
  cp /etc/termcap /usr/home/chroot/etc
  cp .cshrc /usr/home/jail/home/kasutaja
+
  cp .cshrc /usr/home/chroot/home/kasutaja
  
 
ja lisame faili .cshrc rea  
 
ja lisame faili .cshrc rea  
131. rida: 172. rida:
 
Kui mc ei taha käivituda siis tuleb tekitada
 
Kui mc ei taha käivituda siis tuleb tekitada
 
kasutaja omanduses tmp kaust
 
kasutaja omanduses tmp kaust
 +
 +
Juhul kui vaja ,et toimiksid ka programmid nagu ssh
 +
vaja tekitada vajalikud dev failid ja kaust dev vajalike seadmetega

Viimane redaktsioon: 4. november 2018, kell 05:32

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

  1. uus sshd
  2. tekitame vajalikud kaustad
  3. kopeerime endale vajalikud programmmid mida tahame lubada kasutada kasutadesse
  4. kopeerime lib'id mida programmid vajavad kaustadesse
  5. 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