22/08/2018

Linux Chroot

# mkdir /var/chroot Sonra bash in dependency lerini görelim # ldd /bin/bash linux-vdso.so.1 => (0x00007ffd76de9000) libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00007f2cc8d6a000) libdl.so.2 => /lib64/libdl.so.2 (0x00007f2cc8b66000) libc.so.6 => /lib64/libc.so.6 (0x00007f2cc8799000) /lib64/ld-linux-x86-64.so.2 (0x00007f2cc8f94000) Daha sonra bu dependency leri aşağıda ki gibi kopyalayalım cd /var/chroot/ mkdir lib64 cp /lib64/libtinfo.so.5 ./lib64/ cp /lib64/libdl.so.2 ./lib64/ cp /lib64/libc.so.6 ./lib64/ cp /lib64/ld-linux-x86-64.so.2 ./lib64/ mkdir bin cp /bin/bash ./bin/ şimdi test etmek istersek #chroot /var/chroot/ Böylece ls komutunun bile çalışmadığını görebiliriz. Aslında tüm komutları bu şekilde yapsak isteiğimiz komutları chroot olacak kullanıcıya sağlam suretiyle işleri halledebiliriz. Ancak kolay bir yolunu sağlsun linkin sahibi yapmış yine kendisine ait olan kodu değiştirmeden ekliyorum #!/bin/bash # This script can be used to create simple chroot environment # Written by LinuxCareer.com # (c) 2013 LinuxCareer under GNU GPL v3.0+ #!/bin/bash CHROOT='/var/chroot' mkdir $CHROOT for i in $( ldd $* | grep -v dynamic | cut -d " " -f 3 | sed 's/://' | sort | uniq ) do cp --parents $i $CHROOT done # ARCH amd64 if [ -f /lib64/ld-linux-x86-64.so.2 ]; then cp --parents /lib64/ld-linux-x86-64.so.2 /$CHROOT fi # ARCH i386 if [ -f /lib/ld-linux.so.2 ]; then cp --parents /lib/ld-linux.so.2 /$CHROOT fi echo "Chroot jail is ready. To access it execute: chroot $CHROOT" daha sonra bu scriptin yetkilerini değiştirip bir kaç örnek komut ekleyerek deniyorum chmod 700 chroot.sh ./chroot.sh /bin/{ls,cd,echo,rm} chroot /var/chroot ls ls :command not found Çalışmadı “ls” komutu bile çalışmadı. şimdi bir kullanıcı ve group oluşturalım. Böylece SSH ayarlarımız ile bazı kullanıcılara sadece istediğimiz komutlara izin verebiliriz. groupadd chrootjail mkdir -p /var/chroot/home adduser tester2 -m -d /var/chroot/home/tester2 -G chrootjail passwd tester2 Daha sonra ssh config dosyamızı ayarlıyoruz /etc/ssh/sshd_config PasswordAuthentication yes Match group chrootjail ChrootDirectory /var/chroot/ ancak bunlar hala yeterli değildir. Çünkü tester2 adlı kullanıcıyla ssh yaptığımızda chroot ortamına gireriz ancak “ls” komutu hala çalışmaz. -bash-4.2$ echo $PATH /usr/local/bin:/usr/bin çünkü biz komutları “/var/chroot/bin” yada tester2 nin gördüğü şekilde “/bin” içine koyduk. Ancak yukarda görüldüğü üzere tester2 nin PATH environment değerlerinde “/bin” yok. Dolayısı ile komutaları göremiyor. İnternette baktığım bir kaç kaynak işe yaramayınca bence mevcut PATH değişkenlerini yaratıp, linkledim 🙂 mkdir -p usr/local/bin cd usr/local/bin/ ln -s ../../../bin/bash bash ln -s ../../../bin/cd cd ln -s ../../../bin/ls ls ln -s ../../../bin/echo echo ln -s ../../../bin/rm rm Böylece çalıştı. Aslında çalışmamasının sebebi chroot için oluşturduğum userın home directory si yanlış bkz: -bash-4.2$ cd -bash: cd: /var/chroot/home/tester2: No such file or directory Bu sorunu düzeltirsem ok onuda buldum , muhtemelen desired bir çözüm değil ama çalıştı 🙂 adduser tester3 -m -d /home/tester3 -G chrootjail mv /home/tester3 /var/chroot/home/ passwd tester3 ayrıca PATH değişkenini “~/.bashrc” içinde export PATH=$PATH:/bin olarak değiştirdim/ekledim. ]]>

Leave a Reply