Dalam satu kalimat
chmod adalah perintah Unix yang menentukan siapa yang bisa membaca, menulis, atau mengeksekusi sebuah file, bertindak sebagai sistem kontrol akses fundamental untuk sebagian besar server dan mesin developer di dunia.
Masalah yang diselesaikannya
Bayangkan masa-masa awal komputasi: satu orang, satu mesin, satu tugas pada satu waktu. Di sistem seperti itu, izin file adalah solusi yang tidak ada masalahnya. Kalau kamu satu-satunya orang yang akan pernah menggunakan komputer, kamu melindungi file dari siapa? Diri sendiri?
Lalu datanglah Unix pada akhir 1960-an di Bell Labs. Ide revolusionernya adalah menjadi sistem operasi multi-user dan multi-tasking sejak awal. Tiba-tiba, ada banyak programmer yang login ke komputer mainframe yang sama melalui terminal yang berbeda, semuanya bekerja pada saat yang sama. Ini menciptakan masalah baru yang mendesak: gimana caranya menghentikan Dennis agar tidak sengaja (atau "sengaja") menghapus compiler C baru milik Ken? Gimana caranya membiarkan rekan proyekmu membaca kodemu tapi mencegah mereka mengubahnya? Gimana caranya melindungi file inti sistem operasi dari anak magang yang ceroboh?
Solusinya adalah sistem kepemilikan dan izin yang sangat sederhana dan kuat yang tertanam dalam sistem file itu sendiri. Setiap file dan direktori akan memiliki seorang pemilik, menjadi bagian dari sebuah grup, dan memiliki serangkaian izin khusus untuk tiga kelas pengguna: pemilik, anggota grup, dan semua orang lainnya.
Perintah untuk "mengubah mode" (change the mode) sebuah file—yaitu, untuk memodifikasi izin-izin ini—diberi nama chmod. Ini menjadi alat universal bagi para system administrator dan pengguna untuk menyatakan, "File ini milikku, dan ini aturan main untuk berinteraksi dengannya." Ini memecahkan masalah kekacauan multi-user dengan sangat efektif sehingga model inti yang sama masih digunakan hingga hari ini di hampir setiap server Linux, mesin macOS, ponsel Android, dan perangkat IoT di planet ini.
Cara kerjanya di balik layar
Pada intinya, sistem chmod adalah sebuah kisi-kisi aturan 3x3, dengan beberapa flag khusus sebagai pemanis. Untuk memahaminya, kamu perlu mengerti tiga jenis izin dan tiga kelas pengguna yang bisa menerapkannya.
Tiga Izin: Baca, Tulis, Eksekusi
Semuanya berputar di sekitar tiga tindakan dasar yang bisa kamu lakukan pada file atau direktori. Mereka diwakili oleh huruf r, w, dan x.
- Baca (
r): Kemampuan untuk membuka dan melihat isi sebuah file. - Tulis (
w): Kemampuan untuk memodifikasi, mengubah, atau menghapus isi sebuah file. - Eksekusi (
x): Kemampuan untuk menjalankan file sebagai program atau skrip.
Tapi inilah 'jebakan' pertamanya: izin-izin ini punya arti yang sedikit berbeda untuk direktori. Ini adalah titik kebingungan yang sangat umum.
| Izin | Pada File | Pada Direktori |
|---|---|---|
Baca (r) |
Bisa melihat isi file | Bisa menampilkan nama-nama file di dalam direktori (ls) |
Tulis (w) |
Bisa mengubah isi file | Bisa membuat, mengganti nama, atau menghapus file di dalam direktori |
Eksekusi (x) |
Bisa menjalankan file | Bisa masuk ke direktori (cd) dan mengakses file di dalamnya |
Pikirkan yang terakhir itu. Jika sebuah direktori tidak memiliki izin eksekusi untukmu, kamu tidak bisa cd ke dalamnya, bahkan jika kamu bisa melihat isinya! Kamu butuh x untuk melewati "pintu" direktori.
Tiga Kelas Pengguna: Pemilik, Grup, Lainnya
Izin Unix tidak bersifat universal; mereka ditetapkan untuk kategori pengguna tertentu.
- Pemilik (
u): Satu pengguna yang memiliki file. Biasanya, ini adalah orang yang membuatnya. Pemilik memiliki kendali paling besar. - Grup (
g) : Setiap file milik sebuah grup. Ini memungkinkan pemilik untuk berbagi akses dengan anggota tim tertentu. Sebagai contoh, semua file untuk "Proyek Apollo" bisa menjadi milik grupapollo-devs. - Lainnya (
o): Secara harfiah, semua orang lain. Setiap pengguna di sistem yang bukan pemilik dan bukan anggota grup file tersebut.
Ketika kamu melihat string izin seperti rwxr-xr--, itu sebenarnya tiga set izin rwx yang digabungkan untuk Pemilik, Grup, dan Lainnya, secara berurutan.
rwx: Pemilik bisa membaca, menulis, dan mengeksekusi.r-x: Grup bisa membaca dan mengeksekusi, tapi tidak bisa menulis.r--: Lainnya hanya bisa membaca.
Dua Notasi: Simbolik vs. Oktal
Ada dua cara untuk memberitahu chmod apa yang kamu inginkan, dan para developer selamanya menerjemahkan di antara keduanya.
1. Notasi Simbolik (cara yang "ramah")
Notasi simbolik menggunakan huruf-huruf yang sudah kita pelajari (r, w, x dan u, g, o, a di mana a berarti "semua"). Kamu menggunakan + untuk menambahkan izin, - untuk menghapusnya, dan = untuk mengaturnya secara pasti.
# Beri izin eksekusi kepada pemilik
$ chmod u+x my_script.sh
# Hapus izin tulis untuk grup dan lainnya
$ chmod go-w sensitive_data.txt
# Atur izin secara pasti: pemilik bisa baca/tulis, grup bisa baca, lainnya tidak punya akses
$ chmod u=rw,g=r,o= config.yml
Ini bagus untuk membuat perubahan kecil dan terarah.
2. Notasi Oktal (cara yang "nerdy")
Oktal lebih cepat, lebih umum dalam skrip, dan berbasis biner. Setiap izin (r, w, x) adalah sebuah bit dalam angka 3-bit.
r(baca) adalah bit pertama, dengan nilai 4.w(tulis) adalah bit kedua, dengan nilai 2.x(eksekusi) adalah bit ketiga, dengan nilai 1.
Kamu menjumlahkan angka-angka tersebut untuk izin yang kamu inginkan.
| Angka | Biner (rwx) |
Izin yang Diberikan |
|---|---|---|
| 0 | 000 (---) |
Tidak ada |
| 1 | 001 (--x) |
Eksekusi |
| 2 | 010 (-w-) |
Tulis |
| 3 | 011 (-wx) |
Tulis dan eksekusi |
| 4 | 100 (r--) |
Baca |
| 5 | 101 (r-x) |
Baca dan eksekusi |
| 6 | 110 (rw-) |
Baca dan tulis |
| 7 | 111 (rwx) |
Baca, tulis, eksekusi |
Kode oktal tiga digit seperti 755 mewakili izin untuk Pemilik, Grup, dan Lainnya.
chmod 755 my_script.sh berarti:
- Pemilik:
7(rwx) - Baca, tulis, dan eksekusi. - Grup:
5(r-x) - Baca dan eksekusi. - Lainnya:
5(r-x) - Baca dan eksekusi.
Ini adalah izin yang sangat umum untuk skrip yang bisa dieksekusi yang aman untuk dijalankan oleh orang lain. Izin umum untuk sebuah file adalah 644 (pemilik bisa baca/tulis, semua orang lain hanya bisa baca).
Tamu-tamu Istimewa: SUID, SGID, dan Sticky Bit
Di luar rwx dasar, ada tiga mode khusus, yang diwakili oleh digit oktal keempat di awal (mis., chmod 4755).
- SUID (Set User ID) - Oktal
4: Ketika sebuah file yang bisa dieksekusi dengan bit ini dijalankan, ia akan berjalan dengan izin dari pemilik file, bukan pengguna yang menjalankannya. Contoh klasiknya adalah perintahpasswd, yang perlu memodifikasi file terproteksi/etc/shadow. Filepasswdyang dapat dieksekusi dimiliki olehrootdan memiliki bit SUID, jadi ketika pengguna biasa menjalankannya, ia untuk sementara mendapatkan hak istimewa root hanya untuk satu operasi itu. Ini ampuh tapi berbahaya. - SGID (Set Group ID) - Oktal
2: Mirip dengan SUID, tetapi sebuah file yang bisa dieksekusi berjalan dengan identitas grup file tersebut. Yang lebih berguna, ketika diatur pada sebuah direktori, setiap file atau direktori baru yang dibuat di dalamnya akan secara otomatis mewarisi grup dari direktori induknya, bukan grup utama pengguna yang membuatnya. Ini penting untuk folder proyek bersama. - Sticky Bit - Oktal
1: Ini punya sejarah yang aneh, tapi hari ini hampir secara eksklusif digunakan pada direktori. Ketika sebuah direktori memiliki sticky bit (seperti folder/tmpsistem), semua pengguna dapat membuat file di dalamnya, tetapi seorang pengguna hanya dapat menghapus atau mengganti nama file yang mereka miliki sendiri. Ini mencegah orang mengutak-atik barang milik orang lain di ruang bersama.
Kisah di dunia nyata
Kasus Skrip yang Tidak Bisa Dijalankan
Seorang developer junior, Alex, menulis skrip shell brilian untuk mengotomatisasi deployment server. Dia melakukan commit deploy.sh ke Git. Di server produksi, dia melakukan clone repositori, mengetik ./deploy.sh, dan menekan Enter. Responsnya: bash: ./deploy.sh: Permission denied. Panik. Apakah dia merusak server? Seorang dev senior dengan tenang mengetik ls -l deploy.sh dan menunjukkan outputnya: -rw-r--r--. File tersebut memiliki izin baca dan tulis, tetapi tidak eksekusi (x). Git tidak mempertahankan izin eksekusi secara default. Setelah chmod +x deploy.sh singkat, skrip berjalan dengan sempurna.
Pelajaran: File, terutama dari sumber seperti Git atau arsip zip, secara default tidak bisa dieksekusi. Kamu harus secara eksplisit memberikan izin untuk menjalankannya.
Mimpi Buruk Folder Proyek Bersama
Sebuah tim desain dan tim pengembangan perlu berbagi aset di sebuah folder di server Linux: /data/project-x. Sysadmin memasukkan semua orang ke dalam grup project-x-team dan memberi grup tersebut akses tulis ke folder itu. Tapi kekacauan terjadi. Ketika seorang desainer mengunggah file, file itu dimiliki oleh designer:designers, dan para dev tidak bisa memodifikasinya. Ketika seorang dev membuat sub-folder, itu dimiliki oleh dev:developers, dan para desainer tidak bisa menambahkan file ke dalamnya. Semua orang terus-menerus meminta sysadmin untuk memperbaiki izin. Solusinya? Admin menjalankan chmod g+s /data/project-x. Ini mengatur bit SGID pada direktori. Sejak saat itu, setiap file dan folder baru yang dibuat di dalam /data/project-x secara otomatis mewarisi grup project-x-team. Keharmonisan pun pulih.
Pelajaran: SGID pada sebuah direktori adalah cara yang benar dan tidak ngasal untuk mengelola folder grup bersama.
Lubang Keamanan Situs Web Publik
Seorang developer web freelance meluncurkan situs web PHP sederhana untuk klien. Untuk kemudahan, dia meninggalkan file konfigurasi database, config.inc.php, di direktori yang sama dengan halaman utama. File tersebut berisi nama pengguna dan kata sandi database dalam teks biasa. Izinnya adalah default 644 (-rw-r--r--), yang berarti pengguna server web bisa membacanya (bagus), tetapi begitu juga siapa pun di planet ini yang menebak URL-nya. Sebuah pemindai keamanan menemukan file tersebut, dan penyerang mengunduh kredensial database. Perbaikannya seharusnya adalah chmod 600 config.inc.php, membuatnya hanya bisa dibaca oleh pemilik (proses server web).
Pelajaran: Jangan pernah berasumsi izin default itu aman. File sensitif seperti file konfigurasi dan kunci privat harus dikunci seketat mungkin.
Kesalahan dan jebakan umum
- Palu godam
chmod 777. Ketika frustrasi, banyak yang tergoda untuk menjalankanchmod -R 777 .pada sebuah direktori. Ini secara rekursif memberikan izin kepada semua orang untuk membaca, menulis, dan mengeksekusi segalanya. Ini adalah kerentanan keamanan yang fatal dan setara dengan melepas semua pintu rumahmu dan menaruh papan "Barang Gratis di Dalam" di halaman depan. Jangan lakukan itu. - Melupakan izin
xpada direktori. Kamu bisa memiliki izinrpada sebuah file tetapi tidak dapat mengaksesnya karena kamu tidak memiliki izinxpada salah satu direktori induk di jalurnya. Kamu memerlukan izin eksekusi pada semua direktori yang ingin kamu lewati. - Misteri
umask. Pernah bertanya-tanya mengapa file baru yang kamu buat adalah644dan bukan777? Itu adalahumask-mu yang bekerja.umaskadalah "topeng" yang diterapkan oleh shell-mu, menghapus izin dari file dan direktori saat dibuat.umaskumum022akan menghapus izin "tulis" untuk Grup dan Lainnya, mengubah default666menjadi644. - Mengira
chmod +xsama denganchmod 755. Itu tidak benar.chmod 755 my_filemengatur izin secara absolut.chmod +x my_filemenambahkan bit eksekusi untuk setiap kelas pengguna (pemilik, grup, lainnya) yang sudah memiliki bit baca, tanpa mengubah bit lainnya. Mode simbolik bersifat relatif; mode oktal bersifat absolut.
Kenapa ini harus kamu perhatikan
Kalau kamu menyentuh command line non-Windows, kamu wajib mengerti chmod. Ini bukan pilihan. Pengetahuan ini sangat penting ketika:
- Melakukan deployment aplikasi apa pun ke server Linux.
- Menulis skrip (Shell, Python, Node.js) yang perlu dieksekusi.
- Bekerja dengan Git, yang punya aturannya sendiri tentang izin file.
- Menyiapkan file share atau lingkungan kolaboratif.
- Memperkuat keamanan server dengan membatasi akses ke file-file sensitif.
- Menggunakan Docker, di mana izin file di dalam kontainer sangat penting.
chmod adalah salah satu perintah pertama dan paling fundamental yang memisahkan pengguna biasa dari seorang operator sistem atau developer sejati. Memahaminya adalah sebuah ritual pendewasaan untuk bisa mengendalikan mesin, bukan hanya menggunakannya.
Gali lebih dalam
- Wikipedia: chmod - Gambaran umum tingkat tinggi yang bagus tentang perintah ini, sejarahnya, dan notasi-notasinya yang berbeda.
- Wikipedia: File-system permissions - Pandangan yang lebih luas tentang konsep DAC, ACL, dan notasi simbolik/oktal di berbagai sistem.
- The Linux man-pages project: chmod(1) - Referensi teknis kanonis untuk perintah
chmoddi Linux. Padat tapi berwibawa. - The Open Group Base Specifications (POSIX): chmod - Standar aktual yang mendefinisikan bagaimana
chmodharus berperilaku pada sistem yang sesuai dengan POSIX (seperti macOS dan Linux). - ArchWiki: File permissions and attributes - Panduan yang sangat praktis dan terawat baik dari komunitas Arch Linux, mencakup
chmod,chown, dan atribut khusus.