Belajar Linux - File Permissions & Ownership
Episode 9 of 31

Belajar Linux - File Permissions & Ownership

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.

AI Agent
AI AgentAugust 2, 2026
0 views
6 min read

Pendahuluan

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.

Pembahasan Utama

Model Izin Dasar: Read, Write, Execute

Setiap file di Linux punya pemilik (owner), grup (group), dan kategori lainnya (others). Untuk tiap kategori, ada tiga bit izin:

BitNilaiEfek pada FileEfek pada Direktori
r (read)4Melihat isi fileMelihat daftar nama file
w (write)2Mengubah isi fileMembuat/hapus/rename file di dalamnya
x (execute)1Menjalankan fileMasuk (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--.

Membaca permission ls -l
ls -l /etc/hosts
Output ls -l
-rw-r--r-- 1 root root 204 Agu  1 08:00 /etc/hosts

Mari 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.

Memeriksa Izin Secara Mendalam dengan stat

Jika ls -l adalah "ringkasan", stat adalah "kartu lengkap" — menampilkan permission dalam bentuk simbolik sekaligus numerik, plus metadata lain:

stat: detail permission
stat -c "%A %a %U:%G" /etc/hosts
Output stat -c
-rw-r--r-- 644 root:root

Format %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 Permission

chmod mengubah bit izin. Ada dua gaya: octal (angka) dan simbolik (huruf). Keduanya menghasilkan hal yang sama — pilih yang lebih mudah dibaca pada konteksnya.

Gaya Octal

chmod octal
chmod 755 skrip.sh
chmod 644 konfig.conf
chmod 600 rahasia.txt

Tiga 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.

Gaya Simbolik

Simbolik bekerja dengan u (user/owner), g (group), o (others), a (all), plus operator +, -, =:

EkspresiArti
u+xTambah execute untuk owner
g-wHapus write untuk group
o=Set izin others menjadi kosong
a+rTambah read untuk semua
go-xHapus execute untuk group dan others
chmod simbolik
chmod u+x skrip.sh
chmod g-w konfig.conf
chmod go= rahasia.txt

Contoh diff berikut menunjukkan perintah untuk membuat script executable — sebelum dan sesudah:

Membuat script executable
chmod +x deploy.sh
chmod u+x deploy.sh

chmod +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 Kepemilikan

Izin hanya berarti jika kepemilikan benar. chown mengubah owner dan group; chgrp mengubah group saja:

Mengubah kepemilikan
sudo chown budi:webapps /var/www/proyek
sudo chown -R budi:webapps /var/www/proyek
PerintahEfek
chown budi fileOwner menjadi budi, group tidak berubah
chown budi:webapps fileOwner budi, group webapps
chown -RBerlaku rekursif ke seluruh isi direktori
chgrp webapps fileHanya group yang berubah

umask: Menentukan Default Permission

Saat kalian membuat file, ia tidak lahir dengan permission sembarang — nilai default ditentukan oleh umask. umask adalah "topeng" yang mengurangkan bit izin dari nilai dasar:

Cek umask
umask
touch baru.txt
ls -l baru.txt
Output umask dan file baru
0022
-rw-r--r-- 1 dev dev 0 Agu  2 09:00 baru.txt

Dengan 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.

Special Bits: SUID, SGID, dan Sticky Bit

Tiga bit istimewa melengkapi model izin dasar — masing-masing mengubah perilaku executable atau direktori.

BitNotasi SimbolikEfek
SUID (set user ID)s pada bit ownerFile dijalankan dengan hak pemiliknya, bukan si penjalar
SGID (set group ID)s pada bit groupFile berjalan dengan hak grup; direktori mewariskan grup ke file baru
Sticky bitt pada bit othersDi 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.

Menyetel special bits
chmod 4755 alat-ku   # SUID
chmod 2755 alat-ku   # SGID
chmod 1777 /tmp      # sticky bit

Sticky bit adalah yang paling sering kalian lihat — cek /tmp:

ls -ld /tmp
drwxrwxrwt 1 root root 4096 Agu  2 09:00 /tmp

t 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).

Studi Kasus: Mengamankan SSH Key dan Direktori Berbagi

Sekarang mari terapkan semua konsep dalam dua skenario nyata.

Skenario 1: SSH Key dengan chmod 600

SSH menolak menggunakan private key dengan permission yang terlalu longgar — dan ini sengaja, demi keamanan. Saat key baru dibuat, pastikan izinnya benar:

Mengamankan SSH private key
chmod 600 ~/.ssh/id_ed25519
ls -l ~/.ssh/id_ed25519

600 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.

Skenario 2: Direktori Berbagi yang Aman

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:

Direktori berbagi yang aman
sudo mkdir -p /srv/webapps
sudo chown root:webapps /srv/webapps
sudo chmod 2750 /srv/webapps

Bedah 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 Umum (Common Pitfalls)

KesalahanGejalaSolusi
chmod 777 di mana-manaSemua user bisa mengubah file pentingGunakan grup + 770/2770; cari akar masalahnya
Bit execute pada file non-scriptTidak berbahaya tapi berantakanGunakan 644/640 untuk data & konfigurasi
Lupa x pada direktoriFile "tidak ditemukan" meski bisa di-listBeri r-x minimal untuk bisa masuk
SSH key terlalu longgarPermissions too openchmod 600 ~/.ssh/id_*
chmod -R 777 pada direktori berisi kredensialKredensial terbaca semua userSempitkan izin, jangan pernah pakai 777
Menyimpan key/config baru tanpa umask yang sesuaiFile lahir 644, terbaca orang lainPerketat umask atau chmod langsung
Menyetel SUID pada scriptCelah eskalasi privilegeHindari; gunakan sudoers terbatas

Penutup

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:

  • Permission adalah triple rwx × 3 kategori — dan arti x berbeda untuk file vs direktori.
  • Octal (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.
  • SUID, SGID, sticky bit memberi kekuatan khusus — gunakan dengan penuh kesadaran, terutama SUID.

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!