Sticky Bit, Setuid, dan Setgid

Sticky Bit
Pernahkan kita mengalami sebuah kejadian didalam user linux. Misalnya ada kasus kita membuat sebuah direktori khusus dan sudah di kasih permission sedemikian rupa agar si user lain selain dia tidak bisa mengakses folder tersebut, tetapi si user biasa itu tetap bisa melakukan penghapusan pada folder tersebut. Contoh kita membuat direktori bernama jajal.

$ cd
$ su
# mkdir jajal
# chmod 700 -R jajal/

Lalu kita lihat permissionnya:

$ ls -l

Hasilnya kira-kira seperti ini:

drwx—— 2 root root 4096 Jan 19 20:08 jajal

Nah kalau kita lihat dengan baik-baik contoh permission di atas, tanggapan kita pasti kalau folder itu hanya bisa diakses oleh si user root saja. Tetapi apakah yang terjadi kalau kita login dengan user biasa dan menghapus folder jajal tadi? Oke kita buktikan sekarang.

# exit
$ rm -r jajal

Pasti nanti akan muncul sebuah pertanyaan yang bentuknya seperti di bawah ini, dan apabila kita pilih yes maka folder jajal pasti akan terhapus.

rm: descend into write-protected directory ‘jajal’? y
rm: remove write-protected directory ‘jajal’? y

Lalu sekarang coba lihat folder jajal itu masih ada atau tidak.

$ ls

Pasti folder jajal itu telah hilang kan?
Nah maka dari itu muncullah spesial permission, salah satunya Sticky Bit. Hehehe
Sekarang coba masuk user root lagi dan buat folder jajal lagi dan permission seperti di atas.

$ su
# mkdir jajal
# chmod 700 -R jajal/

Lalu tambahkan permission Sticky Bit yang dilambangkan dengan angka 1 atau +t.

# chmod 1700 -R jajal/
atau bisa juga seperti ini:
# chmod +t -R jajal/

Tampilan permissionnya akan tampak seperti ini:

# ls -l
maka akan terlihat seperti ini:
drwx—–T 2 root root 4096 Jan 20 09:20 jajal

Lihat ada tanda T di akhir permission. Itu menandakan terdapat permission sticky bit di folder jajal..
Lalu sekarang login dengan user biasa dan coba hapus folder jajal itu seperti tadi. Dan apa yang terjadi???

# exit
$ rm -r jajal/

Dan hasilnya pasti akan tampak seperti ini:

rm: descend into write-protected directory ‘jajal’? y
rm: remove write-protected directory ‘jajal’? y
rm: cannot remove ‘jajal’: Permission denied

Lihat di atas muncul pernyataan pernyataan Permission denied. Jadi folder jajal sekarang hanya bisa diakses dan di remove oleh ownernya sendiri..

Setuid
Contoh kasus sederhana dari setuid adalah perintah sudo. Jadi setuid bermakna untuk file executable. Jadi jika bit ini diset, maka ID penggunannya akan ditetapkan sebagai pemilik dari si file eksekusi tersebut. Jadi si sudo itu seharusnya dan sewajibnya harus ditetapkan sebagai dari sipemilik dari root. Nah jadi apabila sudo itu tidak ditambahkan setuid ini, maka sudo tidak akan bekerja sama sekali. Karena secara default kita sudah mengetahui bahwa sudo itu adalah root sementara.
Contoh:

$ cd
$ su
# cp /usr/bin/sudo ./
# chown root:root sudo

Lalu sekarang kita lihat tampilan permissionnya:

# ls -l
maka tampilannya akan seperti ini:
-rwx–x–x 1 root root 107220 Jan 19 20:29 sudo

Lalu sekarang coba masuk sebagai user biasa dan coba akses file executable si sudo itu.

# exit
$ ./sudo

Maka pasti hasilnya tidak bisa dieksekusi. Dan muncul pernyataan seperti ini:

sudo: ./sudo must be owned by uid 0 and have the setuid bit set

Nah untuk itulah adanya spesial permission yang dinamakan setuid bit. Maka yang perlu kita lakukan adalah dengan menambahkan chmod 4755 atau chmod u+s

$ su
# chmod 4755 sudo atau # chmod u+s sudo

Lalu sekarang lihat permissionnya:

# ls -l
maka hasilnya akan tampak seperti ini:
-rwsr-xr-x 1 root root 107220 Jan 19 20:29 sudo

Dan sekarang coba akses lagi sudonya dengan user biasa.

# exit
$ ./sudo

Maka hasilnya kalau di linux saya seperti ini:

usage: sudo [-D level] -h | -K | -k | -V
usage: sudo -v [-AknS] [-D level] [-g groupname|#gid] [-p prompt] [-u user
            name|#uid]
usage: sudo -l[l] [-AknS] [-D level] [-g groupname|#gid] [-p prompt] [-U user
            name] [-u user name|#uid] [-g groupname|#gid] [command]
usage: sudo [-AbEHknPS] [-C fd] [-D level] [-g groupname|#gid] [-p prompt] [-u
            user name|#uid] [-g groupname|#gid] [VAR=value] [-i|-s] []
usage: sudo -e [-AknS] [-C fd] [-D level] [-g groupname|#gid] [-p prompt] [-u user
            name|#uid] file …

Setgit
Nah pada Setgit ini sebenarnya sama aja dengan setuid, tetapi yang membedakan adalah setgid ini untuk menset id pada group.
Oke contohnya begini, misal kita mempunyai folder jajal dan dalam grup IT dan folder itu kita pengen hanya beberapa user saja yang bisa mengaksesnya. Contoh hanya user A, B, dan User C tidak bisa mengaksesnya. Contoh sekarang kita tambahkan ke si 3 user itu dalam grup IT.

# groupadd it
# useradd A
# passwd A
# useradd B
# passwd B
# useradd C
# passwd C

Nah lalu sekarang kita tambahkan si user A dan B kedalam grup IT, kecuali si C.

# usermod -G it A
# usermod -G it B

Nah sekarang kita buat folder ITnya di /home folder.

# mkdir /home/IT
# chgrp /home/IT atau # chown root:it /home/IT

Nah dari perintah di atas, kita membuat folder IT beserta menambahkan grup it ke dalam folder tersebut. Nah sekarang kita atur permissionnya:

# chmod g+s /home/IT atau # chmod 02770 /home/IT

Sekarang coba login dengan user A dan B, lalu akses folder /home/IT dan lihat apa yang terjadi? Pasti user A dan B bisa masuk ke dalam folder itu dan membuat file di dalam folder itu. dan coba untuk user C login dan akses folder /home/IT, pasti user C itu tidak bisa sama sekali mengakses folder itu.. Nah inilah fungsi dari spesial permission setgid.
Catatan:
Untuk menghapus setid atau setgid, bisa menggunakan perintah chmod -s letak foldernya atau filenya.
Sumber:

  1. http://autosysprogs.blogspot.com
  2. http://theartofayu.blogspot.com
Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s