Special permissions | Jika diterapkan pada executable file | Jika diterapkan pada directory |
---|---|---|
SUID Set User ID |
Maka file tersebut akan memiliki permission sama dengan permission yang dimiliki oleh pemilik file tersebut, bukan permission yang dimiliki oleh user yang menjalankan file tersebut. | SUID tidak akan berpengaruh apa-apa jika diterapkan pada directory. |
SGID Set Group ID |
Maka file tersebut akan memiliki permission sama dengan permission yang dimiliki oleh group dari pemilik file tersebut, bukan permission yang dimiliki oleh user atau grup yang menjalankan file tersebut. | Maka file atau subdirectory yang dibuat dalam directory tersebut akan menjadi milik group yang sama dengan group dari pemilik directory tersebut. |
Sticky bit | Dalam sistem linux, sticky bit pada file sudah tidak berlaku lagi. | Maka semua user dapat membuat file baru dalam directory tersebut, akan tetapi hanya user pemilik dan root yang dapat menghapus atau mengganti nama file tersebut. |
Perlu kita ketahui bahwa dalam setiap proses di linux memiliki 2 user ID, yaitu effective UID (User ID) dan real UID. Effective User ID (EUID) inilah yang diperiksa oleh sistem kernel linux untuk menentukan permission (hak akses) dari proses yang berjalan, serta EUID ini nantinya menurun pada kepemilikan dari file yang dihasilkan oleh proses tersebut. Sedangkan Real User ID adalah ID yang mengidentifikasikan siapa pemilik sesungguhnya dari proses yang berjalan.
SUID (Set User ID)
Secara default, ketika user mengeksekusi sebuah file, proses yang dihasilkan memiliki permission yang sama dengan user yang mengeksekusi file tersebut. Akan tetapi kadang user biasa perlu melakukan hal-hal tertentu yang hanya diijinkan untuk root, misalnya mengubah password, melakukan koneksi, dan lain-lain. Dengan demikian dibuatlah metode agar user biasa dapat melakukan hal-hal yang memerlukan ijin dari root tersebut. Metode yang digunakan adalah dengan menerapkan Set User ID pada command (executable file) yang tertentu yang dibutuhkan.Sebagi contoh sederhana, command ping dapat dijalankan oleh semua user, padahal command ini memerlukan koneksi network yang hanya bisa dilakukan oleh root. Mari kita coba dengan user biasa untuk melakukan ping:
[user2@santos ~]$ ping detik.com
PING detik.com (203.190.241.43) 56(84) bytes of data.
64 bytes from 203.190.241.43: icmp_seq=1 ttl=61 time=37.8 ms
64 bytes from 203.190.241.43: icmp_seq=2 ttl=61 time=15.8 ms
64 bytes from 203.190.241.43: icmp_seq=3 ttl=61 time=15.0 ms
64 bytes from 203.190.241.43: icmp_seq=4 ttl=61 time=15.7 ms
^C
--- detik.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3683ms
rtt min/avg/max/mdev = 15.042/21.100/37.827/9.662 ms
[user2@santos ~]$
User2 merupakan user biasa. User2 dapat melakukan command ping karena command ini memiliki SUID dari root:[user2@santos ~]$ ls -l /bin/ping
-rwsr-xr-x. 1 root root 40760 Sep 26 2013 /bin/ping
File yang memiliki SUID akan memiliki tanda permission 's' seperti pada permission command ping di atas.Sekarang, kita akan menghilangkan SUID pada command ping (lakukan sebagai root).
[root@santos ~]# chmod u-s /bin/ping
. Setelah SUID pada command ping dihilangkan, kita coba lagi melakukan ping sebagai user biasa.[user2@santos ~]$ ping detik.com
ping: icmp open socket: Operation not permitted
[user2@santos ~]$
Sebenarnya, user2 tetap dapat melakukan ping, tapi karena proses ping berjalan dengan UID user2 (user biasa), maka proses ping tidak memiliki akses untuk melakukan koneksi via socket, sehingga ping gagal. Tetapi, user root akan tetap dapat melakukan command ping.[root@santos ~]# ping detik.com
PING detik.com (203.190.241.43) 56(84) bytes of data.
64 bytes from 203.190.241.43: icmp_seq=1 ttl=61 time=16.9 ms
64 bytes from 203.190.241.43: icmp_seq=2 ttl=61 time=15.1 ms
64 bytes from 203.190.241.43: icmp_seq=3 ttl=61 time=26.1 ms
64 bytes from 203.190.241.43: icmp_seq=4 ttl=61 time=14.7 ms
^C
--- detik.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3403ms
rtt min/avg/max/mdev = 14.707/18.240/26.129/4.633 ms
[root@santos ~]#
Untuk menerapkan SUID kembali ke command ping, cukup dengan:chmod u+s /bin/ping
Seperti sudah dituliskan beberapa kali di atas, penerapan Set User ID dilakukan dengan command chmod. Berikut ini adalah contoh lengkapnya:
# menerapkan Set User ID dengan angka
# (menambah angka 4 sebelum 3 digit permission biasa)
[root@santos ~]# chmod 4755 /bin/ping
[root@santos ~]# ls -l /bin/ping
-rwsr-xr-x. 1 root root 40760 Sep 26 2013 /bin/ping
# menghapus Set User ID dengan angka
[root@santos ~]# chmod 0755 /bin/ping
[root@santos ~]# ls -l /bin/ping
-rwxr-xr-x. 1 root root 40760 Sep 26 2013 /bin/ping
# menerapkan Set User ID dengan huruf 'u' (user pemilik)
[root@santos ~]# chmod u+s /bin/ping
[root@santos ~]# ls -l /bin/ping
-rwsr-xr-x. 1 root root 40760 Sep 26 2013 /bin/ping
# menghapus Set User ID dengan huruf 'u'
[root@santos ~]# chmod u-s /bin/ping
[root@santos ~]# ls -l /bin/ping
-rwxr-xr-x. 1 root root 40760 Sep 26 2013 /bin/ping
Perlu diketahui, penggunaan Set User ID memiliki resiko keamanan yang cukup besar, oleh karena itu hati-hatilah dalam menggunakan SUID. Dan demi alasan keamanan, SUID hanya dapat diterapkan pada file binary (kode yang sudah dikompilasi). Jika ingin menggunakan script (kode pemrograman tanpa dikompilasi), hanya dapat menggunakan script yang dibuat dengan bahasa perl, dan harus menginstall package tambahan, yaitu perl-suid untuk debian dan perl-suidperl untuk centos.
apt-get install perl-suid #untuk debian
yum install perl-suidperl #untuk centos
Jika ingin menggunakan shell script, maka perlu penangan khusus.
SGID (Set Group ID)
Apabila SUID lebih concern terhadap user, maka SGID lebih memperhatikan group. Sebuah executable file yang diterapkan Set Group ID pada file tersebut, maka proses yang dihasilkan akan memiliki group ID sesuai dengan group pemilik file tersebut.
Secara umum, SGID tidak jauh berbeda dengan SUID, SUID lebih concern pada user pemilik sebuah file, sedang SGID lebih concer kepada group pemilik file. Sedikit tambahan untuk SGID ialah, SGID dapat diterapkan selain untuk file, bisa juga diterapkan untuk directory. File baru yang dibuat dalam directory yang memiliki Set Group ID maka akan memiliki Group ID sesuai dengan Group ID pemilik directory tersebut.Untuk praktek, kita akan masuk ke directory /tmp agar tidak mengotori sistem. Di sini, user1 akan membuat sebuah directory dengan nama diruser1.
[user1@santos tmp]$ mkdir diruser1
Kemudian beri permission "write" untuk other agar user lain dapat membuat file dalam directory tersebut.[user1@santos tmp]$ chmod o+w diruser1
[user1@santos tmp]$ ls -l
total 32032
drwxrwxrwx. 2 user1 user1 4096 Jun 3 07:42 diruser1
Selanjutnya kita terapkan Set Group ID pada directory diruser1.[user1@santos tmp]$ chmod g+s diruser1/
[user1@santos tmp]$ ls -l
total 32032
drwxrwsrwx. 2 user1 user1 4096 Jun 3 07:42 diruser1
Seperti yang terlihat, tanda 's' pada bagian group berarti directory diruser1 sudah diatur untuk Set Group ID. Setelah pengaturan perijinan selesai, kita masuk ke directory diruser1 dan membuat file di dalamnya.[user1@santos tmp]$ cd diruser1/
[user1@santos diruser1]$ touch fileuser1
[user1@santos diruser1]$ ls -l
total 0
-rw-rw-r--. 1 user1 user1 0 Jun 3 07:43 fileuser1
Setelah user1 membuat file dalam diruser1, maka sekarang user2 akan membuat file di dalam diruser1.[user2@santos tmp]$ cd diruser1/
[user2@santos diruser1]$ touch fileuser2
[user2@santos diruser1]$ ls -l
total 0
-rw-rw-r--. 1 user1 user1 0 Jun 3 07:43 fileuser1
-rw-rw-r--. 1 user2 user1 0 Jun 3 07:43 fileuser2
Seperti yang terlihat, file yang dibuat oleh user2 (fileuser2) memang tetap milik user2, akan tetapi group dari fileuser2 sama dengan group pemilik directory diruser1, yaitu group user1.Beerikut ini adalah contoh penggunaan dan penghapusan Set Group ID.
# menerapkan Set User ID dengan huruf 'g' (group pemilik)
[user1@santos ~]# chmod u+s /tmp/diruser1
[user1@santos ~]# ls -l /tmp/
drwxr-sr-x. 2 user1 user1 4096 Jun 3 07:43 diruser1
# menghapus Set User ID dengan huruf 'g'
[user1@santos ~]# chmod u-s /tmp/diruser1
[user1@santos ~]# ls -l /tmp
drwxr-xr-x. 2 user1 user1 4096 Jun 3 07:43 diruser1
Sticky bit
Apabila Sticky bit diterapkan ke sebuah directory, maka file yang ada di dalamnya hanya dapat dihapus oleh user pemilik file tersebut atau root. Secara default, directory /tmp dalam sistem linux sudah dipasangi sticky bit. Saya akan membuat sebuah directory baru di dalam directory /tmp dengan nama dirsticky, kemudian saya akan memberikan permission 777 pada directory dirsticky agar semua user dapat membuat file di dalamnya.[root@santos tmp]# mkdir dirsticky
[root@santos tmp]# chmod 777 dirsticky
[root@santos tmp]# ls -l
total 32040
drwxrwxrwx. 2 root root 4096 Jun 3 09:08 dirsticky
Kemudian sebagai user1 saya akan membuat sebuah file dengan nama warkop, dan kemudian user1 akan memberikan permission 777 kepada file warkop tersebut.[user1@santos dirsticky]$ echo dono > warkop
[user1@santos dirsticky]$ chmod 777 warkop
[user1@santos dirsticky]$ ls -l
total 4
-rwxrwxrwx. 1 user1 user1 5 Jun 3 09:10 warkop
Sebagai user2, saya dapat mengedit dan menghapus file warkop tersebut karena memang file itu memiliki permission 777.[user2@santos dirsticky]$ rm warkop
Sekarang sebagai root, saya akan menerapkan sticky bit pada directory dirsticky.[root@santos tmp]# chmod +t dirsticky
[root@santos tmp]# ls -l
total 32040
drwxrwxrwt. 2 root root 4096 Jun 3 09:12 dirsticky
Setelah sticky bit dipasang pada directory dirsticky yang ditandai dengan adanya huruf 't' pada bagian other, sekarang user1 akan membuat lagi file dengan nama patrio, dan tetap memberikan permission 777 pada file patrio tersebut.[user1@santos dirsticky]$ echo parto > patrio
[user1@santos dirsticky]$ chmod 777 patrio
[user1@santos dirsticky]$ ls -l
total 4
-rwxrwxrwx. 1 user1 user1 6 Jun 3 09:13 patrio
Sebagai user2, saya akan mencoba mengedit, menghapus dan mengganti nama file patrio.[user2@santos dirsticky]$ echo "parto akri eko" > patrio
[user2@santos dirsticky]$ cat patrio
parto akri eko
[user2@santos dirsticky]$ rm patrio
rm: cannot remove `patrio': Operation not permitted
[user2@santos dirsticky]$ mv patrio patrio2
mv: cannot move `patrio' to `patrio2': Operation not permitted
Ternyata, setelah directory dirsticky dipasangi sticky bit, user2 hanya dapat mengedit file yang dibuat oleh user1, tidak dapat menghapus atau mengganti nama file yang dibuat oleh user1.Untuk menghapus sticky bit dari sebuah directory, gunakan perintah
chmod -t <nama_dir>
Referensi
- http://www.bashguru.com/2010/03/unixlinux-advanced-file-permissions.html
- http://www.golinuxhub.com/2013/03/understanding-special-permission-sticky.html
- http://www.linuxnix.com/2012/01/sticky-bit-set-linux.html
Tweet
Tidak ada komentar:
Posting Komentar