Izin File Linux Dijelaskan: chmod 755, 644 & 777
Izin file Linux menentukan siapa yang boleh membaca, menulis, atau menjalankan setiap file dan folder di sistem. Setiap item memiliki tiga kelas pengguna (pemilik/owner, satu grup, dan semua orang lain), dan setiap kelas mendapat tiga bit izin: baca/read (r), tulis/write (w), dan jalankan/execute (x). Itu berarti sembilan bit per file. chmod yang mengaturnya, dan singkatan yang Anda lihat di mana-mana adalah oktal: rwx setiap kelas dipadatkan menjadi satu digit dari 0 sampai 7 (baca 4 + tulis 2 + jalankan 1).
Tiga mode mencakup hampir semua yang akan pernah Anda ketikkan:
- 755 (
rwxr-xr-x) — direktori dan skrip: pemilik bisa mengubahnya, semua orang lain bisa membaca dan menjalankannya. - 644 (
rw-r--r--) — file biasa: pemilik menulis, semua orang lain membaca. - 777 (
rwxrwxrwx) — akses penuh untuk semua orang. Hampir selalu salah; ini lubang keamanan, bukan solusi.
Coba kombinasi apa pun di Kalkulator chmod gratis dan lihat oktal, string rwx, dan perintah persisnya diperbarui bersamaan. Sisa panduan ini menjelaskan cara kerja angka-angka itu dan di mana masing-masing seharusnya dipakai.
Izin File Linux dalam 30 Detik
| Oktal | Simbolik | Penggunaan umum |
|---|---|---|
| 400 | r-------- | Kunci privat SSH, hanya-baca |
| 600 | rw------- | File privat, kunci SSH, .env |
| 644 | rw-r--r-- | Halaman web, konfigurasi, sebagian besar file |
| 700 | rwx------ | Direktori privat (~/.ssh) |
| 755 | rwxr-xr-x | Skrip, biner, direktori web |
| 775 | rwxrwxr-x | Direktori berbagi grup |
| 777 | rwxrwxrwx | Semua orang, semuanya — hindari |
| 1777 | rwxrwxrwt | Direktori temp berbagi seperti /tmp |
Aturan praktis: 644 untuk file, 755 untuk direktori, lalu perketat dari situ. Longgarkan sebuah mode hanya ketika ada sesuatu yang konkret rusak, jangan pernah secara preventif.
Model Izin: Pemilik, Grup, Lainnya
Tiga kelas berbagi satu file. Pemilik/owner (biasanya siapa pun yang membuatnya), satu grup, dan lainnya/others, yaitu setiap akun yang bukan pemilik maupun anggota grup. Setiap kelas secara independen mendapat baca, tulis, dan jalankan:
- baca/read (r) — melihat isi sebuah file, atau menampilkan daftar isi sebuah direktori.
- tulis/write (w) — mengubah sebuah file, atau menambah dan menghapus entri di dalam direktori.
- jalankan/execute (x) — menjalankan file sebagai program, atau masuk (
cd) ke sebuah direktori.
Hal yang sering membingungkan: pada sebuah direktori, bit-bit itu bermakna berbeda. r memungkinkan Anda menampilkan nama, w memungkinkan Anda membuat dan menghapus entri di dalamnya, dan x memungkinkan Anda menelusuri, menjangkau file di bawahnya sehingga Anda bisa cd ke dalamnya. Anda bisa memegang r tanpa x pada sebuah direktori, menjalankan ls padanya, dan tetap mendapat “Permission denied” begitu Anda mencoba masuk. Itulah persis alasan direktori diberi 755, bukan 644.
Membaca sebaris ls -l
Jalankan ls -l dan setiap entri diawali sebuah blok sepuluh karakter:
$ ls -l
-rw-r--r-- 1 jack staff 1400 Jul 17 10:00 index.html
drwxr-xr-x 5 jack staff 160 Jul 17 10:00 assets
Baca dari kiri ke kanan. Karakter pertama adalah tipe file, bukan izin: - adalah file biasa, d direktori, l symlink, c atau b perangkat, p named pipe, s socket. Sembilan karakter berikutnya adalah tiga kelompok rwx: pemilik, grup, lainnya. Jadi -rw-r--r-- adalah file biasa di mana pemilik membaca dan menulis (rw-) sementara grup dan lainnya hanya membaca (r-- r--), yaitu 644. drwxr-xr-x adalah direktori dengan 755.
Beberapa sistem menambahkan penanda setelah sembilan bit. Sebuah . di akhir menandakan konteks SELinux, + berarti sebuah ACL menambah aturan di luar bit dasar, dan pada macOS @ menandai extended attribute. Tidak satu pun dari penanda ini mengubah oktal. Abaikan penandanya dan baca sembilan karakternya.
Notasi Oktal: Bagaimana 755 Menjadi rwxr-xr-x
Izin file oktal bekerja karena setiap izin adalah pangkat dua:
- baca = 4
- tulis = 2
- jalankan = 1
Jumlahkan bit yang dipegang sebuah kelas dan Anda mendapat digitnya. rwx adalah 4 + 2 + 1 = 7. r-x adalah 4 + 1 = 5. r-- adalah 4. Jadi rwxr-xr-x, dibaca per tiga, adalah 7 5 5. Lakukan hal yang sama untuk rw-r--r-- dan Anda mendapat 4 + 2, 4, 4 → 644. Itulah seluruh triknya; izin oktal tidak lebih dari tiga penjumlahan independen.
Digit izin 0–7 sekilas
| Digit | Biner | Izin |
|---|---|---|
| 0 | 000 | Tidak ada izin |
| 1 | 001 | Hanya jalankan |
| 2 | 010 | Hanya tulis |
| 3 | 011 | Tulis + jalankan |
| 4 | 100 | Hanya baca |
| 5 | 101 | Baca + jalankan |
| 6 | 110 | Baca + tulis |
| 7 | 111 | Baca + tulis + jalankan |
Oktal sederhananya adalah basis 8, jadi setiap digit mengemas tiga bit tanpa tumpang tindih ke kelas berikutnya. Jika aritmetika posisi terasa berkarat, Konverter Basis Bilangan menunjukkan bagaimana basis 8 dipetakan ke biner dengan cara yang sama seperti setiap digit izin.
chmod 755 vs 644 vs 777: Mode yang Benar-Benar Anda Ketikkan
Berikut perbandingan yang menjawab chmod 755 vs 644 vs 777 secara langsung:
| Oktal | Simbolik | Pemilik | Grup | Lainnya | Penggunaan umum | Risiko |
|---|---|---|---|---|---|---|
| 644 | rw-r--r-- | baca/tulis | baca | baca | File biasa | Default aman |
| 755 | rwxr-xr-x | semua | baca/jalankan | baca/jalankan | Direktori, skrip | Default aman |
| 600 | rw------- | baca/tulis | — | — | File privat, kunci | Sangat aman |
| 700 | rwx------ | semua | — | — | Direktori privat | Sangat aman |
| 775 | rwxrwxr-x | semua | semua | baca/jalankan | Direktori berbagi grup | Grup bisa menulis |
| 777 | rwxrwxrwx | semua | semua | semua | (hindari) | Bisa ditulis siapa saja (world-writable) |
Perbedaan antara 755 dan 644 hanyalah satu bit: jalankan (execute). Direktori, skrip, dan biner butuh x agar bisa dimasuki atau dijalankan, jadi mereka mendarat di 755. File biasa seperti halaman HTML, gambar, atau konfigurasi tidak punya alasan untuk bisa dieksekusi, jadi tetap 644. Mencampuradukkan keduanya adalah penyebab sebagian besar kesalahan izin sehari-hari.
Mengapa 777 berbahaya. Ia menyerahkan akses tulis ke setiap akun di mesin, termasuk akun layanan yang telah disusupi atau proses web yang dibajak. Sebuah document root yang bisa ditulis siapa saja adalah jalur klasik menuju situs yang dirusak atau malware yang disuntikkan, karena siapa pun yang menjangkaunya bisa menimpa kode Anda. Ketika sebuah postingan forum menyuruh Anda chmod 777 sesuatu “agar berfungsi”, masalah sebenarnya hampir selalu adalah kepemilikan (ownership), yang dibahas di bawah.
Pengecualian 1777. /tmp sengaja dibuat bisa ditulis siapa saja, tetapi dengan pengaman. Mode 1777 menambahkan sticky bit, yang memungkinkan semua orang membuat file sekaligus mencegah pengguna menghapus atau mengganti nama file yang bukan miliknya. Itulah alasan direktori temp berbagi aman di 1777 tetapi tidak pernah di 777 polos. Ketik 777 ke Kalkulator chmod dan panel risiko langsung menandainya, sementara 1777 dikenali sebagai pola direktori-berbagi standar.
Mode Numerik vs Simbolik
chmod menerima bit yang sama dengan dua cara.
Mode numerik (absolut) menyatakan hasil lengkapnya. chmod 755 file mengatur seluruh sembilan bit menjadi rwxr-xr-x terlepas dari apa yang ada sebelumnya. Inilah yang Anda inginkan dalam skrip dan deployment, di mana Anda menegakkan keadaan yang sudah pasti benar (known-good).
Mode simbolik (relatif) menggambarkan sebuah perubahan. chmod u+x file membalik satu bit (menambahkan jalankan untuk pemilik) dan membiarkan yang lain tak tersentuh. chmod u=rwx,go=rx file mengatur seluruh kelas secara eksplisit. Mode simbolik cocok untuk penyesuaian sesekali di mana menyatakan ulang seluruh mode akan berlebihan.
# Numerik: menimpa seluruh mode
$ chmod 644 report.txt
# Simbolik: mengubah hanya yang Anda sebutkan
$ chmod u+x deploy.sh # tambahkan jalankan untuk pemilik
$ chmod go-w shared.conf # hapus tulis dari grup dan lainnya
$ chmod u=rw,go=r notes.md # atur tiap kelas secara eksplisit → 644
Satu jebakan pada mode simbolik: chmod +x tanpa kelas disaring oleh umask Anda. Dengan umask umum 022, chmod +x script.sh menambahkan jalankan untuk semua orang, sehingga setara dengan chmod a+x. Di bawah umask yang lebih ketat seperti 077, ia hanya memengaruhi pemilik. Ketika Anda menginginkan hasil yang pasti, sebutkan kelasnya: u+x untuk pemilik saja, a+x untuk semua orang.
Izin Khusus: setuid, setgid dan Sticky Bit
Di luar sembilan bit standar, sebuah digit oktal keempat di depan membawa tiga mode khusus: setuid, setgid, dan sticky bit:
- setuid = 4000 — program berjalan dengan hak istimewa pemilik file, bukan hak pemanggilnya. Beginilah
passwd, yang dimiliki root, memungkinkan pengguna biasa memperbarui basis data kata sandi milik root. - setgid = 2000 — ide yang sama untuk grup. Pada sebuah direktori ia juga membuat file baru mewarisi grup direktori tersebut, yang menjaga proyek berbagi tetap konsisten dimiliki grup yang sama.
- sticky bit = 1000 — pada direktori berbagi, membatasi penghapusan sehingga pengguna hanya bisa menghapus file miliknya sendiri.
/tmpdi 1777 adalah contoh kanoniknya.
$ chmod 4755 /usr/local/bin/mytool # setuid
$ chmod 2775 /srv/shared # setgid pada direktori berbagi
$ chmod 1777 /tmp # sticky bit
$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 59976 Jul 17 10:00 /usr/bin/passwd
Aturan huruf besar-kecil s/S dan t/T
Dalam ls -l, bit khusus menggunakan kembali slot jalankan, dan huruf besar-kecilnya memberitahu apakah jalankan juga aktif. Huruf kecil s (setuid/setgid) atau t (sticky) berarti bit khusus dan jalankan keduanya aktif, kasus normal. Huruf besar S atau T berarti bit khusus aktif tetapi jalankan tidak, yang biasanya merupakan kesalahan, karena bit khusus pada file yang tidak dapat dieksekusi tidak melakukan apa pun yang berguna.
Bandingkan rwsr-xr-x (4755, setuid dengan jalankan, benar) dengan rwSr--r-- (4644, setuid tanpa jalankan, mencurigakan). Setiap kali Anda melihat S atau T kapital, periksa apakah seseorang tidak sengaja menghilangkan bit jalankan.
Jebakan direktori GNU yang tak disebut siapa pun
Inilah perbedaan platform yang hampir setiap tutorial salah pahami. Pada Linux (GNU coreutils), chmod 755 dir numerik tidak menghapus bit setuid atau setgid yang sudah ada pada direktori itu. Ia mempertahankannya. Jika sebuah direktori sudah 2755 (setgid) dan Anda menjalankan chmod 755 dengan harapan memulai dari nol, bit setgid tetap ada, dan direktori itu sebenarnya masih 2755.
Untuk benar-benar menghapusnya, jadilah eksplisit:
$ chmod 00755 dir # bentuk lima digit menolkan digit khusus
$ chmod =755 dir # = menghapus setiap bit yang tidak disebutkan
$ chmod u-s,g-s dir # hapus setuid dan setgid berdasarkan nama
BSD dan macOS melakukan kebalikannya: chmod 755 numerik menghapus bit khusus secara default. Jadi sebuah skrip deploy yang “mereset” izin dengan chmod -R 755 berperilaku berbeda di laptop Mac dibanding di server Linux. Retensi ini didokumentasikan dalam manual GNU coreutils; jika ragu, gunakan bentuk lima digit atau u-s,g-s agar hasilnya identik di mana pun.
umask: Apa yang Didapat File yang Baru Dibuat
Anda jarang chmod setiap file secara manual; sebagian besar mendapat mode-nya saat pembuatan, dan umask yang memutuskannya. Sebuah umask adalah sekumpulan bit untuk dimatikan. File baru dimulai dari basis 666 dan direktori baru dari 777, lalu umask menutupi (mask) bit-bitnya:
effective mode = base & ~umask
File dimulai di 666, bukan 777, karena file yang benar-benar baru tidak semestinya bisa dieksekusi secara default. Bit itu ditambahkan dengan sengaja lewat chmod +x.
| umask | File baru | Direktori baru | Arti |
|---|---|---|---|
| 022 | 644 | 755 | Default — lainnya membaca, tidak menulis |
| 077 | 600 | 700 | Privat untuk pemilik |
| 002 | 664 | 775 | Kolaborasi grup |
Kerjakan default 022 secara manual: 666 & ~022 = 666 & 755 = 644, dan 777 & ~022 = 755. Periksa nilai Anda saat ini dengan umask, dan atur default sesi dengan, misalnya, umask 077 pada mesin di mana tak satu pun boleh terbaca oleh grup atau publik.
chmod vs chown: Izin vs Kepemilikan
chmod dan chown menjawab pertanyaan yang berbeda. chmod mengubah apa yang boleh dilakukan pemilik, grup, dan lainnya: bit izin. chown mengubah siapa sebenarnya pemilik dan grupnya. Menggapai 777 sering kali merupakan masalah kepemilikan yang menyamar sebagai masalah izin.
Kasus klasik: sebuah web server yang berjalan sebagai www-data tidak bisa menulis ke direktori unggahannya. chmod 777 membuat error itu hilang dengan membiarkan seluruh dunia menulis, dan meninggalkan sebuah lubang. Perbaikan yang benar menetapkan kepemilikan kepada proses yang membutuhkannya:
# Salah: membuka direktori ke setiap akun di mesin
$ sudo chmod -R 777 /var/www/uploads
# Benar: berikan ke pengguna web, pertahankan mode yang ketat
$ sudo chown -R www-data:www-data /var/www/uploads
$ sudo find /var/www/uploads -type d -exec chmod 755 {} +
$ sudo find /var/www/uploads -type f -exec chmod 644 {} +
Urutan diagnosis ketika sesuatu tak terduga tidak terbaca: jalankan ls -l untuk melihat siapa pemiliknya dulu, dekode mode-nya kedua, lalu putuskan apakah perbaikannya adalah chown, chmod, atau menambahkan pengguna ke sebuah grup.
Izin rekursif yang dilakukan dengan benar
Sebuah chmod -R 755 . menyeluruh menandai setiap file biasa sebagai dapat dieksekusi, yang paling baik hanya gangguan dan paling buruk adalah risiko diam-diam. Alih-alih, rekursikan berdasarkan tipe:
$ find . -type d -exec chmod 755 {} + # direktori → 755
$ find . -type f -exec chmod 644 {} + # file → 644
GNU chmod menawarkan pintasan satu baris dengan X kapital, yang menambahkan jalankan hanya ke direktori dan ke file yang sudah membawa bit jalankan:
$ chmod -R u+rwX,go+rX .
Kalkulator chmod menghasilkan perintah find khusus-direktori dan khusus-file untuk mode apa pun yang Anda pilih, sehingga Anda bisa menyalin pemisahan yang benar alih-alih menggunakan -R polos.
Praktik Terbaik Izin File Linux
- Berikan hak paling minimal yang tetap berfungsi. Mulai dari mode paling ketat dan buka hanya yang rusak. Setiap bit tulis tambahan adalah permukaan serangan (attack surface).
- Jadikan 644 default untuk file di dalam direktori 755. Pasangan ini melayani hampir setiap web root dan checkout repositori. File biasa jarang butuh jalankan; direktori selalu butuh.
- Jangan pernah membiarkan 777 pada apa pun yang bisa dijangkau server. Jika beberapa akun harus menulis, gunakan grup berbagi dengan 775 atau 2775 (setgid menjaga kepemilikan grup tetap konsisten) alih-alih membuka mode ke seluruh dunia.
- Pertahankan kunci privat SSH di 600, atau 400 begitu final. OpenSSH langsung menolak kunci privat yang bisa dibaca grup atau publik. Lihat manual OpenSSH untuk persyaratan file-kunci yang persis. Kunci publik dan
authorized_keystidak apa-apa di 644. - Lapisi mode file dengan kontrol lain. Izin adalah fondasinya; padukan dengan basic auth dari Generator htpasswd ketika sebuah folder butuh login, dan perlakukan mode file sebagai satu bagian dari gambaran yang dibahas dalam panduan Dasar-Dasar Keamanan Web kami.
FAQ
Apa arti d atau l di awal drwxr-xr-x?
Karakter pertama pada sebaris ls -l adalah tipe file, bukan izin. d menandai direktori, l symlink, - file biasa, c atau b perangkat, p named pipe, dan s socket. Hanya sembilan karakter setelahnya yang mengkodekan bit baca, tulis, dan jalankan yang sebenarnya.
Apa perbedaan antara s huruf kecil dan S huruf besar dalam izin?
Baik s huruf kecil maupun S huruf besar keduanya berarti bit setuid atau setgid aktif. Huruf kecil s berarti jalankan juga aktif, kasus kerja normal. Huruf besar S berarti bit khusus aktif tetapi jalankan mati (seperti pada 4644), yang hampir selalu merupakan kesalahan konfigurasi, karena bit khusus tak berarti tanpa jalankan.
Apa itu umask dan bagaimana ia menentukan izin default?
umask adalah kumpulan bit izin yang dimatikan ketika sebuah file dibuat. File baru dimulai di basis 666 dan direktori di 777, lalu effective = base & ~umask menghapus bit yang di-mask. Default 022 menghasilkan file 644 dan direktori 755; jalankan umask untuk melihat milik Anda, atau umask 077 untuk default yang lebih privat.
Kapan saya harus menggunakan 400 atau 700 alih-alih 644 atau 755?
Gunakan 400 atau 700 ketika sebuah file atau direktori harus tetap sepenuhnya privat. 400 (r--------) adalah file privat hanya-baca, ideal untuk kunci privat SSH final yang tak pernah Anda edit. 700 (rwx------) adalah direktori yang hanya bisa dimasuki pemilik, seperti ~/.ssh atau ~/.gnupg. Tidak seperti 644 dan 755, keduanya tidak memberikan apa pun kepada orang lain.
Mengapa saya bisa menampilkan daftar isi direktori tetapi tidak bisa cd ke dalamnya?
Izin direktori memisahkan penampilan daftar dari penelusuran: bit r memungkinkan Anda menampilkan nama, bit x memungkinkan Anda masuk. Sebuah direktori dengan r tetapi tanpa x (direktori 644) menampilkan namanya di bawah ls namun memblokir cd dan segala akses ke file di dalamnya. Tambahkan jalankan (jadikan 755) agar bisa dimasuki.
Apakah izin file bekerja sama di macOS seperti di Linux?
Izin file berbagi model inti rwx dan oktal yang sama di keduanya, karena keduanya mengikuti POSIX, tetapi detailnya berbeda. BSD dan macOS menghapus setuid/setgid sebuah direktori pada chmod numerik secara default, sementara Linux mempertahankannya. Membaca sebuah mode juga berbeda: stat -c '%a' file di Linux, stat -f '%Lp' file di macOS, dan macOS menambahkan ACL dan file flag.
Bisakah saya mengubah izin file tanpa baris perintah?
Anda bisa menghitung dan mendekode izin tanpa terminal. Kalkulator chmod gratis memungkinkan Anda mencentang matriks izin, mengetik nilai oktal, atau menempel sebaris ls -l, lalu menyalin kembali perintah chmod yang persis. Menerapkannya ke file nyata tetap memerlukan perintah itu di server, atau klien GUI atau FTP yang menampilkan bidang izin.