Izin (permission) adalah aturan yang menentukan siapa boleh membaca, mengubah, dan menjalankan sebuah berkas. Topik ini membahas struktur izin rwx untuk tiga kelompok pemilik, cara membacanya dalam notasi simbolik, cara menghitungnya dalam notasi oktal, serta perbedaan arti huruf yang sama ketika melekat pada berkas dan pada direktori. Setelah menyelesaikannya, keluaran ls -l dan stat dapat ditafsirkan sepenuhnya, dan pemilihan mode pada perintah chmod menjadi keputusan yang sadar, bukan tebakan.
Tiga kelompok pemilik: user, grup, dan other#
Setiap berkas di Linux menyimpan satu triplet izin, yakni sekumpulan tiga huruf, untuk pemilik (user), satu untuk grup (group), dan satu untuk pengguna lain (other). Pemilik dan grup yang berlaku untuk sebuah berkas terlihat pada keluaran ls -l, yaitu dua kolom sebelum ukuran berkas. Setiap berkas hanya menyimpan satu UID pemilik dan satu GID grup. Karena itu, pemberian akses kepada lebih dari satu kelompok pengguna ditangani dengan keanggotaan grup, bukan dengan menambah pemilik. Diagram berikut memperlihatkan bagaimana sepuluh karakter pada keluaran ls -l terbagi menjadi penanda jenis berkas dan tiga triplet tersebut.
Empat berkas sistem berikut memberi contoh yang nyata:
stat -c '%A %a %n' /etc/passwd /etc/shadow /usr/bin/ls /tmp-rw-r--r-- 644 /etc/passwd
-rw-r----- 640 /etc/shadow
-rwxr-xr-x 755 /usr/bin/ls
drwxrwxrwt 1777 /tmpOpsi %A menampilkan notasi simbolik, sedangkan %a menampilkan nilai oktalnya. Berkas /etc/passwd dapat dibaca semua orang tetapi hanya boleh diubah root. /etc/shadow dibatasi untuk root dan grup shadow, sedangkan /usr/bin/ls membutuhkan izin eksekusi agar dapat dijalankan semua pengguna. Huruf t pada /tmp disebut sticky bit, penanda yang membuat /tmp tetap bisa ditulis semua orang tanpa mengizinkan penghapusan berkas milik pengguna lain.
Arti huruf r, w, dan x#
Huruf yang sama membawa arti berbeda untuk berkas dan untuk direktori. Pada berkas, r mengizinkan pembacaan isi, w mengizinkan pengubahan isi, dan x mengizinkan berkas dijalankan sebagai program. Pada direktori, r mengizinkan pembacaan daftar nama, w mengizinkan pembuatan dan penghapusan entri, sedangkan x mengizinkan penerobosan (traversal), yaitu mengakses entri di dalam direktori tersebut, termasuk cd ke dalamnya.
| Huruf | Pada berkas | Pada direktori |
|---|---|---|
r (4) | Membaca isi berkas | Membaca daftar nama entri |
w (2) | Mengubah isi berkas | Membuat dan menghapus entri |
x (1) | Menjalankan berkas sebagai program | Mengakses entri (penerobosan, cd) |
Perhatikan bahwa izin menulis pada direktori tidak memeriksa pemilik berkas di dalamnya. Pengguna dapat menghapus berkas milik pengguna lain selama memiliki w dan x pada direktorinya, kecuali sticky bit menahannya.
Membaca notasi simbolik#
Notasi simbolik menuliskan izin sebagai sepuluh karakter, yaitu satu penanda jenis berkas diikuti tiga triplet rwx. Tanda hubung pada posisi tertentu berarti izin tersebut tidak diberikan. Contoh berikut menyiapkan tiga objek dengan mode yang ditetapkan eksplisit agar keluarannya identik di mesin mana pun.
# menyiapkan folder kerja
mkdir -p /tmp/kerja-model-izin
cd /tmp/kerja-model-izin
rm -rf laporan.txt skrip.sh arsip
touch laporan.txt
printf '#!/bin/bash\necho hai\n' > skrip.sh
mkdir arsip
# mode ditetapkan eksplisit agar keluaran konsisten
chmod 644 laporan.txt
chmod 664 skrip.sh
chmod 755 arsip
stat -c '%A %a %n' laporan.txt skrip.sh arsip-rw-r--r-- 644 laporan.txt
-rw-rw-r-- 664 skrip.sh
drwxr-xr-x 755 arsipString -rw-r--r-- berarti pemilik boleh membaca dan menulis, sedangkan grup dan other hanya membaca. String -rw-rw-r-- menambahkan izin menulis bagi grup, pola yang cocok untuk berkas kerja bersama satu tim. String drwxr-xr-x menunjukkan direktori (huruf d) yang dapat dimasuki semua orang, tetapi hanya pemiliknya yang boleh menambah atau menghapus entri di dalamnya. Nilai oktalnya, yaitu 644, 664, dan 755, masing-masing adalah ringkasan tiga triplet tersebut.
Mode berkas baru sebenarnya tidak ditetapkan manual, melainkan dihitung sistem dari nilai umask. Agar keluaran contoh di atas stabil di mesin mana pun, mode ketiga objek ditetapkan secara eksplisit dengan chmod. Mekanisme umask dibahas penuh pada topik umask di modul ini.
Izin eksekusi pada direktori#
Pada direktori, ketiadaan x memotong akses ke isi meskipun r masih ada, dan ketiadaan r menyembunyikan daftar nama meskipun x masih ada. Dua percobaan berikut memperlihatkan keduanya secara berurutan.
mkdir terkunci
printf 'laporan mingguan\n' > terkunci/isi.txt
chmod 600 terkunci
# r ada, x tidak: nama masih terbaca
ls terkunci
# isi berkas tidak dapat diakses tanpa x
cat terkunci/isi.txtisi.txt
cat: terkunci/isi.txt: Permission deniedDirektori ber-mode 600 masih mengizinkan pembacaan daftar nama, tetapi kernel menolak penerobosan ke entri di dalamnya, sehingga cat gagal meskipun nama berkasnya terlihat jelas pada baris pertama keluaran. Kondisi sebaliknya terjadi bila r yang dilepas.
chmod 111 terkunci
# x ada, r tidak: daftar nama terkunci
ls terkunci
# berkas yang namanya diketahui tetap bisa dibaca
cat terkunci/isi.txt
# memulihkan akses lalu membersihkan contoh
chmod 700 terkunci
rm -rf terkuncils: cannot open directory 'terkunci': Permission denied
laporan mingguanPola ini menjelaskan banyak pesan error yang tampak tidak konsisten, misalnya ls yang berhasil pada satu direktori tetapi gagal setelah opsi -l ditambahkan. Opsi -l memerlukan metadata setiap entri, dan pengambilan metadata butuh x pada direktorinya. Kombinasi yang sama dijumpai pada konfigurasi server. Direktori layanan web biasanya ber-mode 755 agar pengunjung dapat menjangkau berkas di dalamnya, sedangkan ~/.ssh ber-mode 700 agar hanya pemiliknya yang dapat menjangkau kunci di dalamnya. Karena pemeriksaan dilakukan pada setiap direktori di sepanjang jalur, akses sebuah berkas bergantung pada izin seluruh direktori di jalurnya, bukan pada satu direktori saja.
Notasi oktal#
Notasi oktal meringkas setiap triplet menjadi satu digit dengan memberi bobot r = 4, w = 2, dan x = 1, lalu menjumlahkan bobot huruf yang muncul. Tiga digit berurutan menyatakan izin user, grup, dan other.
| Digit | Biner | Huruf | Arti |
|---|---|---|---|
| 0 | 000 | --- | Tanpa izin |
| 1 | 001 | --x | Eksekusi saja |
| 2 | 010 | -w- | Tulis saja |
| 3 | 011 | -wx | Tulis dan eksekusi |
| 4 | 100 | r-- | Baca saja |
| 5 | 101 | r-x | Baca dan eksekusi |
| 6 | 110 | rw- | Baca dan tulis |
| 7 | 111 | rwx | Penuh |
Perhitungan ini dapat direproduksi dengan aritmetika bash, yang memahami notasi biner 2#...:
# bobot: r=4, w=2, x=1
echo "rwx = $((2#100))+$((2#010))+$((2#001)) = $((2#111))"
echo "rw- = $((2#110))"
echo "r-x = $((2#101))"rwx = 4+2+1 = 7
rw- = 6
r-x = 5Untuk membiasakan konversi dua arah, jalankan demo interaktif berikut. Pilih izin untuk setiap kelompok, atau gunakan tombol contoh cepat, lalu bandingkan hasil simbolik dan oktal yang muncul.
Dua mode yang paling sering dijumpai pada server adalah 644 untuk berkas konfigurasi dan 755 untuk direktori serta skrip yang harus bisa dijalankan. Keduanya kini dapat dibaca langsung, yaitu rw-r--r-- dan rwxr-xr-x, tanpa menghafal daftar digitnya.
Kesalahan umum#
- Memakai
chmod -R 777sebagai solusi segala masalah akses. Mode ini membuka seluruh berkas kepada semua pengguna, termasuk yang seharusnya privat, dan perubahan yang sudah dilakukan sulit dilacak. Sebutkan pola izin yang benar per target, atau gunakanXkapital bila eksekusi hanya boleh menyasar direktori. - Menebak penyebab
Permission deniedtanpa memeriksa direktorinya. Kegagalan bisa berasal dariryang hilang,xyang hilang, atau keduanya. Periksa denganstat -c '%A %n'pada setiap direktori di jalurnya, bukan hanya berkas tujuan. - Menganggap
xdiperlukan untuk membaca. Berkas denganrtanpaxtetap dapat dibaca, hanya tidak dapat dijalankan, sedangkan direktori tanpaxtidak dapat diterobos walaupun bitr-nya ada. - Mengubah izin berkas milik pengguna lain.
chmodhanya dapat dijalankan pemilik berkas atau root, dan pengguna lain menerima pesanOperation not permitted.
Ringkasan#
- Izin terbagi ke tiga kelompok, yaitu user, grup, dan other, masing-masing dengan triplet rwx. Huruf
rmembaca,wmengubah, danxmengeksekusi berkas atau menerobos direktori. - Pada direktori,
xmengatur akses ke isi, sedangkanrmengatur pembacaan daftar nama. Keduanya dapat dikombinasikan secara bebas. - Notasi oktal menjumlahkan bobot r=4, w=2, x=1 per triplet, sehingga 644 berarti
rw-r--r--dan 755 berartirwxr-xr-x. - Perintah
stat -c '%A %a %n'menampilkan bentuk simbolik dan oktal sekaligus dalam satu keluaran.
Referensi#
- chmod(2) — Linux man-pages project — Daftar konstanta bit izin yang diperiksa kernel saat mode diubah.
- inode(7) — Linux man-pages project — Struktur st_mode, arti bit izin untuk berkas dan direktori, serta sticky bit.
- chmod(1) — Ubuntu manpages — Notasi simbolik ugoa dan aturan huruf X kapital.