Permission (Izin File)
Model Permission UNIX
Setiap file dan direktori di Linux memiliki tiga set izin untuk tiga kategori:
| Kategori | Simbol | Deskripsi |
|---|---|---|
| User (owner) | u |
Pemilik file |
| Group | g |
Anggota group pemilik |
| Others | o |
Semua user lain |
Setiap kategori memiliki tiga jenis izin:
| Izin | File | Direktori |
|---|---|---|
r (read) |
Membaca isi file | List isi direktori (ls) |
w (write) |
Memodifikasi file | Membuat/hapus file di direktori |
x (execute) |
Menjalankan file | Masuk ke direktori (cd) |
Format ls -l:
-rwxr-xr-- 1 alice developers 2048 Jul 21 10:00 script.sh
| Bagian | Makna |
|---|---|
- |
Tipe file (-=file, d=dir,
l=link) |
rwx |
Owner: read+write+execute |
r-x |
Group: read+execute |
r-- |
Others: read-only |
chmod - Change Mode
Mode Numeric (Octal):
| Nilai | Izin |
|---|---|
| 4 | read |
| 2 | write |
| 1 | execute |
| 7 (4+2+1) | rwx |
| 6 (4+2) | rw- |
| 5 (4+1) | r-x |
chmod 755 script.sh # rwxr-xr-x - owner full, group/other read+execute
chmod 644 file.txt # rw-r--r-- - owner read+write, group/other read
chmod 700 private/ # rwx------ - hanya owner
chmod 600 .ssh/id_rsa # rw------- - hanya owner (wajib untuk SSH key)
Mode Symbolic:
chmod u+x script.sh # Tambah execute untuk owner
chmod g-w file.txt # Hapus write untuk group
chmod o=r private.txt # Set others menjadi read-only
chmod a+x script.sh # Tambah execute untuk semua (ugo)
chmod u=rwx,g=rx,o= script.sh # Sama dengan 750
chown dan chgrp
sudo chown alice:developers file.txt # Ubah owner dan group
sudo chown alice file.txt # Ubah owner saja
sudo chown :developers file.txt # Ubah group saja
sudo chown -R alice:www-data /var/www # Rekursif untuk direktori
chgrp adalah alternatif khusus untuk mengubah group:
sudo chgrp www-data /var/www/html
umask - Default Permission
umask menentukan izin default saat file atau direktori
dibuat. umask adalah nilai yang dikurangkan dari base
permission.
| Base | File | Direktori |
|---|---|---|
| Full | 666 (rw-rw-rw-) | 777 (rwxrwxrwx) |
Rumus: default = base & ~umask
umask # Lihat umask saat ini (biasanya 022)
umask 077 # Set umask ketat: file 600, direktori 700
Contoh umask umum:
| umask | File | Direktori | Penggunaan |
|---|---|---|---|
| 022 | 644 (rw-r--r--) | 755 (rwxr-xr-x) | Default umum |
| 027 | 640 (rw-r-----) | 750 (rwxr-x---) | Web server |
| 077 | 600 (rw-------) | 700 (rwx------) | Privat ketat |
Special Permissions
SUID (4xxx) - Set User ID
File dijalankan dengan hak pemilik file, bukan user yang menjalankan.
chmod u+s executable # Symbolic: 4755
chmod 4755 executable # Numeric
Contoh: /usr/bin/passwd memiliki SUID root agar user
biasa bisa mengubah password di /etc/shadow.
SGID (2xxx) - Set Group ID
- File: dijalankan dengan hak group pemilik file.
- Direktori: file baru di dalamnya mewarisi group direktori, bukan group user.
chmod g+s directory # Symbolic: 2755
chmod 2755 directory
SGID pada direktori sangat berguna untuk shared directory.
Sticky Bit (1xxx)
Hanya pemilik file, pemilik direktori, atau root yang bisa menghapus file - meskipun direktori memiliki write permission untuk semua.
chmod +t /tmp # Symbolic: 1777
chmod 1777 /tmp
Contoh: /tmp memiliki sticky bit (drwxrwxrwt).
Kombinasi:
chmod 6755 script.sh # SUID + SGID + rwxr-xr-x
chmod 1777 /shared # Sticky bit + full access
Permission Checking Order
Saat user mengakses file, kernel memeriksa izin dalam urutan berikut:
- Jika UID user = UID file owner →
gunakan izin owner (
u). Jika tidak cukup → denied. - Jika user adalah anggota group →
gunakan izin group (
g). Jika tidak cukup → denied. - Gunakan izin others (
o).
Konsekuensi: jika owner sebuah file tidak memiliki izin execute
(rw-------), maka owner tetap tidak bisa mengeksekusi
file tersebut meskipun group atau others punya izin execute. Urutan
pemeriksaan berhenti di langkah pertama.
Untuk direktori: izin x (execute) diperlukan untuk bisa
cd ke direktori dan mengakses file di dalamnya. Izin
r tanpa x hanya bisa melihat daftar file
tanpa bisa masuk.