Di Linux, akses ke file dikelola melalui izin file, atribut, dan kepemilikan. Ini memastikan bahwa hanya pengguna dan proses yang sah yang dapat mengakses file dan direktori.

Tutorial ini mencakup cara menggunakan perintah chmod untuk mengubah izin akses file dan direktori.

Penjelasan Izin Akses File di Linux

Sebelum melangkah lebih jauh, mari kita membahas tentang model dasar izin pada sistem Linux.

Di Linux, setiap file dikaitkan dengan owner dan grup dengan izin hak akses untuk tiga kelas user yang berbeda:

  • Owner File
  • Member group.
  • Others (user dari layanan tertentu atau non-user (untuk semua orang)).

Status kepemilikan file dapat diubah menggunakan perintah chown dan chgrp.

Ada tiga jenis izin file yang berlaku untuk setiap kelas:

  • Izin read (membaca).
  • Izin write (menulis).
  • Izin execute (eksekusi).

Konsep ini memungkinkan Anda untuk menentukan user mana saja yang diizinkan membaca file, menulis ke file, atau menjalankan file.

Izin file dapat dilihat menggunakan perintah ls:

ls -l filename.txt
-rw-r--r-- 12 linuxid users 12.0K Apr  8 21:52 filename.txt
|[-][-][-]-   [------] [---]
| |  |  | |      |       |
| |  |  | |      |       +-----------> 7. Group
| |  |  | |      +-------------------> 6. Owner
| |  |  | +--------------------------> 5. Alternate Access Method
| |  |  +----------------------------> 4. Izin Akses Other 
| |  +-------------------------------> 3. Izin Akses Group 
| +----------------------------------> 2. Izin Akses Owner 
+------------------------------------> 1. Tipe File

Karakter pertama menunjukkan tipe file. Ini bisa berupa file biasa (-), direktori (d), symbolic link (l), atau jenis file khusus lainnya.

Sembilan karakter berikutnya mewakili hak akses file, masing-masing tiga triplet dari tiga karakter. Triplet pertama menunjukkan izin untuk owner (pemilik), yang kedua izin group, dan triplet terakhir menunjukkan izin untuk semua non-user. Izin dapat memiliki arti berbeda tergantung pada jenis file.

Dalam contoh di atas (rw-r--r--) berarti hanya pemilik file yang dapat membaca (read) dan menulisi (write) file (rw-), grup dan yang lainnya hanya memiliki izin baca (read) (r--).

Masing-masing dari tiga izin triplet dapat dirancang dari karakter berikut dan memiliki efek yang berbeda, tergantung pada apakah mereka diatur ke file atau ke direktori:

Pengaruh Izin Akses pada File

Level IzinKarakterArti dari karakter
Read-File tidak dapat dibaca. Anda tidak dapat melihat konten file.
rFile dapat dibaca
Write-File tidak dapat diubah atau dimodifikasi.
wFile dapat diubah atau dimodifikasi.
Execute-File tidak dapat di eksekusi.
xFile dapat di eksekusi.
sJika ditemukan di triplet user maka karakter s mengatur bit setuid. Jika ditemukan di triplet group, itu mengatur bit setgid. Ini juga berarti bahwa flag x di set .
Ketika flag setuid atau setgid ditetapkan pada file yang dapat dieksekusi, file dieksekusi dengan pemilik file dan / atau hak istimewa group.
SSama seperti s tetapi flag x tidak disetel. Flag ini jarang digunakan pada file.
tJika ditemukan di triplet others  ia mengatur sticky bit.
Ini juga berarti bahwa x flag disetel. flag ini tidak berguna untuk file.
TSama dengan t tetapi flag x tidak disetel. flag ini tidak berguna untuk file.

Pengaruh Izin Akses pada Direktori (Folder)

Di Linux, Direktori adalah jenis file khusus yang berisi file dan direktori lain.

Level IzinKarakterArti Dari Karakter
Read-Konten direktori tidak dapat ditampilkan.
rKonten direktori dapat ditampilkan.
(mis. Anda dapat melihat daftar file di dalam direktori dengan perintah ls)
Write-Konten direktori tidak dapat diubah.
wIsi direktori dapat diubah.
(mis. Anda dapat membuat file baru, menghapus file .. dll)
Execute-Direktori tidak dapat diubah.
xDirektori dapat dinavigasi menggunakan perintah cd.
sJika ditemukan di triplet user, maka mengatur bit setuid. Jika ditemukan di triplet group, maka menetapkan bit setgid. Ini juga berarti bahwa x flag disetel. Ketika flag setgid diatur pada direktori, file-file baru yang dibuat di dalamnya mewarisi group ID (GID) direktori  alih-alih ID grup utama dari user yang membuat file.
setuid tidak berpengaruh pada direktori.
SSama seperti s tetapi flag x tidak disetel. Flag ini tidak berguna di direktori.
tJika ditemukan di triplet others,  ia mengatur sticky bit.
Ini juga berarti bahwa flag x di gunakan. Ketika sticky bit di terapkan pada direktori, hanya pemilik file, pemilik direktori, atau user administratif yang dapat menghapus atau mengganti nama file dalam direktori.
TSama dengan t tetapi flag x tidak diset. flag ini tidak berguna ditempatkan di direktori.

Menggunakan Perintah chmod

Perintah chmod mengambil bentuk umum berikut:

chmod [OPTIONS] MODE FILE...

Perintah chmod memungkinkan Anda untuk mengubah izin pada file menggunakan mode simbolik atau numerik atau file referensi. Kami akan menjelaskan mode secara lebih rinci nanti di artikel ini. Perintah dapat menerima satu atau lebih file atau direktori yang dipisahkan oleh spasi sebagai argumen.

Hanya root, owner file atau extra dengan hak sudo yang dapat mengubah izin file. Berhati-hatilah saat menggunakan chmod, terutama saat mengubah izin secara rekursif.

Metode Simbolik (Teks)

Sintaks perintah chmod saat menggunakan mode simbolik memiliki format berikut:

chmod [OPTIONS] [ugoa…][-+=]perms…[,…] FILE...

Set flag pertama ([ugoa…]), flag user, menentukan kelompok user mana yang hak akses file-nya akan diubah.

  • u – owner dari file.
  • g – users yang merupakan anggota grup.
  • o – Semua pengguna lain.
  • a – Semua user, identik dengan ugo.

Jika flag user dihilangkan, maka beralih pengaturan standar yaitu a dan izin yang diatur oleh umask tidak terpengaruh.

Set kedua flag ([-+=]), flag operasi, menentukan apakah izin harus dihapus, ditambahkan, atau diterapkan:

  • - Menghapus izin yang ditentukan.
  • + Menambahkan izin yang ditentukan.
  • = Mengubah izin saat ini ke izin yang ditentukan. Jika tidak ada izin yang ditentukan setelah simbol =, semua izin dari kelas user yang ditentukan akan dihapus.

Izin (perms...) dapat secara eksplisit diatur menggunakan nol atau satu atau lebih dari huruf-huruf berikut: r, w, x, X, s, dan t. Gunakan satu huruf dari set u, g, dan o saat menyalin izin dari satu ke kelas user lain.

Saat mengatur izin untuk lebih dari satu kelas user ([, …]), gunakan koma (tanpa spasi) untuk memisahkan mode simbolis.

Berikut adalah beberapa contoh cara menggunakan perintah chmod dalam mode simbolik:

  • Berikan anggota grup izin untuk membaca file, tetapi tidak untuk menulis dan mengeksekusi :
    chmod g=r namafile
    
  • Hapus izin eksekusi untuk semua user:
    chmod a-x namafile
    
  • Menghapus izin menulis untuk user lain:
    chmod -R o-w dirname
    
  • Hapus izin read, write, dan execute untuk semua user kecuali pemilik file:
    chmod og-rwx namafile
    

    Hal yang sama juga dapat dilakukan dengan menggunakan bentuk berikut:

    chmod og= namafile
    
  • Berikan izin read, write, dan execute kepada pemilik file, izin read untuk grup file, dan tidak ada izin untuk semua user lain:
    chmod u=rwx,g=r,o= namafile
    
  • Tambahkan izin kepada grup yang sama dengan pemilik file :
    chmod g+u namafile
    
  • Tambahkan sticky bit ke direktori yang diberikan:
    chmod o+t dirname
    

Chmod dalam Metode Numerik

Sintaks perintah chmod saat menggunakan metode numerik memiliki format berikut:

chmod [OPTIONS] NUMBER FILE...

Saat menggunakan mode numerik, Anda dapat mengatur izin untuk ketiga kelas pengguna (owner, group, dan lainnya) secara bersamaan.

NUMBER dapat berupa angka yang terdiri dari 3 atau 4 digit.

Ketika 3 digit angka digunakan, digit pertama mewakili izin pemilik file, yang kedua dari grup file dan yang terakhir semua pengguna lain.

Setiap izin write, read, dan execute memiliki nilai angka berikut:

  • r (read) = 4
  • w (write) = 2
  • x (execute) = 1
  • tidak ada izin = 0

Nomor izin kelas pengguna tertentu diwakili oleh jumlah nilai izin untuk grup tersebut.

Untuk mengetahui izin file dalam mode numerik, cukup hitung total untuk semua kelas user. Misalnya, untuk memberikan izin read, write, dan eksekusi kepada pemilik file, izin read dan execute untuk grup file dan hanya izin read untuk semua user lain (Others), maka yang akan Anda lakukan sebagai berikut:

  • Owner: rwx=4+2+1=7
  • Group: r-x=4+0+1=5
  • Others: r-x=4+0+0=4

Dengan menggunakan metode di atas kita sampai pada angka 754, yang mewakili izin yang diinginkan.

Untuk mengatur flag setuid, setgid, dan sticky bit,gunakan empat digit angka.

Ketika nomor 4 digit digunakan, digit pertama memiliki arti sebagai berikut:

  • setuid=4
  • setgid=2
  • sticky=1
  • tidak ada perubahan = 0

Tiga digit berikutnya memiliki arti yang sama seperti ketika menggunakan 3 digit.

Jika digit pertama adalah 0 maka dapat dihilangkan, dan mode dapat direpresentasikan dengan 3 digit. Mode angka 0755 memiliki value dan hasil yang sama dengan 755.

Untuk menghitung mode numerik Anda juga dapat menggunakan metode lain (metode biner), tetapi sedikit lebih rumit. Mengetahui cara menghitung mode numerik menggunakan 4, 2, dan 1 sudah cukup untuk sebagian besar pengguna.

Anda dapat memeriksa izin file dalam notasi numerik menggunakan perintah stat:

stat -c "%a" filename
644

Berikut adalah beberapa contoh cara menggunakan perintah chmod dalam mode numerik:

  • Berikan izin kepada pemilik file untuk read dan write dan hanya izin read untuk anggota grup dan semua user lain:
    chmod 644 dirname
    
  • Berikan pemilik file izin read, write, dan eksekusi, izin read dan eksekusi untuk anggota grup, dan tidak ada izin untuk semua user lain:
    chmod 750 dirname
    
  • Berikan izin read, write, eksekusi dan sticky bit ke direktori yang diberikan:
    chmod 777 dirname
    
  • Mengatur izin read, write, dan eksekusi secara rekursif untuk pemilik file dan tidak ada izin untuk semua user lain pada direktori yang diberikan:
    chmod -R 700 dirname

Menggunakan File Reference

Opsi --reference=ref_file memungkinkan Anda untuk mengatur izin file agar sama dengan izin dari file referensi yang ditentukan (ref_file).

chmod --reference=REF_FILE FILE

Sebagai contoh, perintah berikut ini akan memberikan izin yang sama dari file1 ke file2

chmod --reference=file1 file2

Cara Mengubah Izin File Secara Recursive

Untuk beroperasi secara rekursif pada semua file dan direktori di bawah direktori yang diberikan, gunakan opsi -R (--recursive):

chmod -R MODE DIRECTORY

Misalnya, untuk mengubah izin semua file dan subdirektori di bawah direktori /var/www ke 755 Anda akan menggunakan:

chmod -R 755 /var/www

Beroperasi pada Symbolic Links

Perlu untuk di ingat bahwa Symbolic Links selalu memiliki izin 777.

Secara default, saat mengubah izin symlink, chmod akan mengubah izin pada file yang ditunjuk tautan itu.

chmod 755 symlink

Kemungkinannya, alih-alih mengubah kepemilikan target, Anda akan mendapatkan pesan error “cannot access ‘symlink’: Permission denied”.

Kesalahan ini terjadi pada sebagian besar distribusi Linux, dan Anda tidak dapat beroperasi pada file target. Opsi ini ditentukan di  /proc/sys/fs/protected_symlinks. Opsi 1 berarti diaktifkan dan 0 berarti dinonaktifkan. Disarankan untuk tidak menonaktifkan fitur ini untuk alasan keamanan.

Mengubah Izin File dalam Jumlah Besar (Bulk)

Terkadang ada situasi di mana Anda perlu mengubah file dan izin direktori secara massal. Daripada mencari satu persatu, kita akan menggunakan cara yang lebih simpel dan cepat.

Skenario yang paling umum adalah mengubah secara rekursif izin file pada situs web menjadi 644 dan izin direktori menjadi 755.

Contoh dalam menggunakan metode numerik:

find /var/www/website -type d -exec chmod 755 {} \;
find /var/www/website -type f -exec chmod 644 {} \;

Contoh dalam menggunakan metode simbolis:

find /var/www/website -type d -exec chmod u=rwx,go=rx {} \;
find /var/www/website -type f -exec chmod u=rw,go=r {} \;

Perintah find akan mencari file dan direktori di /var/www/website dan meneruskan setiap file dan direktori yang ditemukan ke perintah chmod untuk mengatur izin.

Kesimpulan

Perintah chmod digunakan untuk mengubah izin file. Izin dapat diatur menggunakan 2 mode, dengan mode simbolik atau numerik.

Untuk mempelajari lebih lanjut tentang chmod, kunjungi halaman manual chmod.