Cepat atau lambat, saat ngoprek di server Linux, kamu bakal kena error yang dialami semua orang: Permission denied. Kamu coba menjalankan sebuah skrip, mengedit file konfigurasi, atau menyimpan sesuatu ke dalam sebuah folder, dan Linux menolak mentah-mentah. Rasanya seperti mesinnya lagi keras kepala tanpa alasan. Padahal bukan. Di balik satu baris itu ada sistem kecil yang rapi, yang memutuskan siapa boleh melakukan apa — dan begitu kamu paham, error-error itu berhenti jadi misteri dan mulai terasa jelas.
Izin berkas termasuk topik yang kelihatan menakutkan gara-gara cara menampilkannya — deretan huruf aneh seperti -rwxr-xr-- di sebelah tiap file. Tapi aturan di baliknya pendek dan konsisten. Kita bakal bongkar bagian yang terlihat ribet itu sepotong demi sepotong, dan di akhir kamu bakal bisa membaca deretan huruf tadi sekali lihat sekaligus membereskan masalah izin dengan percaya diri.
Kenapa izin berkas itu ada
Server adalah tempat bersama. Banyak program berjalan di dalamnya, kadang beberapa orang login bersamaan, dan proses yang dijalankan oleh web server atau service latar belakang semuanya bertindak atas nama identitasnya masing-masing. Tanpa aturan soal siapa boleh menyentuh file mana, sembarang program bisa membaca kunci rahasiamu, menimpa konfigurasimu, atau menghapus seluruh sistem. Izin berkas adalah cara Linux menjaga batas-batas itu.
Setiap file dan setiap direktori di sistem Linux membawa dua informasi kepemilikan dan satu set izin yang menempel padanya. Linux mengecek itu semua sebelum membolehkan siapa pun membaca, mengubah, atau menjalankan sebuah file. Itu saja tugasnya: penjaga gerbang yang menjawab satu pertanyaan — apakah orang ini boleh melakukan hal ini terhadap file ini?
Tiga hal yang bisa kamu lakukan ke sebuah file
Di model klasik Linux, izin itu cuma ada tiga, dan kamu bakal menemuinya di mana-mana:
- Read (
r) — kamu bisa melihat isi file, atau melihat daftar isi sebuah direktori. - Write (
w) — kamu bisa mengubah isi file, atau menambah dan menghapus file di dalam sebuah direktori. - Execute (
x) — kamu bisa menjalankan file itu sebagai program, atau masuk ke dalam sebuah direktori (memakainya di dalam sebuah path).
Yang terakhir ini sering bikin orang bingung, karena execute punya dua makna berbeda tergantung apakah dia sebuah file atau folder. Untuk sebuah file, execute artinya “ini program atau skrip yang bisa dijalankan”. Untuk sebuah direktori, execute artinya “kamu boleh masuk ke dalamnya dan menjangkau file di dalam”. Direktori yang bisa kamu baca tapi tidak bisa kamu execute jadi aneh dan tidak berguna — kamu bisa melihat daftar namanya, tapi tidak bisa benar-benar membuka apa pun di dalamnya.
Direktori juga sebuah file
Di Linux, hampir segala sesuatu adalah file, dan direktori cuma jenis file khusus yang menyimpan daftar nama. Itulah kenapa tiga izin yang sama — read, write, execute — berlaku untuk keduanya, meski maknanya sedikit berbeda di masing-masing. Mengingat hal ini bikin sisanya jadi jauh lebih tidak membingungkan.
Tiga golongan orang
Izin berkas bukan satu sakelar tunggal. Linux membagi dunia jadi tiga golongan, dan masing-masing punya salinan sendiri dari pengaturan read/write/execute tadi:
- User (
u) — pemilik file. Biasanya siapa pun yang membuatnya. - Group (
g) — sebuah grup pengguna yang dinamai. Tiap file dimiliki oleh satu grup, dan anggota grup itu berbagi izin ini. - Others (
o) — semua orang lain di sistem yang bukan pemilik dan bukan anggota grup.
Jadi sebuah file tidak punya satu pengaturan izin — dia punya tiga set yang masing-masing berisi tiga izin. Pemilik mungkin boleh membaca dan menulis, grup cuma boleh membaca, dan orang lain tidak boleh apa-apa. Itulah keluwesan yang diberikan sistem ini: akses berbeda untuk orang berbeda, semuanya di file yang sama.
Membaca deretan huruf yang bikin pusing
Saat kamu menjalankan ls -l untuk melihat daftar file secara detail, tiap baris diawali sesuatu seperti ini:
$ ls -l
-rwxr-xr-- 1 jane developers 2048 Sep 18 09:14 deploy.sh
Kolom pertama itu — -rwxr-xr-- — adalah deretan izin, dan dia tidak acak. Pecah jadi beberapa bagian:
- rwx r-x r--
│ │ │ │
│ │ │ └── others: read saja
│ │ └─────── group: read + execute
│ └──────────── user: read + write + execute
└──────────────── tipe ( - = file, d = direktori )
Karakter paling depan adalah tipe: tanda hubung (-) berarti file biasa, d berarti direktori, l berarti symbolic link. Setelah itu menyusul tiga blok, masing-masing tiga karakter: izin pemilik, lalu grup, lalu semua orang lain. Di dalam tiap blok, posisinya selalu urut sama — read, write, execute — dan tanda hubung berarti “izin ini mati”.
Jadi -rwxr-xr-- dibaca begini: ini file biasa; pemiliknya (jane) bisa membaca, menulis, dan menjalankannya; grupnya (developers) bisa membaca dan menjalankan tapi tidak menulis; orang lain cuma bisa membaca. Begitu kamu melihat kisi tiga-kali-tiga ini, deretan tadi berhenti terlihat seperti acakan.
Angka-angkanya: 644, 755, dan kawan-kawan
Kamu bakal terus-menerus melihat izin ditulis sebagai angka tiga digit — chmod 644, chmod 755. Ini izin yang persis sama, cuma dikodekan jadi angka, bukan huruf. Triknya, masing-masing read, write, dan execute punya nilai:
read (r) = 4
write (w) = 2
execute (x) = 1
Kamu menjumlahkan nilai untuk tiap golongan orang supaya dapat satu digit. Mau read + write? Itu 4 + 2 = 6. Read + execute? 4 + 1 = 5. Ketiganya? 4 + 2 + 1 = 7. Tidak ada sama sekali? 0. Karena kamu melakukan ini sekali untuk user, sekali untuk group, dan sekali untuk others, hasilnya jadi tiga digit — satu per golongan.
7 5 5
│ │ │
│ │ └── others: r-x (4+1)
│ └────── group: r-x (4+1)
└────────── user: rwx (4+2+1)
Jadi dua angka yang paling sering kamu temui punya makna yang jelas:
644→ pemilik membaca dan menulis (6), grup membaca (4), others membaca (4). Pengaturan normal untuk file biasa seperti halaman HTML atau dokumen teks.755→ pemilik bisa segalanya (7), grup dan others membaca dan menjalankan (5). Pengaturan normal untuk sebuah direktori atau untuk skrip yang ingin kamu biarkan dijalankan orang.
Awalnya terasa seperti sulap, padahal cuma penjumlahan. Setelah beberapa kali, kamu bakal membaca 750 dan langsung tahu: pemilik akses penuh, grup read + execute, others tidak ada apa-apa.
Dua default yang wajib dihafal
Kalau kamu cuma ingat satu hal, ingat dua ini: 644 untuk file, 755 untuk direktori dan skrip. File biasanya tidak perlu bisa dijalankan, jadi dia dapat 644. Direktori butuh bit execute supaya bisa dimasuki, dan skrip butuh itu supaya bisa jalan, jadi mereka dapat 755. Memilih default yang tepat lebih dulu menyelamatkanmu dari banyak tebak-tebakan.
Mengubah izin dengan chmod
Perintah yang mengubah izin adalah chmod (“change mode”). Dia mengerti dua dialek — angka dan huruf — jadi kamu bisa pakai mana pun yang terasa lebih jelas.
Gaya angka paling umum dipakai. Kamu tinggal memberinya angka tiga digit:
chmod 644 catatan.txt # pemilik rw, grup r, others r
chmod 755 deploy.sh # pemilik rwx, grup rx, others rx
chmod 600 secret.key # pemilik rw, yang lain tidak ada apa-apa
Gaya huruf berguna saat kamu mau mengubah satu hal tanpa menghitung ulang seluruh angkanya. Kamu menyebut golongannya (u, g, o, atau a untuk semua), sebuah operasi (+ untuk menambah, - untuk membuang, = untuk menetapkan persis), dan izinnya:
chmod +x script.sh # tambahkan execute untuk semua orang
chmod u+x script.sh # tambahkan execute, khusus pemilik
chmod g-w laporan.csv # buang write dari grup
chmod o= privat.txt # set others jadi tidak ada apa-apa
Untuk mengubah satu direktori beserta seluruh isinya sekaligus, tambahkan -R (recursive). Tapi hati-hati dengan ini — gampang sekali tanpa sengaja mengubah ribuan file:
chmod -R 755 /var/www/site
Jangan pernah lari ke 777
Kamu bakal menemukan saran di internet yang menyuruh membereskan masalah izin dengan menjalankan chmod 777 — itu artinya semua orang bisa membaca, menulis, dan menjalankan segalanya. Biasanya errornya memang hilang, dan itu hampir selalu solusi yang salah. Di server, 777 adalah lubang keamanan sungguhan: user mana pun atau proses yang sudah disusupi bisa menimpa file-mu. Luangkan satu menit ekstra untuk mencari tahu izin spesifik mana yang sebenarnya hilang, lalu set itu saja. Solusi sebenarnya biasanya 644, 755, atau membenahi pemiliknya — bukan 777.
Mengubah kepemilikan dengan chown
Izin memutuskan apa yang boleh dilakukan tiap golongan; kepemilikan memutuskan siapa sebenarnya pemilik dan grupnya. Perintah untuk itu adalah chown (“change owner”). Ini sangat penting di server, karena file yang dibuat oleh satu user sering kali perlu diserahkan ke user lain — misalnya, file web yang seharusnya jadi milik user si web server.
chown jane file.txt # set pemilik jadi jane
chown jane:developers file.txt # set pemilik jadi jane DAN grup jadi developers
chown :developers file.txt # ubah grupnya saja
chown -R jane:developers /app # terapkan ke seluruh pohon direktori
Contoh klasik di dunia nyata: kamu meng-upload sebuah website ke server lewat login milikmu sendiri, tapi web server berjalan sebagai user yang berbeda (sering kali www-data). File-nya milik kamu, jadi web server tidak bisa membacanya dengan benar. Solusinya bukan membuka izin lebar-lebar — tapi menyerahkan kepemilikan ke user yang tepat dengan chown. Membenahi kepemilikan lebih dulu biasanya bikin kamu nyaris tidak perlu menyentuh izin sama sekali.
Sebuah contoh utuh
Mari kita rangkai semuanya. Misalkan jane men-deploy sebuah situs kecil untuk ACY Partner Indonesia ke /var/www/site. Dia ingin direktorinya bisa dimasuki, file biasanya bisa dibaca, skrip deploy-nya bisa dijalankan, dan sebuah kunci rahasia dikunci serapat mungkin. Ini susunan yang masuk akal:
# direktori: pemilik penuh, others bisa masuk + baca
chmod 755 /var/www/site
# file web biasa: pemilik menulis, semua orang membaca
chmod 644 /var/www/site/index.html
# skrip deploy: pemilik bisa menjalankannya
chmod 750 /var/www/site/deploy.sh
# kunci rahasia: cuma pemilik, yang lain tidak
chmod 600 /var/www/site/secret.key
# serahkan seluruh pohon ke user web server
chown -R www-data:www-data /var/www/site
Perhatikan polanya: direktori dapat 755, file biasa dapat 644, skrip dapat 750 (grup dan others tidak perlu menjalankannya), dan rahasia dapat 600 (tidak ada selain pemilik yang menyentuhnya). Tidak ada satu pun yang butuh 777, dan tiap pilihan bisa ditelusuri balik ke alasan yang nyata.
Membongkar arti “Permission denied”
Saat kamu kena error itu, sekarang kamu punya daftar periksa, bukan cuma angkat bahu. Telusuri berurutan:
- Jalankan
ls -lpada file-nya lalu baca deretan izinnya. Kamu masuk golongan apa untuk file ini — pemilik, grup, atau others? Lihat blok itu. - Cek aksinya. Mau menjalankan skrip tapi bit execute-nya hilang? Mau menulis tapi kamu cuma punya
r? Huruf yang hilang itulah jawabanmu. - Cek direktorinya, bukan cuma file-nya. Untuk membuka sebuah file kamu juga butuh execute (
x) di tiap direktori sepanjang path-nya. File yang isinya benar-benar bisa dibaca, tapi berada di dalam folder yang tidak bisa kamu masuki, tetap saja tidak terjangkau. - Cek kepemilikan dengan
ls -l. Kalau kamu bukan pemilik dan bukan anggota grup, kamu adalah “others” — dan mungkin “others” memang sengaja tidak diberi akses.
Kebanyakan error izin berujung pada salah satu dari empat ini. Solusinya jadi kecil dan tepat sasaran: tambahkan satu bit yang hilang dengan chmod, atau benahi pemiliknya dengan chown. Tidak perlu meratakan segalanya dengan 777.
root melihat semuanya
Ada satu user yang mengabaikan semua ini: root, superuser sistem. Root bisa membaca, menulis, dan menjalankan apa pun tanpa peduli bit izinnya. Itulah kenapa orang memakai sudo untuk menjalankan sebuah perintah sebagai root ketika mentok — tapi itu juga kenapa kamu harus hati-hati. Root yang tanpa batas berarti kesalahan saat jadi root juga tidak punya jaring pengaman. Pakai dengan sadar, bukan sebagai refleks untuk membungkam error.
Penutup
Ini seluruh modelnya dalam satu tempat:
- Izin berkas Linux menjawab satu pertanyaan: apakah orang ini boleh melakukan hal ini terhadap file ini? Dia ada karena server adalah tempat bersama yang butuh batas.
- Izinnya ada tiga — read (4), write (2), execute (1) — dan tiga golongan yang dikenainya: user, group, others.
- Deretan
-rwxr-xr--cuma tipe + tiga blok rwx: pemilik, grup, others, urut begitu. Tanda hubung berarti izin itu mati. - Angka-angkanya adalah hal yang sama yang dijumlahkan: 644 untuk file biasa, 755 untuk direktori dan skrip adalah default yang layak dihafal.
chmodmengubah izin (angka seperti644, atau huruf sepertiu+x);chownmengubah siapa pemilik file dan grup apa yang menaunginya.- Saat kamu melihat
Permission denied, cek bit file-nya, aksinya, direktori sepanjang path-nya, dan kepemilikannya — lalu benahi satu potongan yang hilang. Jangan pernah lari ke777.
Izin berkas berada tepat di jantung cara bekerja di server dengan aman. Dia dibangun langsung di atas kemampuan bergerak di filesystem dan command line, dan bakal muncul lagi begitu kamu mulai berurusan dengan banyak user beserta grup yang menaungi mereka. Kalau kamu menyimpan trio read/write/execute dan pembagian user/group/others di kepala, kamu sudah punya semua yang dibutuhkan untuk berhenti takut pada Permission denied selamanya.
Kalau kamu ingin mengulang alat-alat yang dipakai di sini, dasar bergerak di prompt ada di Command Line, dan bagaimana file serta direktori disusun ada di Sistem Berkas Linux.