Menyimpan Password dalam KeePassX

Sampai saat ini saya punya banyak password yang perlu saya ingat-ingat. Mulai dari password beberapa akun email, login ke banyak website, Paypal, iTunes, VPN, dsb. Memang paling gampang menggunakan 1 macam passsword untuk segala kebutuhan. Tapi cara ini kurang bijaksana & berbahaya. Karena begitu banyak password yang perlu saya hafalkan, saya kerap lupa password apa yang harus saya pakai saat login ke suatu website. Belum lagi kalau websitenya jarang saya akses, kemungkinan besar akan lupa password login-nya. Atau misalnya saat password sebuah website-nya sudah disimpan otomatis oleh web browser, sehingga saya lupa total apa password loginnya saat saya mengakses web tersebut dari komputer lain.

Saya memilih untuk menggunakan KeePassX untuk menyimpan semua password saya. KeePassX ini adalah aplikasi yang dibuat untuk menyimpan banyak password dalam sebuah database terenkripsi. Idenya adalah kita buat database password, lalu kita beri password (lagi-lagi password..hehehe…). Sehingga kita cukup mengingat-ingat 1 password untuk membuka database tersebut. Database-nya berupa 1 file dengan ekstensi *.kdb yang ukurannya tidak terlalu besar. Hmmm mungkin ukurannya bisa membengkak bila menyimpan sampai ribuan password. File database KeePass saya cuma berukuran 16KB.

KeePassX ini tersedia secara gratis untuk Mac OSX, Windows, & juga untuk Linux.

Ini contoh langkah-langkah menggunakan KeePassX di Ubuntu Linux (langkah ini sama bisa dipakai juga di Windows atau Mac OSX).

  1. Setelah membuka aplikasi KeePassX, tampilan yang muncul seperti berikut ini :Untuk mulai membuat database, klik ikon New di pojok kiri atas seperti ditunjukkan oleh tanda panah.
  2. Kita akan diminta untuk memasukkan master password untuk database baru ini :Ini langkah yang penting, jangan sampai lupa master password ini.
  3. Setelah itu kita bisa mulai memasukkan data-data password yang ingin kita simpan dalam KeePassX. Caranya tinggal klik kanan di area yang kosong atau klik ikon “Add New Entry” seperti yang ditunjukkan oleh tanda panah berikut ini :
  4. Akan muncul jendela baru seperti tampilan berikut ini :Di sini kita akan menyimpan data-data seperti misalnya username, password, URL website, keterangan, dsb.
  5. Di sebelah kanan kolom password ada ikon bergambar mata. Ikon ini dipakai untuk menampilkan/menyembunyikan password yang kita masukkan.
  6. Di sebelah kanan kolom password, ada juga ikon bertulisan Gen. Ikon ini fungsinya untuk menampilkan menu password generator. KeePassX bisa membantu kita membuatkan password yang rumit.Kita bisa memilih berapa panjang password yang diinginkan, lalu kombinasi karakter apa saja yang ingin dipakai. Tinggal klik tombol Generate untuk mendapatkan password baru. Akhiri dengan mengklik tombol OK.
  7. Bila semua data yang ingin disimpan sudah dimasukkkan, akhiri dengan menekan tombol OK pada tampilan berikut ini :
  8. Kita bisa mengulang langkah-langkah tadi untuk menyimpan semua password yang ingin kita simpan. Bila sudah selesai kita perlu menyimpan database KeePassX ini. Klik tombol Save seperti ditunjukkan pada gambar di bawah ini :
  9. Kita tinggal mendefinisikan nama file database ini & mengakhiri dengan menekan tombol Save :
  10. Tadi saya memilih nama mypassword, KeePassX akan otomatis menambahkan ekstensi *kdb seperti terlihat di bawah ini :

Supaya bisa diakses dari komputer & handphone, saya menyimpan database file tadi ke dalam folder-nya Dropbox. Ini contoh di Mac OSX, saya bisa akses database file tadi dari Dropbox.Saya bisa langsung membukanya dengan aplikasi KeePassX :Tentu saya perlu memasukkan master password yang tadi saya set saat membuat database-nya. Bila saya memasukkan master password yang tepat maka saya bisa mengakses isi database tadi :File database KeePass tersebut bisa dibuka juga di Android dan di IOS. Saya pakai aplikasi KeePassDroid, sementara di IOS ada aplikasi iKeepPass yang bisa membuka file database yang sudah kita buat. iKeePass di IOS perlu dibayar dengan harga $0.99.

Ini contoh saat saya mencoba mengakses database password tadi dengan menggunakan iKeePass di iPhone.

  1. Saat pertama diinstal ada database bawaan yaitu “Test database”.
  2. Untuk menambah database yang tadi ada di Dropbox, tap pada menu Setting – Databases. Lalu tap menu Add yang ada di kanan atas :
  3. Lalu kita pilih Type-nya Dropbox & pilih file database tadi :
  4. Kita bisa memasukkan master password sekarang pada kolom Password & akhiri dengan tap menu Ok :
  5. KeePassX akan melakukan sinkronisasi file database tersebut dengan Dropbox :
  6. Tidak lama kemudian KeePassX akan menampilkan isi database password :

Mirip caranya di Android saat menggunakan KeePassDroid :
KeePassDroid juga bisa mengakses database file yang disimpan dalam Dropbox :
Dengan memasukkan master password yang tepat, kita bisa membaca semua isi password yang tersimpan dalam database tadi :

Kira-kira begitu alternatif menyimpan banyak password yang saya pakai sekarang.

NFS Share di Solaris 11

Biasanya di mesin Solaris yang menggunakan filesystem ZFS, untuk mengaktifkan NFS sharing saya cukup menggunakan perintah :

zfs set sharenfs=on /share-directory

Ini pernah saya tulis di postingan sebelumnya. Hari ini saya menemukan masalah sharing NFS di Solaris 11. Cara tadi tidak bisa dipakai di Solaris 11. Tadi saya ingin mengaktifkan NFS sharing untuk direktori /rpool/testing.

root@testbed:~# zfs list | grep testing
rpool/testing                                         31.5K   148G  31.5K  /rpool/testing
root@testbed:~# 
root@testbed:~# zfs set sharenfs=on rpool/testing
root@testbed:~# share
root@testbed:~#

Tapi cara tadi gagal terus. Lalu saya coba cek & aktifkan servis NFS server-nya. Saat dicek servis NFS server masih offline.

root@testbed:~# svcs | grep nfs
online         Nov_15   svc:/network/nfs/fedfs-client:default
offline        11:16:01 svc:/network/nfs/server:default
root@testbed:~#

Saya coba untuk aktifkan dengan perintah svcadm enable, ternyata gagal dengan tampilan error seperti berikut ini :

root@testbed:~ # svcadm enable -rst network/nfs/server
svcadm: Instance "svc:/network/nfs/server:default" has been disabled by another entity.
root@testbed:~#

Googling sebentar membawa saya ke website Oracle ini. Ternyata caranya berbeda di Solaris 11, menurut dokumen tadi tidak perlu lagi mengaktifkan servis NFS untuk bisa membagi direktori lewat NFS. Caranya cukup dengan menggunakan perintah berikut ini :

root@testbed:~# zfs set share=name=testing,path=/rpool/testing,prot=nfs rpool/testing
name=testing,path=/rpool/testing,prot=nfs
root@testbed:~# 
root@testbed:~# share
testing /rpool/testing  nfs     sec=sys,rw      
root@testbed:~#

Bila ingin mendefinisikan kontrol IP mesin mana yang bisa mengakses direktori tadi, saya tinggal tambahkan opsi seperti berikut ini :

share=name=testing,path=/rpool/testing,prot=nfs,rw=10.23.103.62,root=10.23.103.62

Dengan menggunakan perintah tadi, Solaris 11 akan otomatis mengaktifkan servis NFS server.

root@testbed:~# svcs | grep nfs/server
online         11:48:45 svc:/network/nfs/server:default
root@testbed:~#

Bila kita ingin menghapus share directory tadi caranya cukup dengan :

root@testbed:~# zfs unshare rpool/testing
root@testbed:~# share
root@testbed:~#

Lucunya NFS servis akan tetap aktif meskipun sudah tidak ada lagi direktori yang di-share.

Whew, makin kagum dengan Google…semua informasi cuma sejauh jangkauan keyboard & mouse saja.

Ubuntu Untuk Akses Windows Yang Bermasalah

Salah seorang rekan saya bekerja sebagai freelancer IT Support. Meskipun memiliki toko komputer sendiri di Mangga Dua, tapi dia menikmati aktivitasnya sebagai IT Support “door to door”. Mengunjungi satu kantor ke kantor lainnya, dari satu client ke client lainnya memberikan layanan perbaikan PC. Salah satu pekerjaan yang dia lakukan berulang kali adalah instal ulang Windows di komputer kliennya yang bermasalah. Entah masalah terkena virus, sampai Windows yang corrupt dan tidak bisa boot lagi.

Saya lupa tepatnya (tapi rasanya sudah lebih dari 1 tahun yang lalu), saya mengenalkan rekan saya pada Ubuntu Linux. Waktu itu saya sekadar cerita pada dia bahwa Ubuntu Linux bisa dipakai langsung dari CD (atau dari USB) tanpa perlu menginstalnya permanen ke dalam harddisk. Saya ceritakan juga bahwa live OS seperti itu bisa dimanfaatkan untuk mengakses data-data dalam harddisk yang sistem operasinya bermasalah.

 photo ubuntu-live-os_zpsbca5b39b.png

Rupanya dia cukup tertarik, jadi waktu itu saya pasangkan Ubuntu ke dalam USB flash disk-nya. Saya ajarkan caranya untuk booting dari USB dan mencoba live OS. Sempat saya demokan juga waktu itu apa dan bagaimana Ubuntu saat dijalankan sebagai live OS. Simpel, praktis, tanpa perlu repot menginstal ke dalam harddisk. Repot & membuang banyak waktu.

Beberapa minggu kemarin saat rekan saya itu datang berkunjung, dia bercerita bahwa Ubuntu dalam USBnya benar-benar membantu rutinitas kerjanya sehari-hari. Tiap kali ada PC milik kliennya yang bermasalah & perlu diinstal ulang Windowsnya, rekan saya akan menggunakan Ubuntu OS untuk melakukan backup data. Jadi dia akan boot komputer kliennya dari USB Ubuntu tadi. Lalu setelah masuk dalam Ubuntu, Ubuntu akan langsung mengenali harddisk yang terpasang dalam PC. Tidak hanya itu, dengan beberapa klik saja Ubuntu otomatis menyiapkan partisi Windows untuk bisa dilihat & diakses data-datanya. Baru kemudian rekan saya akan meng-copy semua data dari partisi data Windowsnya ke dalam external harddisk. Baru kemudian dia bisa menghapus semua partisi yang ada & menginstal bersih Windows ke dalam PC tersebut. Setelah Windows selesai terinstal dia baru kembalikan lagi data yang sudah diamankan sebelumnya ke external harddisk.

Dulu katanya sebelum kenal dengan Ubuntu OS, tiap kali menjumpai kasus serupa dia “terpaksa” membawa pulang harddisk milik kliennya. Di rumah dia pasang harddisk tersebut ke dalam PC Windowsnya sendiri. Hal itu dilakukan sekadar untuk bisa mengakses data yang masih tersimpan dalam harddisk milik clientnya itu.

Saya cukup surprise mendengar cerita bahwa cara booting dari Ubuntu USB tadi sudah dilakukannya puluhan kali. Yang membuat saya surprise adalah rekan saya tadi itu 100% buta Linux. Tapi faktanya dia bisa menggunakan Ubuntu Linux & malah aktif menggunakannya sehari-hari untuk mendukung pekerjaannya. Ada kepuasan tersendiri bagi saya berhasil mengenalkan Linux pada seseorang yang tidak pernah tahu apa itu Linux sebelumnya. Tentu rekan saya tidak berkutat pada perintah-perintah di terminal (CLI commands).

Ubuntu Live CD Mengakses Harddisk Windows photo ubuntu-live-os-2_zps2323dc40.png

Baginya menggunakan Nautilus Ubuntu sudah sangat cukup. Bagi yang belum tahu, Nautilus itu adalah semacam Windows Explorer tempat anda mengakses data pada partisi C:\ atau D:\, atau tempat Anda membuka My Documents.

Begitu kira-kira sharing pengalaman rekan saya yang sukses memanfaatkan Linux untuk menunjang pekerjannya sehari-hari. Apakah Anda sudah pernah berkenalan dengan Ubuntu Linux?

Sekilas Tentang SUDO

Misalnya saya punya Ubuntu server dengan hostname ubuntu1204. Lalu saya buat user baru dengan nama sysadmin.

root@ubuntu1204:~# useradd -m -d /home/sysadmin -s /bin/bash sysadmin
root@ubuntu1204:~# passwd sysadmin
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully
root@ubuntu1204:~#

Ketika saya coba login dengan user sysadmin ternyata saya tidak bisa menggunakan perintah reboot untuk merestart servernya :

ttirtawi@macmini:~$ ssh sysadmin@192.168.10.100
sysadmin@192.168.10.100's password: 
Last login: Thu Jan  2 00:15:34 2014 from macmini.local
sysadmin@ubuntu1204:~$ /sbin/reboot
reboot: Need to be root
sysadmin@ubuntu1204:~$

Saya ingin memberi akses untuk user sysadmin kemampuan untuk merestart server. Untuk menjawab kebutuhan ini kita perlu sedikit mengenal tentang yang namanya sudo.

Akses kontrol di Ubuntu Linux diatur oleh perintah sudo. sudo dikenal sebagai akronim dari Super User Do. User yang diberi hak menggunakan perintah sudo bisa menjalankan perintah-perintah yang tadinya hanya bisa dijalankan oleh user root. Di Ubuntu Linux, root tidak bisa login secara langsung. Beda dengan distro Linux lainnya seperti Debian atau RedHat/CentOS, saat instalasi Ubuntu kita tidak diminta untuk memberi password pada akun root. Alih-alih hanya 1 user yang didefinisikan saat proses instalasi. User pertama ini langsung diberi akses penuh untuk menggunakan sudo. Misalnya seperti contoh di bawah ini, user ttirtawi tidak bisa login sebagai root menggunakan perintah su - root.

ttirtawi@ubuntu1204:~$ su - root
Password: 
su: Authentication failure
ttirtawi@ubuntu1204:~$ sudo bash
[sudo] password for ttirtawi: 
root@ubuntu1204:~#

Untuk mengakses root prompt digunakan perintah sudo bash. Uniknya sudo ini kita tidak perlu lagi repot-repot mendistribusikan password root. User yang diberi akses sudo cukup menggunakan password-nya sendiri.

Bila user biasa yang tidak punya akses sudo mencoba menggunakan perintah sudo akan muncul error seperti berikut ini :

faultmgmt@ubuntu1204:~$ sudo bash
[sudo] password for faultmgmt: 
faultmgmt is not in the sudoers file.  This incident will be reported.
faultmgmt@ubuntu1204:~$

Semua percobaan akses sudo yang gagal tadi akan disimpan dalam file /var/log/auth.log

root@ubuntu1204:~# tail -f /var/log/auth.log  | grep "NOT in sudoers"
Jan  2 08:36:27 ubuntu1204 sudo: faultmgmt : user NOT in sudoers ; TTY=pts/2 ; PWD=/home/faultmgmt ; USER=root ; COMMAND=/bin/bash
^C
root@ubuntu1204:~#

Semua hal berkaitan dengan pengaturan sudo disimpan dalam file /etc/sudoers. Sangat disarankan untuk tidak mengubah file /etc/sudoers secara langsung (dengan teks editor misalnya). Sebaiknya kita menggunakan perintah visudo untuk mengedit file /etc/sudoers. Perintah visudo secara default menggunakan editor nano. Meski menggunakan editor nano, visudo dilengkapi beberapa fungsi internal yang memastikan tidak ada kesalahan sintaks/format.

root@ubuntu1204:~# visudo

Ini contoh tampilan nano yang dipakai oleh perintah visudo :

Visudo Dengan Editor NANO photo nano-visudo_zps7e2c2e15.jpg

Penjaminan akses sudo bisa dilakukan pada level user atau group. Default-nya Ubuntu Linux menggunakan limitasi berbasis group untuk mengatur siapa-siapa yang bisa menggunakan sudo. Ada satu group khusus dengan nama sudo :

root@ubuntu1204:~# grep %sudo /etc/sudoers
%sudo   ALL=(ALL:ALL) ALL
root@ubuntu1204:~#

Pengaturan akses group ditandai dengan tanda %. Contoh di atas bisa dibaca sebagai berikut : semua user yang berada dalam group sudo bisa mengakses semua perintah root, tidak peduli dari mana dia mengakses mesin ini (akses remote dari komputer lain pun dibolehkan menggunakan sudo).

User pertama yang dibuat saat instalasi, masuk dalam group sudo :

root@ubuntu1204:~# grep sudo /etc/group
sudo:x:27:ttirtawi
root@ubuntu1204:~#

Artinya saya bisa menjalankan semua perintah sebagai root, misalnya saya bisa jalankan perintah ini :

  • sudo reboot
  • sudo aptitude install ...
  • sudo route add ...
  • sudo shutdown -h now
  • sudo mkfs.ext3 /dev/sda3
  • dsb

Balik lagi ke permasalahan di awal, bagaimana memberi akses pada perintah reboot saja pada user biasa (sysadmin)? Bisakah saya melakukannya hanya dengan memasukkan user sysadmin ke dalam group sudo? Tentu bisa, tapi dengan begitu user sysadmin akan bisa juga mengganti pengaturan IP, mengganti static routing, memformat harddisk, dsb.

Yang lebih tepat adalah dengan memberi akses pada perintah /sbin/reboot saja untuk user sysadmin. Dengan menggunakan perintah visudo saya menambahkan dua baris berikut ini ke dalam file /etc/sudoers :

Cmnd_Alias RESTART=/sbin/reboot
sysadmin ALL=(ALL) NOPASSWD: RESTART

Pertama saya membuat alias untuk perintah /sbin/reboot, aliasnya saya beri nama RESTART. Lalu saya beri akses kepada user sysadmin untuk menggunakan alias RESTART tadi. Opsi NOPASSWD: artinya user tidak perlu lagi memasukkan password saat mengeksekusi perintah sudo.

Berikut ini adalah salah satu contoh hasil akhir /etc/sudoers setelah saya menambahkan 2 baris baru tadi :

root@ubuntu1204:~# cat /etc/sudoers
#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults    env_reset
Defaults    secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification
Cmnd_Alias RESTART=/sbin/reboot

# User privilege specification
root    ALL=(ALL:ALL) ALL

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d

sysadmin ALL=(ALL) NOPASSWD: RESTART
root@ubuntu1204:~#

Dengan begitu user sysadmin sekarang bisa merestart server dengan tambahan perintah sudo.

ttirtawi@macmini:~$ ssh sysadmin@192.168.10.100
sysadmin@192.168.10.100's password: 
Last login: Thu Jan  2 00:19:34 2014 from macmini.local
sysadmin@ubuntu1204:~$ sudo reboot
sysadmin@ubuntu1204:~$ 
Broadcast message from ttirtawi@ubuntu1204
    (/dev/pts/2) at 0:11 ...

The system is going down for reboot NOW!
Connection to 192.168.10.100 closed by remote host.
Connection to 192.168.10.100 closed.
ttirtawi@macmini:~$

Bila banyak user dengan kebutuhan akses sudo yang sama, lebih efisien menggunakan akses group seperti ini :

Cmnd_Alias RESTART=/sbin/reboot
%sysadmin ALL=(ALL) NOPASSWD: RESTART

Saya tinggal memasukkan setiap user yang perlu hak merestart server ke dalam group sysadmin. Misalnya seperti berikut ini :

root@ubuntu1204:~# useradd -G sysadmin -m -d /home/budi -s /bin/bash budi
root@ubuntu1204:~# passwd budi
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully
root@ubuntu1204:~# su - budi
budi@ubuntu1204:~$
budi@ubuntu1204:~$ reboot
Command 'reboot' is available in '/sbin/reboot'
The command could not be located because '/sbin' is not included in the PATH environment variable.
This is most likely caused by the lack of administrative privileges associated with your user account.
reboot: command not found
budi@ubuntu1204:~$
budi@ubuntu1204:~$ /sbin/reboot
reboot: Need to be root
budi@ubuntu1204:~$
budi@ubuntu1204:~$ sudo /sbin/reboot
budi@ubuntu1204:~$ 
Broadcast message from ttirtawi@ubuntu1204
    (/dev/pts/2) at 9:07 ...

The system is going down for reboot NOW!
Connection to 192.168.10.100 closed by remote host.
Connection to 192.168.10.100 closed.
ttirtawi@macmini:~$

Saya membuat user baru dengan nama budi. User budi saya masukkan ke dalam group sysadmin. Oleh karenanya budi dapat merestart server dengan sudo reboot atau sudo /sbin/reboot.

Begitu kira-kira caranya mengatur akses pada perintah-perintah “penting” dengan menggunakan sudo.

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.