Linux dirancang sejak awal untuk dipakai banyak orang di satu mesin yang sama. Satu server bisa menampung akun web, akun basis data, akun cron, dan akun Anda sendiri secara bersamaan. Supaya semuanya tidak saling menimpa, setiap berkas dan direktori membawa catatan kecil tentang siapa boleh membacanya, siapa boleh mengubahnya, dan siapa boleh menjalankannya.

Catatan kecil itulah yang disebut izin akses, atau hak akses file. Nilainya ditetapkan otomatis saat berkas dibuat, dan sering kali tidak cocok begitu berkas dipindahkan, diunggah lewat FTP, atau diekstrak dari arsip. Di sinilah chmod masuk. Chmod adalah perintah untuk mengubah izin akses berkas dan direktori di sistem operasi berbasis Unix, termasuk seluruh distro Linux dan macOS.

Chmod Adalah Perintah untuk Mengubah Izin Akses File

Jawaban paling singkat untuk pertanyaan apa itu chmod ada pada namanya sendiri. Chmod merupakan singkatan dari change mode — mengubah mode sebuah berkas. Kata "mode" di sini merujuk pada kumpulan bit izin yang tersimpan di inode. Inode sendiri adalah struktur data tempat sistem berkas Linux mencatat keterangan sebuah berkas: pemiliknya, grupnya, ukurannya, dan izin aksesnya.

Fungsi chmod karena itu tunggal dan spesifik, yaitu menulis ulang bit izin tersebut. Perintah ini adalah bagian dari standar POSIX dan tersedia di setiap distribusi Linux tanpa perlu dipasang terlebih dahulu. Di keluarga Linux, chmod dikirim bersama paket GNU Coreutils. Bentuk dasarnya selalu sama:

Bash
chmod [opsi] mode berkas

Bagian mode bisa ditulis dalam dua gaya yang setara: angka (misalnya 755) atau huruf (misalnya u+x). Keduanya menghasilkan efek yang sama dan bisa dipakai bergantian sesuai kebutuhan.

Bagian [opsi] boleh dikosongkan, dan pada pemakaian sehari-hari memang jarang diisi. Lima opsi berikut adalah yang paling berguna saat Anda membutuhkannya:

OpsiKegunaan
-RMenelusuri direktori beserta seluruh isinya
-vMelaporkan setiap berkas yang diproses, berubah maupun tidak
-cMelaporkan hanya berkas yang izinnya benar-benar berubah
--reference=berkasMenyalin izin dari berkas lain, tanpa perlu menyebut angka
--preserve-rootMenolak menjalankan -R pada direktori root /

Perintah yang sama berlaku di Ubuntu, Debian, CentOS, dan distribusi lainnya, juga di macOS dan di Termux pada Android. Yang berbeda hanya sebagian opsi panjang: --reference dan --preserve-root adalah tambahan dari GNU dan tidak tersedia di chmod bawaan macOS. Windows tidak mengenal perintah ini sama sekali kecuali Anda menjalankannya di dalam WSL.

Sebelum menyentuh angka maupun huruf, ada satu hal yang perlu dikuasai lebih dulu, yaitu cara membaca izin yang sedang berlaku.

Membaca Sepuluh Karakter Izin di Output ls -l

Setiap kali Anda menjalankan ls -l, kolom paling kiri berisi sepuluh karakter yang merangkum seluruh izin sebuah berkas:

Bash
ls -l index.php
Code
-rw-r--r--  1 budi  www-data  4096 Aug 13 09:12 index.php

Sepuluh karakter -rw-r--r-- terbagi menjadi empat bagian. Karakter pertama menandakan jenis objek: tanda hubung berarti berkas biasa, huruf d berarti direktori, dan huruf l berarti symbolic link (pintasan yang menunjuk ke berkas lain). Sembilan karakter sisanya dipecah menjadi tiga kelompok berisi tiga karakter:

  1. Pemilik (user): akun yang memiliki berkas tersebut, dalam contoh di atas adalah budi.
  2. Grup (group): grup yang tercatat pada berkas, dalam contoh di atas adalah www-data.
  3. Lainnya (others): semua akun di mesin yang sama yang bukan pemilik dan bukan anggota grup tersebut.

Setiap kelompok memuat tiga izin dengan urutan tetap: r untuk baca, w untuk tulis, x untuk eksekusi. Tanda hubung berarti izin itu tidak diberikan. Jadi -rw-r--r-- berarti pemilik boleh membaca dan menulis, sedangkan grup dan pengguna lain hanya boleh membaca.

Hak akses file Linux: satu berkas dan tiga kelompok — pemilik dengan dua izin aktif, grup dan pengguna lain satu.Hak akses file Linux: satu berkas dan tiga kelompok — pemilik dengan dua izin aktif, grup dan pengguna lain satu.

Yang sering terlewat adalah arti ketiga huruf itu berbeda pada direktori:

IzinPada berkasPada direktori
rMembaca isi berkasMelihat daftar nama berkas di dalamnya
wMengubah isi berkasMembuat, mengganti nama, dan menghapus berkas di dalamnya
xMenjalankan berkas sebagai programMasuk ke direktori dan mengakses berkas di dalamnya

Perbedaan pada baris terakhir punya akibat yang nyata. Direktori tanpa izin x tidak bisa ditelusuri sama sekali, bahkan ketika Anda sudah mengetahui nama berkas di dalamnya. Pada pengujian dengan direktori berizin 644, perintah cat terhadap berkas di dalamnya dibalas Permission denied meski berkas itu sendiri berizin 644 dan seharusnya terbaca.

Izin w pada direktori mengizinkan penghapusan berkas di dalamnya, terlepas dari izin berkas itu sendiri. Berkas berizin 444 tetap bisa dihapus jika direktori induknya bisa ditulis oleh pelakunya.

Dari Huruf Menjadi Angka: Asal-usul 755 dan 644

Angka seperti 755 dan 644 bukan kode hafalan. Angka itu hasil penjumlahan tiga nilai tetap:

  • r (baca) bernilai 4
  • w (tulis) bernilai 2
  • x (eksekusi) bernilai 1

Jumlahkan nilai izin yang aktif untuk satu kelompok, dan Anda mendapat satu digit. Ulangi untuk tiga kelompok, dan Anda mendapat tiga digit. Kombinasi rwx bernilai 4+2+1 = 7, rw- bernilai 4+2 = 6, r-x bernilai 4+1 = 5, dan r-- bernilai 4.

Karena setiap nilai adalah pangkat dua yang berbeda, penjumlahannya tidak pernah ambigu. Angka 6 hanya bisa berasal dari 4+2, tidak mungkin dari kombinasi lain. Sifat inilah yang membuat proses baca-balik dari angka ke huruf selalu punya satu jawaban. Delapan digit berikut adalah seluruh kemungkinan yang ada:

DigitPenjumlahanHurufArtinya
74+2+1rwxBaca, tulis, dan eksekusi
64+2rw-Baca dan tulis
54+1r-xBaca dan eksekusi
44r--Baca saja
32+1-wxTulis dan eksekusi
22-w-Tulis saja
11--xEksekusi saja
00---Tidak ada izin

Tabel ini bisa dibaca dua arah. Dari huruf ke angka, jumlahkan nilainya. Dari angka ke huruf, cari barisnya. Tiga digit berurutan berarti tiga kelompok berurutan, sehingga 750 berarti pemilik rwx, grup r-x, dan pengguna lain ---.

Cara menghitung chmod 755 dan 644: r bernilai 4, w bernilai 2, x bernilai 1, dijumlahkan per kelompok pengguna.Cara menghitung chmod 755 dan 644: r bernilai 4, w bernilai 2, x bernilai 1, dijumlahkan per kelompok pengguna.

Dengan bekal itu, kode berikut bisa Anda terjemahkan sendiri. Daftarnya disusun dari yang paling terbuka ke yang paling tertutup:

AngkaHasil ls -lPemilik / Grup / LainnyaBiasa dipakai untuk
777-rwxrwxrwxrwx / rwx / rwxSebaiknya dihindari (lihat pembahasan di bawah)
775-rwxrwxr-xrwx / rwx / r-xDirektori yang digarap bersama satu grup
770-rwxrwx---rwx / rwx / ---Sama, tetapi tertutup dari pengguna lain
755-rwxr-xr-xrwx / r-x / r-xDirektori web dan skrip yang perlu dijalankan
750-rwxr-x---rwx / r-x / ---Direktori yang hanya boleh diakses tim tertentu
744-rwxr--r--rwx / r-- / r--Skrip pribadi yang boleh dibaca orang lain
700-rwx------rwx / --- / ---Direktori pribadi seperti ~/.ssh
666-rw-rw-rw-rw- / rw- / rw-Sebaiknya dihindari, sama terbukanya dengan 777
664-rw-rw-r--rw- / rw- / r--Berkas yang disunting bersama satu grup
660-rw-rw----rw- / rw- / ---Sama, tetapi tertutup dari pengguna lain
644-rw-r--r--rw- / r-- / r--Berkas web biasa: HTML, CSS, gambar, PHP
640-rw-r-----rw- / r-- / ---Berkas konfigurasi yang memuat kata sandi
600-rw-------rw- / --- / ---Kunci privat SSH dan berkas rahasia lain
555-r-xr-xr-xr-x / r-x / r-xProgram yang sengaja dikunci dari perubahan
444-r--r--r--r-- / r-- / r--Berkas rujukan yang hanya boleh dibaca
400-r--------r-- / --- / ---Berkas yang sengaja dikunci dari perubahan

Dua pola terlihat dari tabel di atas. Pertama, direktori hampir selalu memerlukan bit x, sedangkan berkas biasa tidak — itu sebabnya pasangan 755 dan 644 muncul berulang di hampir semua panduan server. Kedua, angka genap pada digit terakhir berarti pengguna lain tidak bisa masuk ke direktori, karena bit eksekusi bernilai 1 dan hanya muncul pada digit ganjil.

Untuk melihat angka izin sebuah berkas tanpa menerjemahkan huruf sendiri, pakai stat. Penanda %a menampilkan bit izin dalam oktal, sedangkan %A menampilkan bentuk hurufnya:

Bash
stat -c '%a %A %n' index.php
Code
644 -rw-r--r-- index.php

Penanda -c di atas adalah gaya GNU yang dipakai Linux. Di macOS, perintah yang setara adalah stat -f '%A %Sp %N' index.php.

Kenapa chmod 888 dan chmod 999 Selalu Ditolak

Cukup banyak orang mencoba chmod 888 atau chmod 999 dengan harapan mendapat izin yang "lebih penuh" daripada 777. Perintah itu selalu ditolak, dan alasannya ada pada sistem bilangan yang dipakai.

Angka mode chmod ditulis dalam oktal (basis 8), bukan desimal. Dalam basis 8, digit yang sah hanya 0 sampai 7. Digit 8 dan 9 tidak ada. Batas ini juga masuk akal secara logika: nilai maksimum satu kelompok adalah 4+2+1 = 7, sehingga tidak ada izin tambahan yang bisa diwakili angka di atasnya. Angka 777 memang sudah izin paling terbuka yang bisa diberikan.

Menjalankannya menghasilkan penolakan sebelum berkas apa pun disentuh:

Bash
chmod 888 index.php
Code
chmod: invalid mode: '888'

Pesan ini datang langsung dari parser mode di GNU Coreutils, dan perintah keluar dengan status 1 tanpa mengubah apa pun. Jadi tidak ada risiko kerusakan — hanya perlu diganti dengan angka yang sah.

Mode Simbolik: Mengubah Satu Izin Tanpa Menghapus Sisanya

Menulis mode dalam angka berarti menetapkan ulang kesembilan bit sekaligus. Kadang Anda hanya ingin menambah satu izin tanpa mengusik sisanya, dan untuk itu ada mode simbolik. Menurut manual chmod(1), bentuknya adalah [ugoa...][[-+=][perms...]...].

Bagian pertama menentukan sasaran: u untuk pemilik, g untuk grup, o untuk pengguna lain, dan a untuk ketiganya. Bagian kedua adalah operator:

  • + menambah izin tanpa menghapus yang sudah ada
  • - mencabut izin tanpa menyentuh yang lain
  • = menetapkan izin persis seperti yang ditulis, sisanya dihapus

Beberapa contoh yang paling sering dipakai:

Bash
chmod u+x deploy.sh          # pemilik boleh menjalankan
chmod g-w laporan.txt        # grup tidak lagi boleh menulis
chmod o=r catatan.txt        # pengguna lain hanya boleh membaca
chmod u=rwx,go=r index.php   # dua perubahan sekaligus, dipisah koma

Ada satu perilaku yang perlu Anda ketahui. Bila bagian sasaran dikosongkan, seperti pada chmod +x, hasilnya disaring oleh umask — nilai bawaan sistem yang menentukan izin apa yang otomatis dicabut. Pada pengujian dengan umask 022, chmod +x memberi bit eksekusi ke ketiga kelompok dan menghasilkan ---x--x--x. Pada umask 077, perintah yang sama hanya memberi bit eksekusi ke pemilik dan menghasilkan ---x------. Menulis chmod a+x secara eksplisit tidak terpengaruh umask dan selalu memberi ketiganya.

Kebiasaan yang aman: tulis sasarannya secara eksplisit. chmod u+x dan chmod a+x memberi hasil yang bisa Anda prediksi di mesin mana pun, sedangkan chmod +x bergantung pada umask yang sedang berlaku.

Ada pula huruf X kapital yang sangat berguna saat bekerja rekursif. Berbeda dari x kecil, X kapital hanya memberi izin eksekusi pada direktori atau pada berkas yang sudah punya bit eksekusi untuk salah satu kelompok. Berkas teks biasa dilewati.

Membuat Skrip Bisa Dijalankan dengan chmod +x

Kebutuhan chmod yang paling sering muncul di luar urusan server adalah membuat sebuah skrip bisa dijalankan, atau dalam istilah teknisnya menjadikannya executable. Berkas .sh, .py, maupun binary yang baru diunduh biasanya datang tanpa bit eksekusi, sehingga percobaan menjalankannya dibalas penolakan:

Bash
./deploy.sh
Code
bash: ./deploy.sh: Permission denied

Perbaikannya satu baris. Bit eksekusi cukup diberikan kepada pemilik, karena Andalah yang akan menjalankannya:

Bash
chmod u+x deploy.sh
./deploy.sh

Berkas 644 ditolak saat dijalankan; setelah chmod u+x izinnya jadi -rwxr--r-- dan skrip berhasil berjalan.Berkas 644 ditolak saat dijalankan; setelah chmod u+x izinnya jadi -rwxr--r-- dan skrip berhasil berjalan.

Menariknya, izin eksekusi sebenarnya tidak wajib untuk menjalankan sebuah skrip. Bit x hanya diperlukan bila Anda memanggil berkasnya secara langsung dengan ./. Memanggil penerjemahnya lebih dulu memintas pemeriksaan itu sepenuhnya, karena yang dijalankan sistem adalah bash, sementara skripnya sekadar dibaca sebagai teks masukan:

Bash
bash deploy.sh      # berhasil walaupun deploy.sh berizin 644
python3 skrip.py    # berlaku sama untuk penerjemah lain

Cara ini berguna saat Anda tidak punya hak mengubah izin berkasnya. Untuk pemakaian rutin, memberi bit eksekusi tetap lebih rapi.

Bit eksekusi adalah satu-satunya izin yang dicatat Git. Pada pengujian, berkas berizin 644 tersimpan sebagai mode 100644. Begitu diberi bit eksekusi, ia berubah menjadi 100755 — nilai yang sama, baik izinnya diatur 755, 750, maupun 700. Karena itu berkas seperti gradlew atau mvnw sering kehilangan hak jalannya setelah dipindahkan lewat unggahan berkas biasa, sementara lewat Git ia bertahan. Jalankan chmod u+x setelah menyalinnya secara manual.

Digit Keempat: SetUID, SetGID, dan Sticky Bit

Angka mode sebenarnya bisa terdiri dari empat digit, dan digit paling depan menyimpan tiga bit istimewa. Manual chmod(1) menyebut ketiganya dengan nilai yang mengikuti pola penjumlahan yang sama:

  1. SetUID bernilai 4: program dijalankan dengan hak pemilik berkas, bukan hak orang yang menjalankannya. Contoh klasiknya /usr/bin/passwd, yang perlu menyunting berkas milik root meski dijalankan pengguna biasa.
  2. SetGID bernilai 2: pada program, berlaku seperti SetUID tetapi untuk grup. Pada direktori, menurut manual inode(7), berkas baru yang dibuat di dalamnya mewarisi grup dari direktori, bukan dari grup pengguna yang membuatnya. Ini dipakai untuk direktori kerja bersama.
  3. Sticky bit bernilai 1: pada direktori, berkas di dalamnya hanya boleh dihapus atau diganti nama oleh pemilik berkas, pemilik direktori, atau root. Manual menyebutnya restricted deletion flag.

Ketiganya muncul di ls -l menggantikan huruf x pada posisi tertentu:

PerintahHasil ls -lArti
chmod 4755 program-rwsr-xr-xSetUID aktif, bit x pemilik ada
chmod 2775 folderdrwxrwsr-xSetGID aktif pada direktori
chmod 1777 folderdrwxrwxrwtSticky bit aktif
chmod 4644 berkas-rwSr--r--SetUID aktif tanpa bit x
chmod 1644 berkas-rw-r--r--TSticky aktif tanpa bit x

Perhatikan dua baris terakhir. Huruf kapital S dan T menandakan bit istimewa menyala sementara bit eksekusi di posisi yang sama padam. Kombinasi itu hampir selalu tidak berguna, karena SetUID hanya bermakna pada berkas yang memang bisa dijalankan. Jika Anda menemukan S kapital di sebuah berkas, kemungkinan besar ada kesalahan penulisan angka.

Contoh sticky bit yang paling mudah diperiksa ada di setiap mesin Linux. Jalankan ls -ld /tmp dan Anda akan melihat drwxrwxrwt. Direktori itu memang sengaja dibuat bisa ditulis siapa saja, tetapi sticky bit mencegah satu pengguna menghapus berkas sementara milik pengguna lain.

Kernel Linux mengabaikan bit SetUID pada skrip shell. Menyalakan 4755 pada berkas .sh tidak memberi efek apa pun, karena celah keamanan pada mekanisme itu sudah lama ditutup. Gunakan aturan sudo bila sebuah skrip memang perlu hak lebih tinggi.

Digit keempat boleh dihilangkan bila tidak dipakai. Menulis chmod 755 dan chmod 0755 menghasilkan hal yang persis sama.

Cara Mengubah Izin lewat Terminal, cPanel, dan Klien FTP

Langkah #1: Lewat terminal dengan akses SSH

Jalur ini paling cepat dan tersedia di semua server. Masuk ke server memakai SSH, lalu periksa izin yang sedang berlaku sebelum mengubahnya:

Bash
ls -l wp-config.php

Setelah tahu kondisi awalnya, ubah izinnya dan periksa kembali hasilnya:

Bash
chmod 640 wp-config.php
ls -l wp-config.php

Untuk beberapa berkas sekaligus, cukup tuliskan berurutan atau pakai pola nama:

Bash
chmod 644 index.php header.php footer.php
chmod 644 *.css

Langkah #2: Mengubah seluruh isi direktori dengan benar

Opsi -R membuat chmod bekerja secara rekursif (recursive), yaitu menelusuri direktori beserta seluruh isinya. Masalahnya, satu angka yang sama akan dikenakan ke direktori dan berkas biasa sekaligus. Cara yang benar adalah memisahkan keduanya:

Bash
find public_html -type d -exec chmod 755 {} \;
find public_html -type f -exec chmod 644 {} \;

Perintah pertama menyentuh direktori saja, yang kedua berkas saja. Alternatif yang lebih ringkas memakai huruf X kapital, yang hanya menambahkan bit eksekusi pada direktori dan berkas yang memang sudah bisa dijalankan:

Bash
chmod -R a+X public_html

Langkah #3: Lewat File Manager di panel hosting

Pembaca yang memakai layanan web hosting tanpa akses SSH bisa mengubah izin lewat panel. Di cPanel, buka File Manager, klik kanan berkas atau direktori yang dituju, lalu pilih Change Permissions. Kotak dialognya menampilkan sembilan kotak centang yang tersusun tiga baris, dan angka tiga digitnya berubah otomatis mengikuti centang yang Anda pilih.

Langkah #4: Lewat klien FTP

Aplikasi seperti FileZilla menyediakan menu File Permissions pada klik kanan. Isinya sama dengan dialog cPanel, ditambah kotak isian angka. Klien FTP juga menyediakan opsi menerapkan izin ke seluruh subdirektori, tetapi pilihan itu punya masalah yang sama dengan chmod -R: berkas dan direktori diperlakukan sama rata. Bila memungkinkan, kerjakan lewat terminal.

Angka yang Sebaiknya Anda Pakai di Server Web

Rekomendasi berikut memakai angka pasti, bukan perkiraan:

  1. Direktori web: 755. Web server perlu masuk ke direktori dan membaca isinya, tetapi tidak perlu menulis ke sana.
  2. Berkas web: 644. Angka ini dipakai untuk HTML, CSS, JavaScript, gambar, dan berkas PHP. Dokumentasi resmi WordPress memakai kombinasi 755 dan 644 ini untuk instalasi standar.
  3. Berkas konfigurasi: 640 atau 600. Berkas seperti wp-config.php dan .env memuat kata sandi basis data. Menutupnya dari pengguna lain di mesin yang sama mengurangi dampak bila ada akun lain yang jebol.
  4. Direktori ~/.ssh: 700. Hanya pemilik yang boleh masuk.
  5. Kunci privat SSH: 600, atau 400. Keduanya sama-sama menutup akses grup dan pengguna lain, dan keduanya diterima OpenSSH. Dokumentasi AWS menyebut chmod 400 untuk berkas .pem bawaan EC2, yang berarti berkas itu bahkan tidak bisa Anda timpa sendiri tanpa mengubah izinnya lebih dulu.
  6. Berkas authorized_keys: 644 atau 600. Yang penting tidak bisa ditulis grup maupun pengguna lain.

Poin kelima ditegakkan langsung oleh OpenSSH. Bila berkas kunci privat bisa dibaca akun lain, perintah ssh menolak memakainya dan menampilkan peringatan UNPROTECTED PRIVATE KEY FILE. Alasannya masuk akal: kunci privat adalah rahasia, dan akun lain yang bisa membacanya dapat menyalinnya lalu menyamar sebagai Anda di setiap server yang memercayai kunci itu. Di sisi server, aturan serupa ditegakkan pengaturan StrictModes yang aktif secara bawaan.

Bash
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/authorized_keys

Kesalahan yang Membuat chmod Terasa Tidak Berfungsi

Menjalankan chmod -R 755 pada seluruh direktori web. Perintah ini memberi bit eksekusi kepada setiap berkas, termasuk gambar dan berkas teks yang tidak pernah dijalankan. Pada pengujian, index.php berizin 644 berubah menjadi -rwxr-xr-x setelah chmod -R 755. Web server memang tetap melayaninya, tetapi izin eksekusi yang tersebar tanpa alasan memperbesar dampak bila ada berkas asing yang berhasil diunggah. Pakai pola find -type atau a+X seperti pada Langkah #2.

Memakai chmod 777 sebagai jalan pintas. Angka ini mengizinkan setiap akun di server yang sama untuk menulis ulang berkas Anda. Di hosting bersama, hasilnya sering justru kebalikan dari yang diharapkan. Apache menjalankan skrip pengguna lewat suEXEC, dan salah satu pemeriksaan wajibnya memastikan program target maupun direktorinya tidak bisa ditulis pihak lain. Berkas berizin 777 gagal pemeriksaan itu, dan yang muncul di layar adalah 500 Internal Server Error — bukan halaman yang berhasil diperbaiki. Bila sebuah direktori memang perlu ditulis web server, ubah kepemilikan grupnya lalu pakai 775 atau 664, jangan 777.

Risiko chmod 777: lemari arsip dengan laci dan gembok terbuka, orang-orang bebas berjalan masuk lewat pintu.Risiko chmod 777: lemari arsip dengan laci dan gembok terbuka, orang-orang bebas berjalan masuk lewat pintu.

Pesan Operation not permitted. Menurut manual chmod(2), izin sebuah berkas hanya boleh diubah oleh pemiliknya atau oleh proses berhak istimewa. Bila UID efektif Anda tidak cocok dengan pemilik berkas, sistem menolak dengan pesan tersebut. Periksa kolom pemilik lewat ls -l, lalu jalankan ulang sebagai pemilik yang benar atau dengan sudo. Penyebab kedua adalah berkas berada di partisi yang dipasang sebagai read-only, yang menghasilkan pesan Read-only file system.

Penyebab ketiga jarang diketahui dan paling membingungkan, karena penolakannya bertahan bahkan ketika Anda sudah menjadi root: berkas diberi atribut immutable. Menurut manual chattr(1), berkas dengan atribut i tidak dapat diubah, dihapus, diganti nama, maupun disunting sebagian besar metadatanya — dan izin akses termasuk metadata. Periksa dengan lsattr, lalu cabut atributnya sebelum menjalankan chmod:

Bash
lsattr penting.conf
sudo chattr -i penting.conf
chmod 644 penting.conf

Atribut ini hanya bisa dipasang dan dicabut oleh superuser. Kemunculannya karena itu biasanya berarti ada yang sengaja mengunci berkas tersebut, entah oleh administrator lain, entah oleh perangkat pengeras keamanan.

Menjalankan chmod pada symbolic link. Perintah ini tidak mengubah izin link itu sendiri, melainkan izin berkas yang ditunjuknya. Pada pengujian, chmod 644 link.txt mengubah berkas tujuannya, sementara link tetap tampil sebagai lrwxr-xr-x. Saat menelusuri direktori secara rekursif, chmod justru melewati symbolic link yang ditemukannya.

Pesan missing operand. Perintah ini memerlukan dua hal: mode dan nama berkas, dengan mode ditulis lebih dulu. Menukar urutannya atau melupakan salah satunya menghasilkan chmod: missing operand after 'index.php'.

Hal yang Perlu Anda Pertimbangkan Sebelum Mengubah Izin

Chmod menyelesaikan satu urusan saja, dan beberapa masalah yang mirip sebenarnya berada di luar jangkauannya.

  1. Chmod tidak mengubah kepemilikan. Mengatur izin grup tidak ada gunanya bila berkasnya tercatat pada grup yang salah. Untuk itu ada chown dan chgrp. Banyak kasus "web server tidak bisa menulis" sebenarnya perlu perbaikan kepemilikan, bukan penambahan izin.
  2. Izin per pengguna tidak bisa diberikan. Model tiga kelompok berarti Anda tidak dapat memberi akses ke satu akun tertentu tanpa memasukkannya ke grup. Bila kebutuhannya sehalus itu, ACL (Access Control List) lewat perintah setfacl adalah alatnya.
  3. Root mengabaikan hampir semua izin. Menutup berkas dengan 000 tidak menghalangi root membacanya. Izin berkas adalah pembatas antar pengguna biasa, bukan mekanisme enkripsi.
  4. Izin hilang di sistem berkas yang tidak mendukungnya. Menyalin berkas ke flash disk berformat FAT32 atau exFAT menghapus catatan izinnya, karena format itu memang tidak menyimpannya.
  5. Model izin Windows tidak setara. NTFS memakai daftar kendali akses yang jauh lebih rinci daripada tiga kelompok milik Unix, sehingga izin tidak bisa dipetakan bolak-balik tanpa kehilangan makna. Berkas yang disalin dari server ke Windows lalu dikembalikan lagi biasanya perlu ditata ulang izinnya. Kebutuhan menjalankan chmod secara rutin biasanya jadi tanda bahwa pekerjaan Anda memang lebih cocok dikerjakan di VPS Indonesia dengan akses root penuh.

Pertanyaan yang Sering Diajukan

Chmod 777 untuk apa? Angka 777 memberi izin baca, tulis, dan eksekusi kepada pemilik, grup, dan semua pengguna lain sekaligus. Angka ini sering disarankan sebagai cara cepat mengatasi galat izin, tetapi di server bersama justru berbahaya dan bisa memicu penolakan dari suEXEC. Pakai 755 untuk direktori dan 644 untuk berkas, lalu perbaiki kepemilikannya bila web server masih tidak bisa menulis.

Apa arti dari chmod? Chmod adalah singkatan dari change mode, yaitu perintah untuk mengubah bit izin sebuah berkas atau direktori di Linux dan sistem Unix lainnya. Mode yang diubah mencakup izin baca, tulis, dan eksekusi untuk tiga kelompok pengguna.

Chmod 600 itu apa? Angka 600 berarti pemilik boleh membaca dan menulis, sementara grup dan pengguna lain tidak mendapat izin apa pun. Bentuknya di ls -l adalah -rw-------. Ini adalah izin standar untuk kunci privat SSH, berkas .pem, dan berkas lain yang memuat rahasia.

Chmod 700 itu apa? Angka 700 memberi izin baca, tulis, dan eksekusi hanya kepada pemilik, dan menutup akses sepenuhnya bagi grup maupun pengguna lain. Pada direktori, angka ini berarti hanya pemilik yang bisa masuk dan melihat isinya, sehingga cocok untuk direktori pribadi seperti ~/.ssh.

Kesimpulan

Chmod mengatur tiga izin — baca, tulis, dan eksekusi — untuk tiga kelompok pengguna: pemilik, grup, dan lainnya. Angkanya bukan hafalan, melainkan hasil penjumlahan 4, 2, dan 1. Setiap kode karenanya bisa Anda terjemahkan sendiri ke huruf dan sebaliknya. Untuk pekerjaan sehari-hari di server web, pasangan 755 untuk direktori dan 644 untuk berkas menutup hampir semua kebutuhan, sementara 600 disediakan khusus untuk kunci privat.

Bila suatu perintah chmod terasa tidak berpengaruh, periksa tiga hal lebih dulu. Apakah Anda pemilik berkasnya, apakah angkanya sah dalam oktal, dan apakah masalah sebenarnya justru ada pada kepemilikan yang perlu diperbaiki dengan chown. Semoga artikel ini membantu.