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 Izin | Karakter | Arti dari karakter |
---|---|---|
Read | - | File tidak dapat dibaca. Anda tidak dapat melihat konten file. |
r | File dapat dibaca | |
Write | - | File tidak dapat diubah atau dimodifikasi. |
w | File dapat diubah atau dimodifikasi. | |
Execute | - | File tidak dapat di eksekusi. |
x | File dapat di eksekusi. | |
s | Jika 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. | |
S | Sama seperti s tetapi flag x tidak disetel. Flag ini jarang digunakan pada file. | |
t | Jika ditemukan di triplet others ia mengatur sticky bit.Ini juga berarti bahwa x flag disetel. flag ini tidak berguna untuk file. | |
T | Sama 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 Izin | Karakter | Arti Dari Karakter |
---|---|---|
Read | - | Konten direktori tidak dapat ditampilkan. |
r | Konten direktori dapat ditampilkan. (mis. Anda dapat melihat daftar file di dalam direktori dengan perintah ls ) | |
Write | - | Konten direktori tidak dapat diubah. |
w | Isi direktori dapat diubah. (mis. Anda dapat membuat file baru, menghapus file .. dll) | |
Execute | - | Direktori tidak dapat diubah. |
x | Direktori dapat dinavigasi menggunakan perintah cd . | |
s | Jika 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. | |
S | Sama seperti s tetapi flag x tidak disetel. Flag ini tidak berguna di direktori. | |
t | Jika 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. | |
T | Sama 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 denganugo
.
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) = 4w
(write) = 2x
(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.