FlowingDev

Chmod, dijelaskan: jabat tangan rahasia untuk file dan folder-mu

Pahami izin file Unix, sistem hak baca, tulis, dan eksekusi yang melindungi file dan direktori di Linux, macOS, dan server web.

Coba tool-nya: Kalkulator Chmod

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 grup apollo-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 perintah passwd, yang perlu memodifikasi file terproteksi /etc/shadow. File passwd yang dapat dieksekusi dimiliki oleh root dan 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 /tmp sistem), 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 menjalankan chmod -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 x pada direktori. Kamu bisa memiliki izin r pada sebuah file tetapi tidak dapat mengaksesnya karena kamu tidak memiliki izin x pada 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 adalah 644 dan bukan 777? Itu adalah umask-mu yang bekerja. umask adalah "topeng" yang diterapkan oleh shell-mu, menghapus izin dari file dan direktori saat dibuat. umask umum 022 akan menghapus izin "tulis" untuk Grup dan Lainnya, mengubah default 666 menjadi 644.
  • Mengira chmod +x sama dengan chmod 755. Itu tidak benar. chmod 755 my_file mengatur izin secara absolut. chmod +x my_file menambahkan 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

Teori beres. Saatnya praktik — 100% di browser kamu.

Coba tool-nya: Kalkulator Chmod