Permission Concept on *NIX

#ls -al
drwxr-xr-x  12 root  wheel   512 Jan 31  2008 apache
drwxr-xr-x   2 root  wheel  4608 Jul 25 23:21 bin
drwxr-sr-t   6 root  wheel   512 Jan 31  2008 dnscache

Banyak sekali diantara kita yang masih bingung dengan konsep permission baik file maupun folder/direktori pada sistem *NIX.  Kadang tampil dengan bit-bit read, write dan execute. Kadang juga bisa tampil dengan notasi oktal, hingga menerjemahkan setuid dan menggunakan sticky bit.

Konsep Dasar

Perhatikan kembali contoh di atas.

  • Tiga Kelompok dari tiga (Three Sets of Three). Karena yang kita lihat di atas adalah tiga direktori/folder. Maka diawal terdapat huruf ‘d’, yang menunjukkan nama ‘apache‘, ‘bin‘, dan ‘dnscache‘ adalah berupa direktori. Diikuti dengan 9 karakter string yang menunjukkan 3 jenis permission untuk tiga tingkat akses yang berbeda (3 x 3 = 9).
  • UGO (User/Owner, Group, Other). Sehingga untuk rwx pertama adalah untuk User, yang kedua adalah untuk Group, dan yang ketiga adalah untuk Other.
  • Lihat siapa yang memiliki file/folder. dapat melihat pemilik user dan group dari sebuah file/folder. Tapi tidak pernah untuk other. Hal ini karena permission mudah diberikan kepada other.

Bilangan Triplet

dimana

r : read berarti anda dapat melihat isi sebuah direktori. Sederhananya, dapat di ‘ls‘ kan

w : write berarti anda dapat membuat/menghapus isi yang terdapat dalam sebuah direktori

x : execute berarti anda dapat masuk ke dalam sebuah direktori. Sederhananya, dapat di ‘cd‘ kan

Public & Private: Bit Sticky, Setuid, dan Setgid

Rata-rata file di UNIX umumnya bersifat publicly readable: “Dapat dibaca/dieksekusi oleh siapa saja, tapi hanya bisa dimodifikasi oleh admin/root“. Permissionnya adalah (root as owner, root as group, 644 as mode) atau (root, root, 755) untuk program. Contohnya amat banyak, misalnya semua file di /usr/bin, /usr/share, dll.  Semua dokumentasi, program, librari umumnya bersifat publik di UNIX. Semua file-file ini memang tidak berisi data rahasia yang harus di’rahasiakan’.

Bahkan lokasi-lokasi tertentu sifatnya lebih bebas lagi, publicly writable (atau world writable): free for all. Dapat ditulisi/modifikasi oleh siapa saja. Contoh yang paling terkenal adalah /tmp. Permission direktori ini adalah (root, root, 777). Setiap orang dapat menaruh file di sini karena bit w pada kolom other menyala. Artinya setiap orang/user memiliki akses “write” pada direktori ini.

Bit Sticky. Agar tidak terlalu terkesan “bebas”, maka ada bit permission tambahan lain yang dihidupkan pada direktori /tmp ini yaitu bit sticky. Dengan hidupnya bit ini, maka ada restriksi tambahan: file di dalam direktori hanya boleh diganti nama (di-rename) atau dihapus oleh pemiliknya sendiri. Artinya, Anda bisa saja menambah file sesuka hati ke /tmp, tapi tidak bisa seenaknya menghapus atau mengganti nama file milik orang lain.

Umumnya direktori-direktori free for all ditambahi bit sticky ini. Untuk mengaktifkan bit sticky di command line, dapat digunakan perintah “chmod +t” atau mode numerik 1000, contoh: “chmod 1777“. Di perintah “ls” Anda akan melihat huruf “t” atau “T” di ujung deretan permission mode sebagai tanda bahwa bit sticky telah aktif.

Setuid. Didisain untuk menyelesaikan masalah mendasar: user tidak punya akses untuk menjalankan beberapa program. Jawabannya adalah dengan menambahkan opsi pada file dengan mengatakan: “Tanpa menghiraukan siapapun yang menjalankan program, jalankanlah sebagai pemilik bukan user yang mengeksekusinya”. Sebuah file setuid jika dijalankan akan berjalan bukan sebagai user yang memanggilnya, tapi sebagai user owner file. Contohnya adalah /bin/su. Karena owner program /bin/su adalah root, maka tidak peduli siapapun yang memanggil program ini, su akan berjalan sebagai root. Seperti kita ketahui, su (“switch user“) berguna untuk berganti user. Kemampuan ajaib berganti-ganti user ini baru dapat diperoleh jika berjalan sebagai root.

Setgid. Jika bit setgid dimiliki oleh suatu direktori maka semua file (termasuk direktori) yang dibuat di dalam direktori tersebut akan memiliki GID yang sama dengan GID dari direktori tersebut. Jika direktori tidak memiliki bit setgid maka file yang baru dibuat di dalam direktori itu akan memiliki GID yang sama dengan GID efektif dari proses yang membuat file tersebut.

Semoga Bermanfaat