Tujuan dari chroot terhadap suatu login(account/user) adalah untuk "memenjarakan" user tersebut ke home direktorinya sendiri sehingga user yang bersangkutan tidak bisa "naik" ke direktori yang lebih tinggi diatasnya. Hal ini mungkin bisa meminimalisir usaha pembajakan terhadap suatu account yang lain (misalnya root) ataupun pencurian data user maupun data penting lainnya pada suatu sistem operasi linux.
Langkah yang pertama adalah membuat fake shell yang akan dijadikan login shell terhadap user yang akan dichroot, disini kita misalkan shell tersebut diberi nama /bin/chroot-sh isinya adalah :
#!/bin/bash if [ "$1" = "-c" ]; then i=0; PARAMS=""; for param in $*; do if [ $i -gt 0 ]; then PARAMS="$PARAMS $param"; fi let i++; done; sudo /usr/sbin/chroot /home/$USER /bin/su - $USER -c "$PARAMS" else sudo /usr/sbin/chroot /home/$USER /bin/su - $USER fi;
Ubah mode menjadi executable :
[[email protected] root]# chmod +x /bin/chroot-sh
Buat user baru yang akan dichroot sekalian kita set passwordnya :
[[email protected] root]# useradd -d /tmp -s /bin/chroot-sh suminten [[email protected] root]# passwd suminten Changing password for user suminten New password: Retype new password: passwd: all authentication tokens updated successfully
Buat direktori etc,dev,bin,lib,usr,usr/bin,home,home/sumintendidirektori /home/suminten :
[[email protected] root]# mkdir -p /home/suminten/{etc,dev,bin,lib,usr/bin,home/suminten}
Buat entry untuk user root dan suminten di file /home/suminten/etc/passwddan /home/suminten/etc/group :
[[email protected] root]# grep ^root /etc/passwd | sed -e 's{/root{/{g' > /home/suminten/etc/passwd [[email protected] root]# grep ^suminten /etc/passwd | sed -e 's{/tmp{/home/suminten{g;s{chroot-sh{bash{g' >> /home/suminten/etc/passwd [[email protected] root]# grep ^root /etc/group > /home/suminten/etc/group [[email protected] root]# grep ^suminten /etc/group >> /home/suminten/etc/group
Install bash dengan menyalin file /bin/bash ke /home/suminten/bin:
[[email protected] root]# cp /bin/bash /home/suminten/bin
Salin file library yang digunakan oleh bash (anda bisa memeriksanya dengan perintah ldd) :
[[email protected] root]# ldd /bin/bash libtermcap.so.2 => /lib/libtermcap.so.2 (0x4001d000) libdl.so.2 => /lib/libdl.so.2 (0x40021000) libc.so.6 => /lib/i686/libc.so.6 (0x40025000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000) [[email protected] root]# cp /lib/libtermcap.so.2 /home/suminten/lib [[email protected] root]# cp /lib/libdl.so.2 /home/suminten/lib [[email protected] root]# cp /lib/i686/libc.so.6 /home/suminten/lib [[email protected] root]# cp /lib/ld-linux.so.2 /home/suminten/lib/
Atau bisa juga dengan menggunakan perintah ini :
[[email protected] root]# for a in $(ldd /bin/bash | awk '{print $3}'); do cp $a /home/suminten/lib/; done
Install program su yang termasuk dalam paket sh-utils (pada saat dokumen ini ditulis versi yang paling terbaru adalah sh-utils-2.0.15.tar.gz, namun anda bisa melihat source yang paling baru di http://www.gnu.org/software/shellutils/shellutils.html) :
[[email protected] root]# wget ftp://alpha.gnu.org/gnu/sh-utils/sh-utils-2.0.15.tar.gz [[email protected] root]# tar -xzvf sh-utils-2.0.15.tar.gz [[email protected] root]# cd sh-utils-2.0.15 [[email protected] sh-utils-2.0.15]# ./configure [[email protected] sh-utils-2.0.15]# make [[email protected] sh-utils-2.0.15]# cp src/su /home/suminten/bin [[email protected] sh-utils-2.0.15]# chmod +s /home/suminten/bin/su
Salin library yang diperlukan oleh su (ldd /home/suminten/bin/su) :
[[email protected] sh-utils-2.0.15]# cp /lib/libcrypt.so.1 /home/suminten/lib
Untuk Redhat 7.x, salin pula file /lib/libnss_files.so.2, /lib/libnsl.so.1dan /lib/libnss_compat.so.2 :
[[email protected] root]# cp /lib/libnss_files.so.2 /home/suminten/lib [[email protected] root]# cp /lib/libnsl.so.1 /home/suminten/lib [[email protected] root]# cp /lib/libnss_compat.so.2 /home/suminten/lib
Jika diperlukan juga, install file-utils (ln,ls,rm,mv,cp,du,mkdir):
[[email protected] root]# cp /bin/{ln,ls,rm,mv,cp,mkdir} /home/suminten/bin [[email protected] root]# cp /usr/bin/du /home/suminten/bin
Periksa kembali library yang akan digunakan oleh file-file tersebut dengan menggunakan perintah ldd (misalnya: ldd /bin/ls dan seterusnya), kemudian salin ke direktori lib pada home direktori user yang bersangkutan.
Ganti kepemilikan /home/suminten (kecuali file su) ke user suminten:
[[email protected] root]# chown -R suminten.suminten /home/suminten [[email protected] root]# chown root.root /home/suminten/bin/su
Jika anda menginginkan agar user yang bersangkutan tidak bisa menghapus file/direktori yang digunakan dalam chroot, anda bisa menggunakan perintah chattr :
[[email protected] root]# chattr -R +i /home/suminten/{bin,etc,lib}
Tambahkan pada file /etc/sudoers (anda bisa menggunakan perintah visudo) entry untuk user yang bersangkutan :
suminten ALL= NOPASSWD: /usr/sbin/chroot /home/suminten /bin/su - suminten*
Jika segalanya berhasil dengan baik anda bisa mencoba ssh ke localhost dengan menggunakan user yang bersangkutan :
[[email protected] root]# ssh [email protected] [email protected]'s password: Last login: Mon Feb 24 10:37:51 2003 from localhost bash-2.05$ pwd /home/suminten
FIN