Chroot login di Linux dengan menggunakan sshd

Asfihani ([email protected])

26 Februari 2003

Pendahuluan

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.

Karena sshd yang mendukung chroot adalah sshd dari ssh.com, maka langkah yang pertama adalah menginstall sshd tersebut dan menguninstall openssh (sshd yang digunakan berlisensi free for non commercial use), jika anda sudah menggunakan sshd dari ssh.com anda bisa melewati langkah berikut ini :

[[email protected] asfik]# wget ftp://ftp.ssh.com/pub/ssh/ssh-3.2.3.tar.gz
[[email protected] asfik]# tar -xzvf ssh-3.2.3.tar.gz
[[email protected] asfik]# cd ssh-3.2.3
[[email protected] ssh-3.2.3]# ./configure
[[email protected] ssh-3.2.3]# make
[[email protected] ssh-3.2.3]# make install

Perhatian, langkah berikut ini sangatlah penting, silakan berhati-hati dalam mengerjakannya, terutama jika anda bekerja diserver secara remote. Aktifkan terlebih dahulu protokol telnet, hal ini untuk mencegah jika tiba-tiba kita tidak bisa terhubung ke server menggunakan ssh. Pada distro Redhat anda bisa menyunting file /etc/xinetd.d/telnetdan ubah pada bagian disable = yes menjadi disable = no. Kemudian restart xinetd :

[[email protected] asfik]# service xinetd restart

Setelah ok, silakan masuk ke server melalui protokol telnet, langkah selanjutnya adalah langsung menghentikan sshd yang masih berjalan :

[[email protected] asfik]# service sshd stop

Pastikan semua user telah logout (atau kita logoutkan secara pasti :D ):

[[email protected] asfik]# killall -9 sshd 

Hapus openssh :

[[email protected] asfik]# for a in $(rpm -qa | grep openssh); do rpm -e --nodeps $a; done

Semenjak root merupakan account yang keramat, maka kita putuskan untuk menolak ssh dengan login root dengan menyunting file /etc/ssh2/sshd2_config pada bagian PermitRootLogin menjadi :

PermitRootLogin                 no

Jalankan sshd yang terbaru dari ssh.com :

[[email protected] asfik]# /usr/local/sbin/sshd

Untuk memastikan sshd yang baru secara otomatis dijalankan setiap server di reboot :

[[email protected] asfik]# echo "/usr/local/sbin/sshd" >> /etc/rc.local

Silakan dicoba untuk melakukan ssh ke server tersebut, jika sukses, jangan lupa langsung mematikan kembali daemon telnet dengan menyunting kembali /etc/xinetd.d/telnet dan mengubah bagian disable = no menjadi disable = yes, dan karena kita tidak memerlukan xinetd :

[[email protected] asfik]# service xinetd stop

Buat user baru yang akan dichroot (misalnya user niken ) sekalian kita set passwordnya :

[[email protected] asfik]# useradd niken
[[email protected] asfik]# passwd niken 
Changing password for user niken
New password:
Retype new password:
passwd: all authentication tokens updated successfully

Buat direktori etc,bin,lib didirektori /home/niken :

[[email protected] asfik]# mkdir /home/niken/{etc,bin,lib} 

Buat entry untuk user niken di file /home/niken/etc/passwd dan /home/niken/etc/group :

[[email protected] asfik]# grep ^niken /etc/passwd > /home/niken/etc/passwd
[[email protected] asfik]# grep ^niken /etc/group > /home/niken/etc/group 

Install bash dengan menyalin file /bin/bash ke /home/niken/bin:

[[email protected] asfik]# cp /bin/bash /home/niken/bin

Salin file library yang digunakan oleh bash (anda bisa memeriksanya dengan perintah ldd) :

[[email protected] asfik]# 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] asfik]# cp /lib/libtermcap.so.2 /home/niken/lib
[[email protected] asfik]# cp /lib/libdl.so.2 /home/niken/lib
[[email protected] asfik]# cp /lib/i686/libc.so.6 /home/niken/lib
[[email protected] asfik]# cp /lib/ld-linux.so.2 /home/niken/lib

Atau bisa juga dengan menggunakan perintah ini :

[[email protected] asfik]# for a in $(ldd /bin/bash | awk '{print $3}'); do cp $a /home/niken/lib/; done 

Untuk Redhat 7.x, salin pula file /lib/libnss_files.so.2, /lib/libnsl.so.1dan /lib/libnss_compat.so.2 :

[[email protected] asfik]# cp /lib/libnss_files.so.2 /home/niken/lib
[[email protected] asfik]# cp /lib/libnsl.so.1 /home/niken/lib
[[email protected] asfik]# cp /lib/libnss_compat.so.2 /home/niken/lib

Jika diperlukan juga, install file-utils (ln,ls,rm,mv,cp,du,mkdir):

[[email protected] asfik]# cp /bin/{ln,ls,rm,mv,cp,mkdir} /home/niken/bin
[[email protected] asfik]# cp /usr/bin/du /home/niken/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/niken ke user niken :

[[email protected] asfik]# chown -R niken.niken /home/niken

Jika anda menginginkan agar user yang bersangkutan tidak bisa menghapus file/direktori yang digunakan dalam chroot, anda bisa menggunakan perintah chattr :

[[email protected] asfik]# chattr -R +i /home/niken/{bin,etc,lib}

Langkah terakhir adalah menambahkan entry niken pada file /etc/ssh2/sshd2_config bagian ChRootUsers menjadi sebagai berikut :

ChRootUsers anonymous,ftp,guest,niken

Restart daemon ssh :

[[email protected] asfik]# killall -HUP sshd

Jika sukses, anda bisa mencoba ssh ke localhost dengan menggunakan login niken :

[[email protected] asfik]# ssh [email protected]
niken's password:
Authentication successful.
Last login: Wed Feb 26 2003 12:51:42 +0700 from localhost
No mail.
bash-2.05$ ls -la
total 40
drwx------ 5 niken niken 4096 Feb 26 05:48 .
drwx------ 5 niken niken 4096 Feb 26 05:48 ..
-rw------- 1 niken niken 57 Feb 26 05:52 .bash_history
-rw-r--r-- 1 niken niken 24 Feb 26 05:21 .bash_logout
-rw-r--r-- 1 niken niken 191 Feb 26 05:21 .bash_profile
-rw-r--r-- 1 niken niken 124 Feb 26 05:21 .bashrc
-rw-r--r-- 1 niken niken 3511 Feb 26 05:21 .screenrc
drwxr-xr-x 2 niken niken 4096 Feb 26 05:47 bin
drwxr-xr-x 2 niken niken 4096 Feb 26 05:49 etc
drwxr-xr-x 2 niken niken 4096 Feb 26 05:53 lib

FIN