Setiap kali membaca ls -l atau menulis chmod, kita berhadapan dengan notasi permission yang ringkas tapi mudah lupa: -rw-r--r--, 755, setgid, umask 022. Halaman ini merangkum semuanya dalam tabel rujukan: cara membaca notasi simbolik, konversi ke oktal dan sebaliknya, tiga special bits, nilai umask umum, perintah terkait, sampai tabel gejala error yang paling sering muncul. Gunakan halaman ini saat menulis chmod dan butuh konfirmasi cepat; penjelasan mekanisme lengkapnya tetap ada di chapter File Permissions
dan chmod dan chown
.
Membaca Notasi Simbolik rwx #
String pertama pada ls -l terdiri dari 10 karakter yang terbagi empat bagian. Karakter pertama adalah jenis berkas (- file biasa, d direktori, l symlink), lalu tiga kelompok rwx yang berurutan berlaku untuk pemilik (owner), group, dan other:
| Posisi karakter | Berlaku untuk | Contoh pada -rw-r--r-- |
|---|---|---|
| Karakter 1 | Jenis berkas: - file, d direktori, l symlink | - berarti file biasa |
| Karakter 2-4 | Hak pemilik (owner) | rw- boleh baca dan tulis, tidak boleh eksekusi |
| Karakter 5-7 | Hak group | r-- hanya boleh baca |
| Karakter 8-10 | Hak other (selain owner dan group) | r-- hanya boleh baca |
Arti tiap huruf sedikit berbeda antara file dan direktori, dan perbedaan inilah sumber kebingungan paling umum:
| Huruf | Pada file | Pada direktori |
|---|---|---|
r | Membaca isi file | Mendaftar isi (ls) |
w | Mengubah isi file | Membuat dan menghapus entri di dalamnya |
x | Menjalankan file sebagai program | Masuk (cd) dan mengakses entri di dalamnya |
Perhatikan bahwa menghapus file tidak membutuhkan w pada file itu sendiri, melainkan w pada direktori tempatnya berada — itulah kenapa kita bisa “menulis” tanpa bisa “membaca” sebuah direktori. Daftar opsi chmod yang lengkap beserta notasi simboliknya selalu bisa dibuka di halaman manual chmod(1)
.
Konversi Oktal dan Simbolik #
Mode oktal menulis tiga kelompok rwx sebagai tiga angka: r bernilai 4, w bernilai 2, dan x bernilai 1, lalu dijumlahkan per kelompok. Sebuah chmod 755 berarti rwxr-xr-x, dan chmod 644 berarti rw-r--r--:
| Nilai | Simbolik | Berarti |
|---|---|---|
| 0 | --- | tidak ada hak |
| 1 | --x | hanya eksekusi |
| 2 | -w- | hanya tulis |
| 3 | -wx | tulis dan eksekusi |
| 4 | r-- | hanya baca |
| 5 | r-x | baca dan eksekusi |
| 6 | rw- | baca dan tulis |
| 7 | rwx | semua hak |
Gabungan tiga digit itu melahirkan mode-mode yang terus berulang di sistem nyata. Tabel berikut adalah yang paling sering dijumpai beserta alasannya:
| Oktal | Simbolik | Pemakaian umum |
|---|---|---|
600 | rw------- | Berkas privat milik satu user: kunci SSH (~/.ssh/id_ed25519), .bashrc dengan rahasia |
644 | rw-r--r-- | Berkas konfigurasi yang boleh dibaca semua orang tapi hanya pemiliknya menulis; hasil umum umask 022 |
664 | rw-rw-r-- | Berkas kerja bersama satu group (lihat Group Management ) |
700 | rwx------ | Direktori privat seperti ~/.ssh — group dan other tidak boleh masuk |
750 | rwxr-x--- | Direktori kerja: pemilik penuh, group boleh masuk dan melihat, other tersingkir |
755 | rwxr-xr-x | Skrip dan direktori yang boleh dipakai semua user; hasil umum umask 022 pada direktori |
775 | rwxrwxr-x | Direktori kerja bersama satu group tanpa sticky bit |
777 | rwxrwxrwx | Hampir selalu kesalahan — lihat peringatan di bawah |
Konversi ini bisa dibuktikan sendiri dengan chmod dan stat — perintah stat -c '%a %A' mencetak mode oktal dan simboliknya berdampingan:
touch catatan.txt
chmod 644 catatan.txt
stat -c '%a %A' catatan.txt
chmod 600 catatan.txt
stat -c '%a %A' catatan.txt
mkdir -p proyek
chmod 750 proyek
stat -c '%a %A' proyekOutput yang Dihasilkan:
644 -rw-r--r--
600 -rw-------
750 drwxr-x---Baris demi baris, blok di atas membuktikan tabel sebelumnya: chmod 644 lalu 600 pada file menghasilkan rw-r--r-- lalu rw-------, dan chmod 750 pada direktori menghasilkan rwxr-x--- — huruf pertama otomatis - atau d sesuai jenisnya.
Special Bits: setuid, setgid, dan Sticky #
Di depan tiga digit oktal masih ada digit keempat untuk special bits. Ketiganya jarang kita set sendiri, tapi sering kita temui (dan harus pahami) di sistem nyata:
| Bit | Nilai oktal | Pada file | Pada direktori |
|---|---|---|---|
setuid | 4000 | Program berjalan sebagai pemilik file-nya, bukan user yang menjalankannya (contoh: /usr/bin/passwd mode 4755) | Tidak berpengaruh |
setgid | 2000 | Program berjalan sebagai group pemiliknya | File dan subdirektori baru di dalamnya mewarisi group direktori ini — resep folder kerja tim |
sticky | 1000 | Hampir tidak pernah dipakai modern | Hanya pemilik file (atau pemilik direktori) yang boleh menghapusnya — inilah yang menjaga /tmp tetap tertib dengan mode 1777 |
Pada notasi simbolik, ketiganya muncul sebagai huruf s, s, dan t menggantikan x di posisi masing-masing: -rwsr-xr-x untuk 4755, drwxrws--- untuk 2770, dan drwxrwxrwt untuk 1777. Kita buktikan ketiganya sekaligus:
touch backup.sh
chmod 4755 backup.sh
stat -c '%a %A' backup.sh
mkdir -p data-setgid data-sticky
chmod 2770 data-setgid
stat -c '%a %A' data-setgid
chmod 1777 data-sticky
stat -c '%a %A' data-stickyOutput yang Dihasilkan:
4755 -rwsr-xr-x
2770 drwxrws---
1777 drwxrwxrwtMekanisme lengkap setiap bit — termasuk alasan /tmp memakai sticky dan kenapa setuid berbahaya di file sembarangan — dibahas di chapter Special Permissions
.
Nilai umask yang Umum #
umask memotong permission bawaan saat berkas dibuat: file lahir dari basis 666 dan direktori dari 777, lalu dikurangi umask. Detail mekanismenya ada di chapter umask
; tabel ini cukup untuk keputusan sehari-hari:
| umask | File baru | Direktori baru | Kapan cocok |
|---|---|---|---|
022 | 644 | 755 | Bawaan umum distro: group dan other boleh membaca |
027 | 640 | 750 | Group boleh membaca, other tidak — wajar untuk mesin kantor |
077 | 600 | 700 | Ruang kerja privat: hanya pemilik yang melihat apa pun |
Perintah Terkait Permission #
| Perintah | Fungsi | Contoh singkat | Materi |
|---|---|---|---|
chmod | Mengubah mode | chmod 644 config.conf | chmod dan chown |
chown | Mengubah pemilik dan group | sudo chown budi:budi file | chmod dan chown |
chgrp | Mengubah group saja | chgrp tim laporan.txt | Group Management |
umask | Melihat atau mengatur mask sesi ini | umask 077 | umask |
stat | Menampilkan mode aktual sebuah berkas | stat -c '%a %A' app.sh | umask |
getfacl | Menampilkan ACL sebuah berkas | getfacl laporan.txt | Access Control Lists |
setfacl | Mengatur ACL | setfacl -m u:siti:r-- laporan.txt | Access Control Lists |
sudo | Menjalankan perintah sebagai root | sudo systemctl restart nginx | sudo dan root |
Gejala Permission Umum dan Solusinya #
Empat gejala berikut menyumbang sebagian besar pertanyaan permission sehari-hari. Diagnosisnya selalu dimulai dari ls -l pada file dan direktori induknya:
| Gejala | Penyebab yang umum | Solusi |
|---|---|---|
Permission denied saat membaca file | Kita bukan pemiliknya dan bagian other tidak punya r | Minta pemilik menyalin file tersebut, atau naikkan hak lewat group/ACL bila memang berkepentingan |
Permission denied saat menjalankan skrip | Bit x belum ada pada file | chmod +x skrip.sh lalu jalankan dengan ./skrip.sh |
cannot open directory saat cd | Kita tidak punya x pada direktori tersebut (punya r saja tidak cukup) | chmod +x nama-direktori oleh pemiliknya |
| File baru bisa dibaca semua orang | umask sesi terlalu longgar (022) | Set umask 077 di ~/.bashrc untuk ruang kerja privat |
Dengan mode, special bits, dan umask dalam satu halaman, kebutuhan berikutnya biasanya berpindah ke lokasi: direktori mana yang pantas menampung file, dan kenapa konfigurasi ada di /etc sementara log ada di /var. Peta lengkapnya ada di Referensi Filesystem
.