FTP Server Di Solaris 11

Saya punya server Solaris 11 dengan hostname ncc-dev-sms01. Saat saya ingin mencoba mengakses server ini melalui FTP tapi saya mendapati error seperti ini :

root@slc03dto:~# ftp ncc-dev-sms01
ftp: connect: Connection refused
ftp> quit
root@slc03dto:~# 

Error seperti itu dapat dipastikan karena servis FTP server di ncc-dev-sms01 belum aktif. Ketika saya cek di server ncc-dev-sms01 memang tidak terlihat ada servis FTP yang sedang aktif :

root@ncc-dev-sms01:~# svcs | grep -i ftp
root@ncc-dev-sms01:~#

Saya coba aktifkan dengan perintah svcadm enable tapi mendapati error seperti ini :

root@ncc-dev-sms01:~# svcadm enable ftp
svcadm: svc:/network/ftp:default: is not complete, missing general/complete (see svcs -xv svc:/network/ftp:default for details)
root@ncc-dev-sms01:~# 

Mengikuti petunjuk yang muncul saya gunakan perintah svcs -xv tersebut :

root@ncc-dev-sms01:~# svcs -xv svc:/network/ftp:default
svc:/network/ftp:default (?)
 State: -
Reason: Service is incomplete, defined only by profile /etc/svc/profile/generic.xml.  To install this service, identify and install the package which provides the service's primary manifest.  Use "pkg search 'svc\:/network/ftp\:default'" to identify the package, then "pkg install <pkg>" to install the indicated package.
Impact: This service is not running.
root@ncc-dev-sms01:~# 

Untuk memasang servis FTP yang belum ada tadi, saya gunakan perintah seperti di bawah ini :

root@ncc-dev-sms01:~# pkg install pkg://solaris/service/network/ftp
           Packages to install:  1
       Create boot environment: No
Create backup boot environment: No
            Services to change:  2


DOWNLOAD                                PKGS         FILES    XFER (MB)   SPEED
Completed                                1/1       112/112      0.8/0.8  2.1M/s


PHASE                                          ITEMS
Installing new actions                       179/179
Updating package state database                 Done
Updating image state                            Done
Creating fast lookup database                   Done
root@ncc-dev-sms01:~# 

Setelah servis tersebut aktif, saya bisa mengulang kembali perintah svcadm enable tadi :

root@ncc-dev-sms01:~# svcadm enable ftp
root@ncc-dev-sms01:~# svcs | grep -i ftp
online          3:52:46 svc:/network/ftp:default
root@ncc-dev-sms01:~#

Setelah servis ini aktif saya bisa melihat servis FTP sudah LISTEN di port 21 :

root@ncc-dev-sms01:~# netstat -an | egrep "21.*LISTEN"
  *.21                 *.*                0      0 128000      0 LISTEN
  *.21                              *.*                             0      0 128000      0 LISTEN      
root@ncc-dev-sms01:~#

Dengan begitu sekarang saya sudah bisa mengakses server ini melalui perintah FTP :

root@slc03dto:~# ftp ncc-dev-sms01
Connected to ncc-dev-sms01.
220 ::ffff:192.168.1.11 FTP server ready
Name (ncc-dev-sms01:ttirtawi): smf_oper
331 Password required for smf_oper
Password:
230 User smf_oper logged in
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> 

Untuk membatasi user yang tidak boleh mengakses FTP server ini, saya bisa menambahkan username yang bersangkutan dalam berkas berikut ini :

root@ncc-dev-sms01:~# cat /etc/ftpd/ftpusers 
#
# List of users denied access to the FTP server, see ftpusers(4).
#
root
daemon
bin
sys
adm
lp
uucp
nuucp
dladm
netadm
netcfg
smmsp
gdm
xvm
mysql
openldap
webservd
nobody
noaccess
nobody4
aiuser
unknown
ftp
root@ncc-dev-sms01:~# 

Demikian catatan singkat saya tentang cara mengaktifkan FTP server di Solaris 11. Langkah-langkah ini bisa dilakukan pada global zone maupun dari dalam local zone.

Daftar Paket & Isinya di Sistem Unix

Di lingkungan sistem operasi Unix, aplikasi (software) dikenal sebagai package (paket). Masing-masing varian Unix punya cara sendiri-sendiri untuk menampilkan daftar paket yang terinstal. Artikel ini saya tulis sebagai catatan untuk mengingat-ingat aneka macam cara menampilkan daftar paket di beberapa varian Unix.

Di Solaris 10 misalnya saya ingin melihat paket Wireshark saya menggunakan perintah pkginfo. Karena di Solaris 10 penamaan paket cukup unik, saya perlu melihat dulu apa nama paket yang terdaftar.

root@fda05:/# cat /etc/release 
                   Oracle Solaris 10 8/11 s10s_u10wos_17b SPARC
  Copyright (c) 1983, 2011, Oracle and/or its affiliates. All rights reserved.
                            Assembled 23 August 2011
root@fda05:/# 
root@fda05:/# pkginfo | grep -i wireshark
application SMCwires                         wireshark
root@fda05:/#

Dari hasil pkginfo di atas, saya bisa lihat bahwa nama paket Wireshark adalah SMCwires. Lalu saya bisa cari detil informasi tentang paket SMCwires menggunakan perintah yang sama seperti berikut ini :

root@fda05:/# pkginfo -l SMCwires
   PKGINST:  SMCwires
      NAME:  wireshark
  CATEGORY:  application
      ARCH:  sparc
   VERSION:  1.6.8
   BASEDIR:  /usr/local
    VENDOR:  Gerald Combs et al
    PSTAMP:  Steve Christensen
  INSTDATE:  Jul 30 2012 03:08
     EMAIL:  steve@smc.vnet.net
    STATUS:  completely installed
     FILES:      518 installed pathnames
                   7 shared pathnames
                  33 directories
                 134 executables
              266776 blocks used (approx)
root@fda05:/#

Dengan menggunakan opsi -l saya bisa lihat versi paket yang terinstal, lokasi instalasi, dsb. Meskipun saya tahu lokasi paket tersebut ada di /usr/local, saya masih belum tahu file apa saja yang dimiliki oleh paket SMCwires. Untuk memeriksa file apa saja yang dimiliki oleh paket tersebut saya bisa menggunakan perintah pkgchk seperti berikut ini :

root@fda05:/# pkgchk -v SMCwires
/usr/local/bin
/usr/local/bin/capinfos
/usr/local/bin/dftest
/usr/local/bin/dumpcap
/usr/local/bin/editcap
/usr/local/bin/idl2wrs
/usr/local/bin/mergecap
/usr/local/bin/randpkt
/usr/local/bin/rawshark
/usr/local/bin/text2pcap
/usr/local/bin/tshark
/usr/local/bin/wireshark
/usr/local/doc
/usr/local/doc/wireshark
...
...
...
/usr/local/share/wireshark/tpncp
/usr/local/share/wireshark/tpncp/tpncp.dat
/usr/local/share/wireshark/tshark.html
/usr/local/share/wireshark/wimaxasncp
/usr/local/share/wireshark/wimaxasncp/dictionary.dtd
/usr/local/share/wireshark/wimaxasncp/dictionary.xml
/usr/local/share/wireshark/wireshark-filter.html
/usr/local/share/wireshark/wireshark.html
/usr/local/share/wireshark/ws.css
root@fda05:/#

Hasil perintah pkgchk tadi cukup panjang sehingga saya hanya tampilkan bagian awal & akhirnya saja.

Solaris 11 menggunakan pendekatan yang berbeda untuk menginvetarisir paket-paketnya. Kita perlu menggunakan perintah pkg list untuk melihat daftar paket yang terinstal di mesin Solaris 11. Misalnya seperti contoh berikut ini :

root@host02:/# cat /etc/release 
                            Oracle Solaris 11.1 SPARC
  Copyright (c) 1983, 2012, Oracle and/or its affiliates.  All rights reserved.
                           Assembled 19 September 2012
root@host02:/# 
root@host02:/# pkg list | grep wireshark
diagnostic/wireshark                              1.8.9-0.175.1.11.0.4.0     i--
diagnostic/wireshark/tshark                       1.8.9-0.175.1.11.0.4.0     i--
diagnostic/wireshark/wireshark-common             1.8.9-0.175.1.11.0.4.0     i--
root@host02:/#

Kalau di Solaris 10 kita menggunakan pkginfo di Solaris 11 kita menggunakan perintah pkg info (dengan spasi) untuk menampilkan detil informasi tentang suatu paket.

root@host02:/# pkg info wireshark
          Name: diagnostic/wireshark
       Summary: Graphical network protocol analyzer
      Category: Applications/Internet
         State: Installed
     Publisher: solaris
       Version: 1.8.9
 Build Release: 5.11
        Branch: 0.175.1.11.0.4.0
Packaging Date: Thu Sep 05 15:59:08 2013
          Size: 2.86 MB
          FMRI: pkg://solaris/diagnostic/wireshark@1.8.9,5.11-0.175.1.11.0.4.0:20130905T155908Z
root@host02:/#

Untuk melihat semua file yang dimiliki oleh Wireshark, Solaris 11 menyediakan perintah pkg contents seperti contoh di bawah ini :

root@host02:/# pkg contents  wireshark
PATH
usr
usr/sbin
usr/sbin/wireshark
usr/share
usr/share/applications
usr/share/applications/wireshark.desktop
usr/share/man
usr/share/man/man1
usr/share/man/man1/wireshark.1
usr/share/pixmaps
usr/share/pixmaps/wireshark.png
root@host02:/#

FreeBSD menggunakan perintah yang mirip dengan Solaris 11 untuk menampilkan informasi tentang suatu paket :

root@testbsd:~ # uname -a
FreeBSD testbsd 9.2-RELEASE FreeBSD 9.2-RELEASE #0 r255898: Thu Sep 26 22:50:31 UTC 2013     root@bake.isc.freebsd.org:/usr/obj/usr/src/sys/GENERIC  amd64
root@testbsd:~ # 
root@testbsd:~ # pkg_info | grep wireshark
wireshark-1.10.1    Powerful network analyzer/capture tool
root@testbsd:~ # pkg_info -L wireshark-1.10.1
Information for wireshark-1.10.1:

Files:
/usr/local/man/man1/capinfos.1.gz
/usr/local/man/man1/editcap.1.gz
/usr/local/man/man1/mergecap.1.gz
/usr/local/man/man1/rawshark.1.gz
/usr/local/man/man1/text2pcap.1.gz
/usr/local/man/man1/dftest.1.gz
/usr/local/man/man1/randpkt.1.gz
/usr/local/man/man1/reordercap.1.gz
/usr/local/man/man1/wireshark.1.gz
/usr/local/man/man1/dumpcap.1.gz
/usr/local/man/man1/tshark.1.gz
/usr/local/man/man4/wireshark-filter.4.gz
/usr/local/bin/capinfos
/usr/local/bin/dftest
/usr/local/bin/dumpcap
/usr/local/bin/editcap
/usr/local/bin/wireshark
/usr/local/bin/mergecap
/usr/local/bin/randpkt
/usr/local/bin/rawshark
/usr/local/bin/reordercap
/usr/local/bin/tshark
/usr/local/bin/text2pcap
...
...
... 
/usr/local/share/wireshark/tshark.html
/usr/local/share/wireshark/text2pcap.html
/usr/local/share/wireshark/tpncp/tpncp.dat
/usr/local/share/wireshark/wimaxasncp/dictionary.dtd
/usr/local/share/wireshark/wimaxasncp/dictionary.xml
/usr/local/share/wireshark/wireshark-filter.html
/usr/local/share/wireshark/wireshark.html
/usr/local/share/wireshark/ws.css
/usr/local/share/applications/wireshark.desktop

root@testbsd:~ #

Sementara di Ubuntu Linux (atau Debian) kita bisa menggunakan perintah dpkg -l untuk menampilkan semua paket yang terinstal.

ttirtawi@gbt733:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 12.10
Release:    12.10
Codename:   quantal
ttirtawi@gbt733:~$ 
ttirtawi@gbt733:~$ dpkg -l | grep wireshark
ii  libwireshark-data                    1.8.2-2                                   all          network packet dissection library -- data files
ii  libwireshark2                        1.8.2-2                                   i386         network packet dissection library -- shared library
ii  wireshark                            1.8.2-2                                   i386         network traffic analyzer - GTK+ version
ii  wireshark-common                     1.8.2-2                                   i386         network traffic analyzer - common files
ttirtawi@gbt733:~$

Informasi semua file yang dimiliki suatu paket dapat diperoleh dengan menjalankan perintah dpkg -L seperti contoh di bawah ini :

ttirtawi@gbt733:~$ dpkg -L wireshark
/.
/usr
/usr/share
/usr/share/applications
/usr/share/applications/wireshark.desktop
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/wireshark.1.gz
/usr/share/doc
/usr/share/doc/wireshark
/usr/share/doc/wireshark/copyright
/usr/share/pixmaps
/usr/share/pixmaps/wsicon32.xpm
/usr/share/icons
/usr/share/icons/hicolor
/usr/share/icons/hicolor/scalable
/usr/share/icons/hicolor/scalable/apps
/usr/share/icons/hicolor/scalable/apps/wireshark.svg
/usr/share/icons/hicolor/48x48
/usr/share/icons/hicolor/48x48/apps
/usr/share/icons/hicolor/48x48/apps/wireshark.png
/usr/share/menu
/usr/share/menu/wireshark
/usr/bin
/usr/bin/wireshark
/usr/share/doc/wireshark/README.Debian
/usr/share/doc/wireshark/changelog.Debian.gz
ttirtawi@gbt733:~$

Fedora Linux atau distro berbasis Red Hat umumnya menggunakan perintah rpm untuk segala hal yang berkaitan dengan paket-paket aplikasinya. Misalnya pada contoh di bawah ini, di Fedora 16 saya bisa menggunakan perintah rpm -qa untuk menampilkan semua paket yang terintal :

ttirtawi@appliance:~$ lsb_release -a
LSB Version:    :core-4.0-ia32:core-4.0-noarch
Distributor ID: Generic
Description:    Generic release 16 (Generic)
Release:    16
Codename:   Generic
ttirtawi@appliance:~$ 
ttirtawi@appliance:~$ rpm -qa | grep -i wireshark
wireshark-1.6.10-1.fc16.i686
ttirtawi@appliance:~$

Sama seperti contoh-contoh sebelumnya, untuk menampilkan informasi tentang semua file yang dimiliki oleh Wireshark saya bisa menggunakan perintah rpm -ql seperti ditunjukkan pada contoh di bawah ini :

ttirtawi@appliance:~$ rpm -ql wireshark
...
...
...
/usr/sbin/capinfos
/usr/sbin/dftest
/usr/sbin/dumpcap
/usr/sbin/editcap
/usr/sbin/mergecap
/usr/sbin/randpkt
/usr/sbin/rawshark
/usr/sbin/text2pcap
/usr/sbin/tshark
...
...
...
...
/usr/share/wireshark/rawshark.html
/usr/share/wireshark/services
/usr/share/wireshark/smi_modules
/usr/share/wireshark/text2pcap.html
/usr/share/wireshark/tpncp
/usr/share/wireshark/tpncp/tpncp.dat
/usr/share/wireshark/tshark.html
/usr/share/wireshark/wimaxasncp
/usr/share/wireshark/wimaxasncp/dictionary.dtd
/usr/share/wireshark/wimaxasncp/dictionary.xml
/usr/share/wireshark/wireshark-filter.html
/usr/share/wireshark/wireshark.html
/usr/share/wireshark/ws.css
ttirtawi@appliance:~$ rpm -qa | grep -i wireshark
wireshark-1.6.10-1.fc16.i686
ttirtawi@appliance:~$

Masalah Dengan BOOTFS Pada Solaris 11

Tadi pagi rekan saya mengajak diskusi tentang masalah bootfs di Solaris 11. Ceritanya rekan saya sedang melakukan recovery boot disk server Solarisnya yang bermasalah. Cara recovery-nya adalah dengan melakukan restore dari ZFS snapshot. Setelah boot servernya dengan menggunakan DVD Solaris, rekan saya sudah melakukan partisi root disk seperti ini :

partition> label
[0] SMI Label
[1] EFI Label
Specify Label type[0]: 0
Ready to label disk, continue? y

partition> p
Current partition table (unnamed):
Total disk cylinders available: 14087 + 2 (reserved cylinders)

Part      Tag    Flag     Cylinders         Size            Blocks
  0       root    wm       0 - 14085      136.70GB    (14086/0/0) 286678272
  1 unassigned    wu       0                0         (0/0/0)             0
  2     backup    wu       0 - 14086      136.71GB    (14087/0/0) 286698624
  3 unassigned    wm       0                0         (0/0/0)             0
  4 unassigned    wm       0                0         (0/0/0)             0
  5 unassigned    wm       0                0         (0/0/0)             0
  6 unassigned    wm       0                0         (0/0/0)             0
  7 unassigned    wm       0                0         (0/0/0)             0

partition> label
[0] SMI Label
[1] EFI Label
Specify Label type[0]: 0
Ready to label disk, continue? y

partition>

Harddisk yang dialokasikan sebagai boot device di Solaris 11 harus menggunakan label SMI. Tapi rekan saya keliru saat membuat rpool, dia membuat rpool tanpa mendefinisikan slice 0. Perintah yang dia pakai adalah seperti berikut ini :

root@solaris:/# zpool create -o version=33 -f -o failmode=continue -R /a -m legacy -o cachefile=/etc/zfs/zpool.cache rpool c3t0d0

Karena argumen yang dipakai hanya c3t0d0 (keseluruhan harddisk) hasil rpool-nya menjadi seperti berikut ini :

root@solaris:/root# zpool status
  pool: rpool
 state: ONLINE
  scan: none requested
config:

        NAME      STATE     READ WRITE CKSUM
        rpool     ONLINE       0     0     0
          c3t0d0  ONLINE       0     0     0

errors: No known data errors
root@solaris:/root#

Akibatnya rekan saya menemukan masalah saat mendefinisikan bootfs, dia mendapatkan error seperti berikut ini :

root@solaris:/root# zpool set bootfs=rpool/ROOT/solaris rpool
cannot set property for 'rpool': property 'bootfs' not supported on EFI labeled devices
root@solaris:/root#

Ternyata walaupun di awal tadi harddisk c3t0d0 sudah diberi label SMI, labelnya berubah lagi karena penggunaan perintah zpool yang kurang tepat. Pembuatan rpool tanpa mendefinisikan slice, mengakibatkan Solaris melabel ulang harddisk tersebut dengan label EFI. Harddisk dengan label EFI ditandai dengan adanya partisi nomor 8, ini bisa dilihat dengan menggunakan perintah prtvtoc seperti contoh berikut ini :

root@solaris:/root# prtvtoc /dev/rdsk/c3t0d0
* /dev/rdsk/c3t0d0 partition map
*
* Dimensions:
*     512 bytes/sector
* 286739329 sectors
* 286739262 accessible sectors
*
* Flags:
*   1: unmountable
*  10: read-only
*
* Unallocated space:
*       First     Sector    Last
*       Sector     Count    Sector
*          34       222       255
*
*                          First     Sector    Last
* Partition  Tag  Flags    Sector     Count    Sector  Mount Directory
       0      4    00        256 286722656 286722911
       8     11    00  286722912     16384 286739295
 root@solaris:/root#

Di akhir diskusi saya sarankan untuk menghapus saja rpool yang sudah dibuat. Setelah dihapus, saya sarankan untuk membuat rpool dengan mendefinisikan harddisk lengkap sampai slice-nya (c3t0d0s0). Contoh perintahnya seperti berikut ini :

root@solaris:/root# zpool create -o version=33 -f -o failmode=continue -R /a -m legacy -o cachefile=/etc/zfs/zpool.cache rpool /dev/dsk/c3t0d0s0
root@solaris:/root#

root@solaris:/root# zpool status
  pool: rpool
 state: ONLINE
  scan: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        rpool       ONLINE       0     0     0
          c3t0d0s0  ONLINE       0     0     0

errors: No known data errors
root@solaris:/root#

Sampai saat ini saya tidak tahu apakah ada caranya supaya boot disk di mesin Sparc (dengan Solaris 11) bisa menggunakan harddisk dengan EFI label.

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.

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.