Memahami model izin Linux — read, write, execute — untuk owner, group, dan others, menguasai chmod octal dan simbolik, chown, umask, serta special bits SUID, SGID, dan sticky bit, sampai mengamankan SSH key dan direktori berbagi secara nyata.

Setelah di episode 8 sebelumnya kita membahas pengelolaan user & group — bagaimana menciptakan identitas dan mengelompokkannya — pada episode kali ini kita akan membahas apa yang boleh dilakukan oleh identitas tersebut terhadap file: file permissions & ownership.
Kenapa topik ini penting? User dan grup hanya separuh dari model keamanan Linux. Separuh lainnya adalah aturan: siapa yang boleh membaca file konfigurasi berisi kredensial? Siapa yang boleh menjalankan script? Siapa yang boleh menulis ke direktori bersama? Tanpa pemahaman permission, kalian akan terjebak dalam dua ekstrem: terlalu ketat sehingga aplikasi rusak, atau terlalu longgar (chmod 777 di mana-mana) sehingga server menjadi pintu terbuka.
Di episode ini kita akan membahas: pertama, model izin dasar dan bit read/write/execute; kedua, chmod octal vs simbolik; ketiga, chown dan chgrp untuk kepemilikan; keempat, umask sebagai nilai default; kelima, special bits SUID, SGID, dan sticky bit; terakhir, studi kasus mengamankan file SSH key dan direktori berbagi.
Setiap file di Linux punya pemilik (owner), grup (group), dan kategori lainnya (others). Untuk tiap kategori, ada tiga bit izin:
| Bit | Nilai | Efek pada File | Efek pada Direktori |
|---|---|---|---|
r (read) | 4 | Melihat isi file | Melihat daftar nama file |
w (write) | 2 | Mengubah isi file | Membuat/hapus/rename file di dalamnya |
x (execute) | 1 | Menjalankan file | Masuk (cd) ke direktori |
Nilai octal (4, 2, 1) bukan kebetulan — ini sistem biner: kombinasi bit dijumlahkan menjadi satu digit 0–7. 7 = 4+2+1 (rwx), 6 = 4+2 (rw-), 5 = 4+1 (r-x), 4 = r--.
ls -l /etc/hosts-rw-r--r-- 1 root root 204 Agu 1 08:00 /etc/hostsMari bedah output -rw-r--r--. Karakter pertama menandakan tipe file (- file biasa, d direktori, l symlink). Sembilan karakter berikutnya adalah tiga triplet: rw- untuk owner (root), r-- untuk group (root), r-- untuk others. Jadi /etc/hosts bisa dibaca semua orang, tapi hanya root yang bisa menulis.
statJika ls -l adalah "ringkasan", stat adalah "kartu lengkap" — menampilkan permission dalam bentuk simbolik sekaligus numerik, plus metadata lain:
stat -c "%A %a %U:%G" /etc/hosts-rw-r--r-- 644 root:rootFormat %A menampilkan string rwx, %a menampilkan angka octal (644), %U:%G menampilkan owner:group. Ketika kalian perlu memastikan "file ini 600 milik siapa", stat -c "%a %U:%G" menjawab dalam satu baris — jauh lebih mudah dibaca daripada menebak dari ls -l.
Note
Direktori memperlakukan bit secara berbeda — ini sumber kebingungan terbesar. Read pada direktori berarti bisa melihat daftar nama file; execute berarti bisa masuk ke direktori dan mengakses file di dalamnya. Banyak admin baru memberi r tanpa x pada direktori dan heran mengapa isinya tidak bisa diakses. Untuk direktori yang bisa dijelajahi, biasanya kalian butuh r-x (5) atau rwx (7). Ingat: pada direktori, x adalah "izin masuk", bukan "menjalankan".
chmod: Mengubah Permissionchmod mengubah bit izin. Ada dua gaya: octal (angka) dan simbolik (huruf). Keduanya menghasilkan hal yang sama — pilih yang lebih mudah dibaca pada konteksnya.
chmod 755 skrip.sh
chmod 644 konfig.conf
chmod 600 rahasia.txtTiga digit octal masing-masing untuk owner, group, others: 755 = rwxr-xr-x, 644 = rw-r--r--, 600 = rw-------. Perhatikan bahwa pemilik (kalian) harus punya write pada file untuk bisa mengubah isinya di kemudian hari — itu sebabnya 600 untuk file yang kalian tulis, 755 untuk executable yang boleh dijalankan orang lain.
Caution
chmod 777 (rwx untuk semua orang) adalah solusi instan yang paling sering diambil saat aplikasi "tidak bisa menulis", dan paling sering menjadi pintu masuk peretasan. Sebelum jatuh ke 777, tanyakan dua hal: (1) siapa yang benar-benar perlu mengakses? — jawabannya biasanya cukup 755/644; (2) mengapa aplikasi butuh menulis? — mungkin karena proses berjalan dengan user yang salah. 777 menyelesaikan gejala, bukan masalah, sambil membuka akses ke semua orang di sistem.
Simbolik bekerja dengan u (user/owner), g (group), o (others), a (all), plus operator +, -, =:
| Ekspresi | Arti |
|---|---|
u+x | Tambah execute untuk owner |
g-w | Hapus write untuk group |
o= | Set izin others menjadi kosong |
a+r | Tambah read untuk semua |
go-x | Hapus execute untuk group dan others |
chmod u+x skrip.sh
chmod g-w konfig.conf
chmod go= rahasia.txtContoh diff berikut menunjukkan perintah untuk membuat script executable — sebelum dan sesudah:
chmod +x deploy.sh
chmod u+x deploy.shchmod +x memberi execute ke semua kategori (a+x); chmod u+x membatasinya ke owner saja — pilihan yang lebih konservatif dan umum dipakai.
chown dan chgrp: Mengubah KepemilikanIzin hanya berarti jika kepemilikan benar. chown mengubah owner dan group; chgrp mengubah group saja:
sudo chown budi:webapps /var/www/proyek
sudo chown -R budi:webapps /var/www/proyek| Perintah | Efek |
|---|---|
chown budi file | Owner menjadi budi, group tidak berubah |
chown budi:webapps file | Owner budi, group webapps |
chown -R | Berlaku rekursif ke seluruh isi direktori |
chgrp webapps file | Hanya group yang berubah |
umask: Menentukan Default PermissionSaat kalian membuat file, ia tidak lahir dengan permission sembarang — nilai default ditentukan oleh umask. umask adalah "topeng" yang mengurangkan bit izin dari nilai dasar:
umask
touch baru.txt
ls -l baru.txt0022
-rw-r--r-- 1 dev dev 0 Agu 2 09:00 baru.txtDengan umask 0022, file baru lahir 644 (666 - 022 = rw-r--r--) dan direktori baru 755 (777 - 022). Logika dasarnya: 666 untuk file (tidak pernah executable secara default), 777 untuk direktori.
Tip
Nilai umask menentukan "kebocoran" default kalian. umask 0022 (standar) membuat file terbaca semua orang; umask 0027 membuat group bisa baca tapi others tidak sama sekali — pilihan lebih ketat untuk mesin multi-user. umask 0077 membuat semuanya privat sepenuhnya. Untuk akun yang menangani kredensial, pertimbangkan umask 0077. Ubah di ~/.bashrc agar permanen: umask 0027.
Tiga bit istimewa melengkapi model izin dasar — masing-masing mengubah perilaku executable atau direktori.
| Bit | Notasi Simbolik | Efek |
|---|---|---|
| SUID (set user ID) | s pada bit owner | File dijalankan dengan hak pemiliknya, bukan si penjalar |
| SGID (set group ID) | s pada bit group | File berjalan dengan hak grup; direktori mewariskan grup ke file baru |
| Sticky bit | t pada bit others | Di direktori: hanya pemilik file (atau root) yang bisa menghapus |
Contoh paling dikenal SUID adalah passwd — ditampilkan sebagai -rwsr-xr-x. File ini dimiliki root, tetapi user biasa boleh menjalankannya; berkat SUID, proses berjalan dengan hak root agar bisa menulis ke /etc/shadow. Begitulah user bisa mengganti password sendiri tanpa jadi root.
chmod 4755 alat-ku # SUID
chmod 2755 alat-ku # SGID
chmod 1777 /tmp # sticky bitSticky bit adalah yang paling sering kalian lihat — cek /tmp:
drwxrwxrwt 1 root root 4096 Agu 2 09:00 /tmpt di ujung menandakan sticky bit aktif: semua orang bisa membuat file di /tmp, tapi hanya pemilik file-nya (atau root) yang bisa menghapus — mencegah user A menghapus file user B di direktori bersama.
Warning
SUID adalah senjata bermata dua: file SUID root yang dapat ditulis (misalnya script yang bisa dimodifikasi user biasa) adalah jalur eskalasi privilege paling klasik di Linux. Jangan pernah menyetel SUID pada script shell, dan jangan pernah meng-copy binary SUID untuk "mempermudah" akses. Sebelum menyetel SUID, tanyakan: apakah ada cara lain dengan hak minimal? Jawabannya hampir selalu ada — biasanya dengan sudoers yang dibatasi (akan dibahas di episode hardening).
Sekarang mari terapkan semua konsep dalam dua skenario nyata.
chmod 600SSH menolak menggunakan private key dengan permission yang terlalu longgar — dan ini sengaja, demi keamanan. Saat key baru dibuat, pastikan izinnya benar:
chmod 600 ~/.ssh/id_ed25519
ls -l ~/.ssh/id_ed25519600 berarti hanya owner yang bisa membaca/menulis — kredensial tidak terbaca user lain. Jika key tidak sengaja dibuat dengan 644, ssh akan menolak dengan pesan Permissions too open; chmod 600 adalah obatnya.
Grup webapps (dari episode 8) ingin berbagi direktori dengan rule: semua anggota bisa menulis, file baru otomatis bergrup webapps, dan hanya pemilik yang bisa menghapus file-nya sendiri. Rangkaian perintahnya:
sudo mkdir -p /srv/webapps
sudo chown root:webapps /srv/webapps
sudo chmod 2750 /srv/webappsBedah ketiga baris: chown root:webapps membuat grup pemilik webapps; chmod 2750 berarti 2 (SGID) + rwxr-x--- — grup bisa masuk dan menulis, others tidak bisa sama sekali; SGID memastikan setiap file baru di dalamnya otomatis bergrup webapps, sehingga semua anggota bisa saling bekerja tanpa menunggu admin mengubah grup tiap file.
Tip
Aturan praktis yang menuntun keputusan izin kalian: paling sedikit hak yang diperlukan (principle of least privilege). File konfigurasi yang hanya dibaca aplikasi: 640 atau 600. Script yang dijalankan orang: 755. Direktori kerja bersama: 2770 (SGID + rwx grup). Direktori umum seperti /tmp: 1777. Jika sebuah nilai terasa "berlebihan", mungkin kalian sedang membuka pintu yang tidak perlu. Periksa juga kepemilikan: izin yang benar pada user yang salah tetap tidak aman.
| Kesalahan | Gejala | Solusi |
|---|---|---|
chmod 777 di mana-mana | Semua user bisa mengubah file penting | Gunakan grup + 770/2770; cari akar masalahnya |
| Bit execute pada file non-script | Tidak berbahaya tapi berantakan | Gunakan 644/640 untuk data & konfigurasi |
Lupa x pada direktori | File "tidak ditemukan" meski bisa di-list | Beri r-x minimal untuk bisa masuk |
| SSH key terlalu longgar | Permissions too open | chmod 600 ~/.ssh/id_* |
chmod -R 777 pada direktori berisi kredensial | Kredensial terbaca semua user | Sempitkan izin, jangan pernah pakai 777 |
Menyimpan key/config baru tanpa umask yang sesuai | File lahir 644, terbaca orang lain | Perketat umask atau chmod langsung |
| Menyetel SUID pada script | Celah eskalasi privilege | Hindari; gunakan sudoers terbatas |
Pada episode 9 ini, kita telah membahas model izin lengkap Linux: bit read/write/execute untuk owner, group, dan others; chmod dalam gaya octal dan simbolik; chown/chgrp untuk kepemilikan; umask sebagai nilai default saat file lahir; special bits SUID, SGID, dan sticky bit; serta dua studi kasus nyata — mengamankan SSH key dan membangun direktori berbagi yang aman.
Inti yang harus dibawa pulang:
rwx × 3 kategori — dan arti x berbeda untuk file vs direktori.755, 600) ringkas; simbolik (u+x, g-w) eksplisit — kuasai keduanya.777 menyelesaikan gejala, bukan masalah — selalu cari izin seminimal mungkin.umask menentukan permission bawaan — 0027/0077 jauh lebih ketat dari 0022.Dengan episode ini, fondasi administrasi Linux kalian — perintah dasar, pipeline, text processing, backup, user/grup, dan permission — sudah lengkap. Di episode 10 selanjutnya, kita akan beralih ke Package Management — mengenal apt, dnf, dan perbedaan ekosistem distribusi, memahami konsep repository, mencari dan menginstal software, hingga mengelola update sistem secara aman. Pastikan tetap semangat, karena dari sini kalian mulai merakit server yang siap produksi!