Mempelajari “chmod” di Linux

Salah satu kerjaannya Sysadmin yang paling critical adalah mengelola permissions. Kekurang hati-hatian dalam mengelola permissions ini dapat menimbulkan resiko keamanan dari sistem yang kita kelola.

Kali ini kita akan coba mempelajari command chmod yang digunakan untuk mengelola permissions yang disampaikan di atas.

Apa yang membedakan dan merupakan nilai lebih dari permissions di Linux dibandingkan dengan sistem yang lain (terutama Wind**s)? Hmm, let’s see…

Ada tiga hal penting yang harus dipahami terkait permission ini: the elements, the actions dan who.

The elements terdiri dari dua tipe dimana permission diterapkan, yaitu pada File dan Folder.

The actions menentukan aksi apa yang bisa dilakukan pada elemen-elemen tersebut, meliputi:

  • Read
  • Write
  • Execute, dimana tidak hanya digunakan untuk mengeksekusi script atau binaries tapi juga berhubungan dengan aksi yang dapat dilakukan pada folder, seperti membuat file atau folder baru di dalam sebuah folder.

Dan siapa saja yang bisa melakukan aksi yang didefinisikan diatas (who)? Ada tiga komponen pada bagian ini, yaitu:

  • User sebagai pemilik dari file/folder tersebut.
  • Group dimana user pemilik file/folder tersebut merupakan anggotanya
  • Dan user lain (others) yang bukan merupakan pemilik file/folder tersebut dan juga tidak masuk kedalam group yang sama dengan user pemilik file/folder tersebut.

Jalankan command ls -l dan kita akan melihat bagaimana permission dari sebuah file/folder

Baca Juga:  Belajar Linux: Command Line Cheatsheet Part. 1

Field pertama, yang terdiri dari 10 karakter pada contoh di atas, menunjukkan permission dari elemen tersebut dengan penjelasan di bawah ini. 

Karakter pertama dari field pertama pada keluaran diatas menjelaskan File Type nya. Contoh di atas, karakter pertamanya nya adalah () yang berarti File Typenya adalah normal file. Bila merupakan folder/directory, karakter pertama akan berisikan huruf d.

Keterangan dari field File Type adalah sebagai berikut:
normal file

d directory

s socket file

l link file

9 karakter berikutnya setelah File Type menjelaskan permission dari file atau direktori tersebut, baik read (r), write (w), dan execute (x),untuk user pemilik file/folder, group dari user pemilik file/folder atau pihak lain secara berurutan (user – group – others).

Bagaimana merubah permissions dari sebuah file/folder? Hal ini dapat dilakukan dengan menggunakan command chmod. Perhatikan syntax nya di bawah ini:

chmod permissions file [file 2] [file n]

file; [file 2]; [file n] merupakan reprentasi dari nama file/folder yang ingin dirubah permissions nya. Lalu bagaimana dengan spesifikasi atau representasi dari permissions itu sendiri?

Permissions dapat dipresentasikan dengan octal representation maupun symbolic representation. Penjelasan untuk kedua representasi ini sebagai berikut:

Octal Representation

Untuk memahami notasi octal sebagai representasi permissions, perhatikan contoh dibawah ini, dimana kita mengatur permissions dari file.txt dengan ketentuan owner memiliki akses read dan writegroup nya memiliki akses write saja, dan pihak lain tidak memiliki akses apapun ke file.txt tersebut. Kita mengekusi command chmod sebagai berikut:

sudo chmod 640 file.txt

Sekarang kita coba untuk membaca file tersebut menggunakan user yang bukan merupakan owner dari file tersebut dan tidak termasuk sebagai member dari group yang sama dari owner file itu, perhatikan output nya.

sudo -u other-user more file.txt

Seharusnya akan muncul pesan error seperti di bawah ini:

file.txt: Permission denied

Pertanyaan selanjutnya, dari mana datangnya angka 640 itu?

Setiap digit dari angka 640 di atas merepresentasikan permissions yang dimiliki oleh owner, group dan others. Dan setiap digit merupakan representasi oktal dari kombinasi permissions yang hendak kita implementasikan. Jadi:

  • 0 – tidak ada akses apapun (no permission).
  • 1 – akses execution.
  • 2 – akses write.
  • 4 – akses read.

Jadi untuk memberikan hak akses read dan write, direpresentasikan dengan angka 2 + 4 = 6. Untuk lebih jelasnya, perhatikan tabel di bawah ini:

NumberBinaryRead? [r]Write? [r]Execute? [x]
0000NoNoNo
1001NoNoYes
2010NoYesNo
3011No YesYes
4100YesNoNo
5101YesNoYes
6110YesYesNo
7111YesYesYes

Symbolic Representation

Selain menggunakan representasi oktal, penggunaan symbolic representation juga dapat digunakan pada command chmod. Pada representasi simbolis ini, penggunaan huruf dan operator aritmatika adalah sebagai berikut.

Untuk merepresentasikan users, simbol yang digunakan adalah sebagai berikut:

  • u: file owner.
  • g: file owner’s group.
  • o: other users.
  • a: all users.

Sedangkan representasi action atau akses sama seperti halnya pada representasi oktal yang sudah kita bahas sebelumnya:

  • r: read.
  • wwrite.
  • xexecute.

Dan penggunaan operator aritmatika untuk mengatur permissions adalah sebagai berikut:

  • =: mengeset hak akses dan menggantikan hak akses yang terlah diatur sebelumnya (sets the permissions as specified, overwriting any other previous permissions).
  • +: menambahkan hak akses (adds permissions).
  • : menghapus hak akses (removes permissions).

Contoh syntax penggunaan symbolic representation adalah sebagai berikut:

sudo chmod who operator action(s)[,who operator action(s),…]

Dengan contoh yang sama, dimana kita mengatur permissions dari file.txt dengan ketentuan owner memiliki akses read dan writegroup nya memiliki akses write saja, dan pihak lain tidak memiliki akses apapun ke file.txt tersebut. Kita mengekusi command chmod menggunakan symbolic representation sebagai berikut:

sudo chmod u=rw,g=r,o-rwx file.txt

Contoh lain, bila kita ingin mempertahankan hak akses yang sekarang namun ingin menambahkan hak akses write bagi seluruh user, kita cukup menuliskan command sebagai berikut:

sudo chmod a+w file.txt

Command di atas akan menambahkan permissions di bawah ini:

-rw-r----- 1 adisun adisun 0 Jun 26 17:38 file.txt

menjadi:

-rw-rw--w- 1 adisun adisun 0 Jun 26 17:39 file.txt

Selain dari pembahasan terkait permissions yang sudah kita bahas di atas, ada 3 (tiga) lagi special permissions yang digunakan pada Linux: setuid (user id), setgid (group id) dan sticky.

setuid

setuid (set user ID) dapat diimplementasikan pada file yang executable, dimana ketika file tersebut dieksekusi akan menggunakan permissions yang dimiliki oleh owner dari file tersebut. 

Hal ini biasanya digunakan untuk memberi hak akses bagi user biasa (yang tidak memiliki superuser privileges) untuk mengakses beberapa file-file executable tertentu dengan root privileges.

Sebagai contoh, /bin/ping. Bila kita cek permissions nya, kita akan menemukan bahwa setuid sudah diset pada binary tersebut.

-rwsr-xr-x 1 root root 44168 May  7  2014 /bin/ping*

Perhatikan huruf s yang menggantikan huruf x pada bit execution untuk owner. Kita bisa mencoba untuk menghapus setuid dari file tersebut.

sudo chmod u-s /bin/ping

Hal ini akan mengakibatkan user biasa tidak bisa menggunakan command ping, yang mana bila kita mencoba: 

ping localhost

Maka akan muncul pesan sebagai berikut:

ping: icmp open socket: Operation not permitted

Tentu saja user yang memiliki akses sudo dapat mengakses file-file yang memiliki root privileges tanpa harus menambahkan setuid pada file tersebut. Namun seperti yang disebutkan di atas, pendekatan ini akan berguna untuk user-user biasa tanpa superuser privileges.

Untuk menambahkan kembali setuid:

sudo chmod u+s /bin/ping

setgid

Bila setuid membolehkan user untuk menggunakan hak akses dari owner file tertentu, maka setgid membolehkan user untuk menggunakan hak akses dari group nya owner file tersebut.

setgid bit dapat di atur dengan menggunakan notasi oktal:

sudo chmod 2777 script.sh

dimana pengesetannya menggunakan angka 2

atau dengan menggunakan notasi simbolis:

sudo chmod g+s script.sh

Bila kita cek, outputnya adalah sebagai berikut:

-rwxrwsrwx 1 adisun adisun 27 Nov 21 19:22 script.sh*

sticky

sticky bit digunakan pada direktori dimana kita menginginkan sebuah file atau folder writeable untuk beberapa user, namun file dan folder di dalamnya hanya dapat dihapus oleh owner nya sendiri. Sebagai contoh, sticky bit ini digunakan pada direktori /tmp dan /var/tmp.

Untuk meng-assign sticky bit ini dapat menggunakan notasi oktal (menggunakan angka 1 dan diikuti dengan permissions yang kita kehendaki–biasanya 777 pada kasus ini): 

sudo chmod 1777 sticky/

Atau, menggunakan notasi simbol:

sudo chmod +t sticky/

Bila kita cek, sticky bit direpresentasikan dengan huruf t seperti di bawah ini:

drwxrwxrwt 2 adisun adisun 4096 Nov 21 19:22 sticky/

Untuk lebih memahami tentang sticky bit ini, cobalah untuk memodifikasi folder sticky/ di atas dengan owner maupun dengan user lain, dan juga coba lah untuk menghapusnya:

touch file.txt
echo "written with owner" > file.txt
sudo -u other-user echo "written with other user" > file.txt

Seharusnya eksekusi di atas akan berhasil, tapi coba sekarang delete file tersebut dengan user lain yang bukan owner:

sudo -u other-user rm file.txt

Akan keluar pesan seperti ini:

rm: remove write-protected regular file ’file.txt’?

Kita bisa saja mencoba mengetikkan y untuk melanjutkan, tapi…

rm: cannot remove ’file.txt’: Operation not permitted

Namun, owner dari file.txt bisa menghapus file tersebut tanpa kendala apapun.

Untuk menghapus sticky bit, gunakan command berikut:

sudo chmod -t sticky/

Semoga bermanfaat.

About This Author

IT Engineer, Red Hat Certified System Administrator & Technician (RHCT & RHCSA), Certified Data Center Facilities Operation Manager (CDFOM), Certified Ethical Hacking (CEH), expert in Computer Networking in multi operating system and hardware. Specialties: Linux, Free BSD, *Nix, MS Windows, Data Center, Cisco & Computer Networking

Post A Reply