Sekilas Tentang RBAC

Misalkan saya punya sebuah server dengan Solaris 11 sebagai sistem operasinya (hostname-nya oraclesolaris11). Pada sistem tadi saya punya user operator.

ttirtawi@macmini:~$ ssh operator@192.168.10.70
Password: 
Last login: Wed Jan  1 18:12:26 2014 from 192.168.10.13
Oracle Corporation      SunOS 5.11      11.1    September 2012
operator@oraclesolaris11:~$

Sebagai user biasa tentu operator tidak bisa merestart sistem :

ttirtawi@macmini:~$ ssh operator@192.168.10.70
Password: 
Last login: Wed Jan  1 18:12:26 2014 from 192.168.10.13
Oracle Corporation      SunOS 5.11      11.1    September 2012
operator@oraclesolaris11:~$ reboot
reboot: permission denied
operator@oraclesolaris11:~$

Ok tentu ini normal karena user operator adalah normal user bukan root user. Biasanya user bisa login sebagai root (selama tahu password root) untuk kemudian merestart sistem. Asumsi user operator tahu password root sistem ini :

operator@oraclesolaris11:~$ su - root
Password: 
Roles can only be assumed by authorized users
su: Sorry
operator@oraclesolaris11:~$

Upss ternyata di Solaris 11 user biasa tidak bisa login sebagai root. Tidak seperti Linux atau Solaris versi sebelumnya, root user di dalam Solaris 11 didefinisikan sebagai role, Sederhananya dalam Bahasa Indonesia kita bisa terjemahkan roles sebagai “peran”. Untuk bisa login sebagai root, user biasa perlu diberi “peran” sebagai root.

operator@oraclesolaris11:~$ roles
No roles
operator@oraclesolaris11:~$

Ok mari kita beri peran root kepada user operator. Saya punya user lain yaitu ttirtawi yang memiliki roles sebagai root.

ttirtawi@oraclesolaris11:~$ su - root
Password: 
Oracle Corporation      SunOS 5.11      11.1    September 2012
root@oraclesolaris11:~#
root@oraclesolaris11:~# usermod -R+"root" operator
UX: usermod: operator is currently logged in, some changes may not take effect until next login.
root@oraclesolaris11:~#

Setelah diberi roles, user operator perlu melakukan login ulang.

ttirtawi@macmini:~$ ssh operator@192.168.10.70
Password: 
Last login: Wed Jan  1 18:12:47 2014 from 192.168.10.13
Oracle Corporation      SunOS 5.11      11.1    September 2012
operator@oraclesolaris11:~$ roles
root
operator@oraclesolaris11:~$

Perintah roles berguna untuk melihat peran apa saja yang dimiliki oleh user. Karena sekarang user operator bisa berperan sebagai root, tentu mudah bagi user operator untuk merestart sistem :

operator@oraclesolaris11:~$ su - root
Password: 
Oracle Corporation      SunOS 5.11      11.1    September 2012
root@oraclesolaris11:~# reboot
Connection to 192.168.10.70 closed by remote host.
Connection to 192.168.10.70 closed.
ttirtawi@macmini:~$

Oh ya tadi lupa disebutkan tidak cukup diberi role sebagai root, user operator perlu tahu juga password root.

Tapi tentu ini cukup berbahaya karena sekarang user operator bisa melakukan segala hal yang tadinya hanya root yang bisa melakukan. operator sekarang memiliki akses yang berlebihan dari sekadar kebutuhan awalnya untuk merestart sistem.

Lalu pertanyaan selanjutnya bagaimana caranya memberi akses pada user biasa hanya untuk merestart sistem? Caranya dengan mendefinisikan sebuah role baru.

  • membuat role baru atau sederhananya membuat “peran” baru.
  • membuat profil untuk role tersebut.
  • mengisi profil tadi dengan perintah-perintah yang ingin diberikan
  • memberi kuasa pada user tertentu untuk bisa memainkan “peran” baru tadi.

Kita perlu membuat role baru lalu mendefinisikan profilenya supaya hanya bisa mengakses perintah reboot. Misalkan kita sebut peran baru ini sebagai restart

root@oraclesolaris11:~# roleadd -m -d /export/home/restart restart    
80 blocks
root@oraclesolaris11:~# 
root@oraclesolaris11:~# passwd restart
New Password: 
Re-enter new Password: 
passwd: password successfully changed for restart
root@oraclesolaris11:~#

Menambah role sama prinsipnya sama dengan menambah user biasa. Karena mirip seperti user biasa, maka role yang tadi sudah kita buat juga terdaftar pada file /etc/passwd & /etc/shadow :

root@oraclesolaris11:~# grep restart /etc/passwd 
restart:x:54325:10::/export/home/restart:/usr/bin/pfbash
root@oraclesolaris11:~# 
root@oraclesolaris11:~# grep restart /etc/shadow 
restart:$5$lRko9uVR$P7Z3KkcPPnKC19oNHH.TjMKI7aMiF55ZI4PNUi/scdB:16071::::::11376
root@oraclesolaris11:~#

Yang membedakan hanyalah kita tidak bisa login langsung sebagai role tersebut.

Setelah kita punya role baru, kita perlu membuat profil baru untuk role tersebut. Misalnya kita buat profil dengan nama RESTART :

root@oraclesolaris11:~# vi /etc/security/prof_attr
root@oraclesolaris11:~# 
#
# The system provided entries are stored in different files
# under "/etc/security/prof_attr.d".  They should not be
# copied to this file.
#
# Only local changes should be stored in this file.
# This line should be kept in this file or it will be overwritten.
#
RESTART:::profile untuk restart sistem:help=restart.html
root@oraclesolaris11:~#

Setelah kita punya profile RESTART tadi, lalu kita berikan profil tadi kepada role restart dengan menggunakan perintah rolemod seperti contoh berikut ini :

root@oraclesolaris11:~# rolemod -P+"RESTART" restart

Daftar profil yang sudah diberikan pada suatu role bisa dilihat pada file /etc/user_attr :

root@oraclesolaris11:~# grep restart /etc/user_attr 
restart::::type=role;profiles=RESTART;roleauth=role
root@oraclesolaris11:~#

Langkah selanjutnya kita harus mendefinisikan perintah apa saja yang bisa dijalankan oleh profil RESTART. Caranya adalah dengan menambah definisi baru pada file /etc/security/exec_attr (untuk restart sistem profil ini perlu diberi akses pada perintah reboot) :

root@oraclesolaris11:~# vi /etc/security/exec_attr
#
# The system provided entries are stored in different files
# under "/etc/security/exec_attr.d".  They should not be
# copied to this file.
#
# Only local changes should be stored in this file.
# This line should be kept in this file or it will be overwritten.
#
RESTART:suser:cmd:::/usr/sbin/reboot:euid=0
root@oraclesolaris11:~#

Sampai di sini role baru kita tadi sudah bisa melakukan restart sistem. Tapi seperti tadi sudah dijelaskan kita tidak bisa langsung login sebagai role. Yang bisa dilakukan adalah memberi kuasa pada user tertentu untuk bisa memainkan role baru tadi.

Jadi langkah terakhir adalah memberi kuasa baru pada user operator untuk bisa memainkan “peran” restart :

root@oraclesolaris11:~# usermod -R+"restart" operator
UX: usermod: operator is currently logged in, some changes may not take effect until next login.
root@oraclesolaris11:~#

Setelah user operator melakukan login ulang sekarang operator sudah memiliki “peran” baru :

ttirtawi@macmini:~$ ssh operator@192.168.10.70
Password: 
Last login: Wed Jan  1 19:31:20 2014 from 192.168.10.13
Oracle Corporation      SunOS 5.11      11.1    September 2012
operator@oraclesolaris11:~$ roles
restart
operator@oraclesolaris11:~$

Mari kita coba untuk merestart sistem dengan menggunakan role tadi :

operator@oraclesolaris11:~$ reboot
reboot: permission denied
operator@oraclesolaris11:~$ su - restart
Password: 
Oracle Corporation      SunOS 5.11      11.1    September 2012
restart@oraclesolaris11:~$ reboot
Connection to 192.168.10.70 closed by remote host.
Connection to 192.168.10.70 closed.
ttirtawi@macmini:~$

Berhasil, dengan adanya role restart maka user operator bisa mengakses perintah reboot tanpa bisa mengakses perintah-perintah penting lainnya; seperti misalnya mematikan network interface :

restart@oraclesolaris11:~$ ipadm down-addr net0/v4
ipadm: cannot mark the address down: Insufficient user authorizations
restart@oraclesolaris11:~$

Manajemen akses pada perintah-perintah penting jadi lebih mudah dengan adanya role. Kita tinggal menambahkan perintah-perintah yang dibutuhkan pada role yang bersangkutan. Konsep inilah yang dikenal dengan nama RBAC singkatan dari Role Based Access Control.

Leave a Reply