Izin Linux: Memahami Owner, Group, dan chmod tanpa Tebak-tebakan
Pesan Permission denied di Linux tidak selalu berarti berkasnya tidak boleh dibaca. Bisa jadi pengguna tidak memiliki izin menelusuri salah satu direktori dalam path, proses berjalan dengan user yang berbeda, atau aturan ACL membatasi akses yang tampak benar dari ls -l. Dengan memahami owner, group, dan tiga permission dasar, Anda dapat memperbaiki masalah akses tanpa menjadikan seluruh sistem terbuka.
Ringkasan
- Linux memeriksa owner, group, atau other untuk setiap permintaan akses.
r,w, danxmemiliki arti berbeda pada berkas dan direktori.chmodmengubah permission, sedangkanchownmengubah kepemilikan.umaskmemengaruhi permission objek baru, bukan objek yang sudah ada.namei,stat, dangetfaclmembantu menemukan sumberPermission denied.- Hindari
chmod -R 777karena memperbaiki gejala dengan risiko keamanan besar.
Membaca Output ls -l
Mulailah dari output yang paling umum:
-rw-r----- 1 alice developers 1200 Sep 25 10:00 laporan.txtKarakter pertama menunjukkan tipe objek. Tanda - berarti berkas biasa, sedangkan d berarti direktori. Sembilan karakter berikutnya terbagi menjadi tiga kelompok:
| Kelompok | Posisi | Contoh | Berlaku untuk |
|---|---|---|---|
| Owner | 1-3 | rw- | Pemilik inode |
| Group | 4-6 | r-- | Group file dan group tambahan proses |
| Other | 7-9 | --- | Semua proses yang tidak cocok dengan dua kelompok sebelumnya |
Pada contoh tersebut, alice dapat membaca dan mengubah berkas. Anggota group developers hanya dapat membaca. Pengguna lain tidak memiliki permission dari bit tersebut. Kepemilikan ditampilkan setelah jumlah hard link: owner-nya alice, group-nya developers.
Linux tidak mencoba menggabungkan semua kelompok sekaligus. Ia memilih kelas yang sesuai. Jika effective user ID proses sama dengan owner, Linux menggunakan bit owner. Jika tidak, tetapi group efektif atau salah satu supplementary group cocok, Linux menggunakan bit group. Selain itu, Linux menggunakan bit other. Aturan ini dijelaskan dalam dokumentasi path resolution Linux.
Arti r, w, dan x
Pada berkas biasa, arti bit cukup intuitif:
| Bit | Berkas biasa | Direktori |
|---|---|---|
r | Membaca isi | Melihat daftar nama entri, misalnya dengan ls |
w | Mengubah atau menimpa isi | Membuat, menghapus, atau mengganti nama entri |
x | Menjalankan berkas sebagai program | Menelusuri atau masuk ke direktori |
x pada direktori bukan berarti menjalankan direktori. Ia adalah izin search atau traversal. Pengguna yang memiliki x tetapi tidak r dapat membuka berkas yang namanya sudah diketahui, tetapi biasanya tidak dapat melihat daftar isi direktori. Sebaliknya, r tanpa x tidak cukup untuk mengakses metadata atau membuka entri di dalamnya.
Aturan ini menjelaskan mengapa permission sebuah file saja belum tentu cukup. Untuk membuka /srv/app/config/settings.yaml, proses juga perlu dapat menelusuri /srv, /srv/app, dan /srv/app/config. Satu komponen path tanpa x dapat menghasilkan Permission denied. Dokumentasi path_resolution(7) menjelaskan bahwa setiap komponen non-final membutuhkan search permission.
Mengubah Permission dengan chmod
Ada dua bentuk utama chmod: simbolik dan oktal. Bentuk simbolik lebih mudah dibaca ketika Anda hanya ingin menambah atau menghapus satu bit.
chmod u+x script.sh
chmod g-w laporan.txt
chmod o-r rahasia.txt
chmod u=rw,go= laporan.txtHuruf u berarti owner, g group, o other, dan a semua kelas. Operator + menambahkan, - menghapus, dan = menetapkan permission persis. Perintah terakhir memberi owner rw dan menghapus permission group serta other.
Bentuk oktal menggunakan nilai r=4, w=2, dan x=1. Nilai dalam satu kelompok dijumlahkan:
| Oktal | Simbolik | Makna umum |
|---|---|---|
0 | --- | Tidak ada akses |
4 | r-- | Baca |
5 | r-x | Baca dan traversal/eksekusi |
6 | rw- | Baca dan tulis |
7 | rwx | Baca, tulis, dan traversal/eksekusi |
Contoh chmod 640 laporan.txt berarti owner rw-, group r--, dan other ---. Contoh chmod 750 aplikasi berarti owner dapat melakukan semuanya, group dapat membaca dan menelusuri, sedangkan pengguna lain tidak memiliki akses.
Jangan memakai chmod 777 sebagai perbaikan umum. Mode itu memberi semua orang izin baca, tulis, dan eksekusi. Pada direktori, izin tulis untuk banyak pengguna juga dapat memungkinkan penghapusan atau penggantian nama file milik pengguna lain. Pilih permission minimum yang memenuhi kebutuhan aplikasi.
Mengubah Owner dan Group dengan chown
chmod tidak mengubah siapa pemilik file. Untuk itu gunakan chown atau chgrp:
sudo chown alice laporan.txt
sudo chgrp developers laporan.txt
sudo chown alice:developers laporan.txtMengubah owner biasanya membutuhkan hak administrator. Periksa hasilnya dengan ls -l atau stat sebelum dan sesudah perubahan. Opsi rekursif -R tersedia, tetapi harus dipakai dengan sangat hati-hati. Perintah berikut dapat mengubah banyak objek dan merusak layanan bila path salah:
sudo chown -R alice:developers /srv/appSebelum mengubah pohon direktori, pastikan path benar, simpan konfigurasi penting, dan pahami bahwa file konfigurasi, socket, symbolic link, serta direktori mungkin membutuhkan owner berbeda. Untuk perubahan terbatas, sebutkan file atau subdirektori secara eksplisit.
Permission File dan Direktori yang Baru Dibuat
Program tidak membuat file dengan permission final secara sembarangan. Ia meminta mode awal, lalu kernel menerapkan umask proses. Jika program meminta mode 0666 dan umask adalah 022, hasilnya biasanya 0644:
0666 & ~0022 = 0644Direktori biasanya meminta 0777, sehingga umask 022 menghasilkan 0755. Periksa nilai umask shell saat ini dengan:
umask
umask -SUji sementara hanya memengaruhi shell saat ini dan proses turunannya:
umask 027
touch contoh.txt
mkdir contoh-dir
stat -c '%A %a %n' contoh.txt contoh-dirMan page umask(2) menjelaskan bahwa bit yang ada di umask dimatikan dari mode objek baru. Karena itu, mengubah umask tidak memperbaiki file lama. Gunakan chmod untuk objek yang sudah ada.
Nilai umask yang tepat bergantung pada kebutuhan. 022 membuat file dapat dibaca group dan other, sedangkan 027 menghapus akses other dan biasanya membuat objek group lebih terbatas. Jangan menyalin nilai dari server lain tanpa memahami bagaimana service membuat dan membagikan file.
Permission Khusus pada Direktori Bersama
Direktori kerja bersama sering membutuhkan lebih dari owner/group/other. Setgid pada direktori dapat membantu file baru mewarisi group direktori. Sticky bit, yang terlihat sebagai t pada posisi execute milik other, membatasi penghapusan atau penggantian nama entri dalam direktori yang dapat ditulis bersama. Model ini dipakai pada direktori publik seperti /tmp.
Untuk kebutuhan yang lebih rinci, Linux mendukung POSIX ACL. ACL dapat memberi akses kepada user atau group tertentu tanpa membuat semua pengguna masuk ke group utama file. Periksa ACL dengan:
getfacl laporan.txtContoh pemberian akses baca kepada user tertentu:
setfacl -m u:budi:r laporan.txtGunakan getfacl ketika ls -l terlihat benar tetapi akses tetap ditolak. Tanda + setelah string permission, misalnya -rw-r-----+, menunjukkan adanya ACL tambahan. Dokumentasi acl(5) menjelaskan entry user, group, mask, other, serta default ACL untuk objek baru.
Cara Mendiagnosis Permission denied
Jangan langsung menjalankan sudo chmod -R 777. Ikuti urutan diagnosis yang lebih sempit.
1. Kenali user dan group proses
id
ps -o user,group,comm -p "$PID"Service mungkin berjalan sebagai user khusus seperti www-data, bukan sebagai user login Anda. Permission yang bekerja di terminal belum tentu bekerja untuk service.
2. Periksa metadata file
ls -l /srv/app/config/settings.yaml
stat /srv/app/config/settings.yaml
getfacl /srv/app/config/settings.yamlCari owner, group, mode, ACL tambahan, dan symbolic link. stat memberi detail numerik yang tidak selalu terlihat dari output ringkas ls.
3. Periksa setiap komponen path
namei -l /srv/app/config/settings.yamlPerintah ini menampilkan permission setiap bagian path. Jika /srv/app tidak memiliki x untuk user atau group proses, file dengan mode 644 tetap tidak dapat dibuka melalui path tersebut.
4. Perbaiki bagian paling sempit
Jika service memang harus membaca konfigurasi, pertimbangkan group khusus, owner yang tepat, ACL terbatas, atau mode file yang hanya memberi r kepada group. Setelah perubahan, uji sebagai user service bila memungkinkan. Jangan mengubah permission seluruh /srv hanya karena satu file bermasalah.
Kesalahan yang Sering Terjadi
- Mengira
rpada direktori berarti dapat membuka semua file di dalamnya. - Menggunakan
chmod -R 644pada direktori sehingga direktori kehilanganx. - Menggunakan
chmod -R 777untuk menghindari diagnosis. - Mengubah owner aplikasi ke root tanpa alasan operasional.
- Lupa bahwa ACL dapat menambah aturan di balik output
ls -l. - Mengira
umaskmengubah permission file yang sudah ada. - Menguji sebagai root lalu menganggap user service pasti dapat mengakses objek.
Penutup
Permission Linux paling mudah dipahami sebagai pemeriksaan berlapis: siapa prosesnya, kelas akses mana yang dipilih, apa arti bit pada objek tersebut, dan apakah seluruh path dapat ditelusuri. Mulai dari ls -l, lanjutkan dengan id, stat, getfacl, dan namei -l, kemudian ubah hanya bagian yang memang diperlukan. Pendekatan ini lebih aman dan lebih mudah dipelihara daripada membuka akses sistem secara membabi buta.