Saya tidak pernah benar-benar mengerti bagaimana chmod
bekerja sampai hari ini. Saya mengikuti tutorial yang menjelaskan banyak hal kepada saya.
Misalnya, saya telah membaca bahwa Anda memiliki tiga grup izin yang berbeda:
- pemilik (
u
) - grup (
g
) - semuanya (
o
)
Berdasarkan ketiga kelompok ini, saya sekarang tahu bahwa:
- Jika file dimiliki oleh pengguna, izin pengguna menentukan akses.
- Jika grup file sama dengan grup pengguna, izin grup menentukan akses.
- Jika pengguna bukan pemilik file, dan tidak ada dalam grup, maka izin lain yang digunakan.
Saya juga mengetahui bahwa Anda memiliki izin berikut:
- baca (
r
) - tulis (
w
) - jalankan (
x
)
Saya membuat direktori untuk menguji pengetahuan yang baru saya peroleh:
mkdir test
Kemudian saya melakukan beberapa tes:
chmod u+rwx test/
# drwx------
chmod g+rx test/
# drwxr-x---
chmod u-x test/
# drw-r-x---
Setelah bermain-main selama beberapa waktu, saya pikir saya akhirnya memahami chmod
dan cara Anda mengatur izin menggunakan perintah ini.
Tapi…
Saya masih memiliki beberapa pertanyaan:
- Apa yang dimaksud dengan
d
di awal berdiri untuk? - Apa nama dan kegunaan slot yang berisi dan nilai lain apa yang dapat ditampungnya?
- Bagaimana cara menyetel dan menghapusnya?
- Berapa nilai untuk
d
ini ? (Karena Anda hanya memiliki 7=4+2+1 7=4+2+1 7=4+2+1) - Mengapa orang terkadang menggunakan
0777
bukannya777
untuk mengatur izin mereka?
Tapi karena saya seharusnya tidak mengajukan banyak pertanyaan, saya akan mencoba menanyakannya dalam satu pertanyaan.
Pada sistem berbasis UNIX seperti semua distro Linux, mengenai perizinan, apa yang dilakukan bagian pertama (d
) singkatan dan apa gunanya bagian izin ini?
Jawaban yang Diterima:
Saya akan menjawab pertanyaan Anda dalam tiga bagian:jenis file, izin, dan kasus penggunaan untuk berbagai bentuk chmod
.
Jenis file
Karakter pertama dalam ls -l
output mewakili jenis file; d
berarti itu adalah direktori. Itu tidak dapat disetel atau tidak disetel, itu tergantung pada bagaimana file itu dibuat. Anda dapat menemukan daftar lengkap jenis file dalam dokumentasi ls; yang mungkin Anda temui adalah
-
:file “reguler”, dibuat dengan program apa pun yang dapat menulis fileb
:memblokir file khusus, biasanya perangkat disk atau partisi, dapat dibuat denganmknod
c
:file karakter khusus, juga dapat dibuat denganmknod
(lihat/dev
sebagai contoh)d
:direktori, dapat dibuat denganmkdir
l
:tautan simbolik, dapat dibuat denganln -s
p
:bernama pipa, dapat dibuat denganmkfifo
s
:socket, dapat dibuat dengannc -U
D
:pintu, dibuat oleh beberapa proses server di Solaris/openindiana.
Izin
chmod 0777
digunakan untuk mengatur semua izin dalam satu chmod
eksekusi, daripada menggabungkan perubahan dengan u+
dll. Masing-masing dari empat digit adalah nilai oktal yang mewakili satu set izin:
suid
,sgid
dan “lengket” (lihat di bawah)- izin pengguna
- izin grup
- Izin “lainnya”
Nilai oktal dihitung sebagai jumlah dari izin:
- “baca” adalah 4
- “tulis” adalah 2
- “eksekusi” adalah 1
Untuk digit pertama:
suid
adalah 4; binari dengan set bit ini dijalankan sebagai pengguna pemiliknya (biasanyaroot
)sgid
adalah 2; binari dengan bit set ini dijalankan sebagai grup pemiliknya (ini digunakan untuk game sehingga skor tinggi dapat dibagikan, tetapi sering kali merupakan risiko keamanan bila dikombinasikan dengan kerentanan dalam game), dan file yang dibuat dalam direktori dengan bit set ini milik grup pemilik direktori secara default (ini berguna untuk membuat folder bersama)- “lengket” (atau “penghapusan terbatas”) adalah 1; file dalam direktori dengan bit set ini hanya dapat dihapus oleh pemiliknya, pemilik direktori, atau
root
(lihat/tmp
untuk contoh umum tentang ini).
Lihat chmod
halaman manual untuk detailnya. Perhatikan bahwa dalam semua ini saya mengabaikan fitur keamanan lain yang dapat mengubah izin pengguna pada file (SELinux, file ACL…).
Bit khusus ditangani secara berbeda tergantung pada jenis file (file atau direktori biasa) dan sistem yang mendasarinya. (Ini disebutkan dalam chmod
halaman manual.) Pada sistem yang saya gunakan untuk menguji ini (dengan coreutils
8.23 pada ext4
sistem file, menjalankan kernel Linux 3.16.7-ckt2), perilakunya adalah sebagai berikut. Untuk sebuah file, bit khusus selalu dihapus kecuali secara eksplisit diatur, jadi chmod 0777
setara dengan chmod 777
, dan kedua perintah menghapus bit khusus dan memberikan izin penuh kepada semua orang pada file tersebut. Untuk direktori, bit khusus tidak pernah sepenuhnya dihapus menggunakan bentuk numerik empat digit, jadi berlaku chmod 0777
juga setara dengan chmod 777
tapi itu menyesatkan karena beberapa bagian khusus akan tetap apa adanya. (Versi sebelumnya dari jawaban ini salah.) Untuk menghapus bit khusus pada direktori, Anda perlu menggunakan u-s
, g-s
dan/atau o-t
eksplisit atau tentukan nilai numerik negatif, jadi chmod -7000
akan menghapus semua bit khusus pada direktori.
Dalam ls -l
keluaran, suid
, sgid
dan "lengket" muncul di tempat x
entri:suid
adalah s
atau S
alih-alih x
. pengguna , sgid
adalah s
atau S
alih-alih x
group grup , dan "lengket" adalah t
atau T
alih-alih x
orang lain . Huruf kecil menunjukkan bahwa bit khusus dan bit yang dapat dieksekusi diatur; huruf besar menunjukkan bahwa hanya bit khusus yang disetel.
Berbagai bentuk chmod
Karena perilaku yang dijelaskan di atas, menggunakan empat digit penuh di chmod
bisa membingungkan (setidaknya ternyata saya bingung). Ini berguna ketika Anda ingin mengatur bit khusus serta bit izin; jika tidak, bit akan dihapus jika Anda memanipulasi file, disimpan jika Anda memanipulasi direktori. Jadi chmod 2750
memastikan Anda akan mendapatkan setidaknya sgid
dan persis u=rwx,g=rx,o=
; tapi chmod 0750
belum tentu menghapus bit khusus.
Menggunakan mode numerik alih-alih perintah teks ([ugo][=+-][rwxXst]
) mungkin lebih merupakan kasus kebiasaan dan tujuan dari perintah. Setelah Anda terbiasa menggunakan mode numerik, seringkali lebih mudah untuk hanya menentukan mode lengkap seperti itu; dan berguna untuk memikirkan izin menggunakan mode numerik, karena banyak perintah lain dapat menggunakannya (install
, mknod
…).
Beberapa varian teks dapat berguna:jika Anda hanya ingin memastikan file dapat dieksekusi oleh siapa saja, chmod a+x
akan melakukan itu, terlepas dari apa izin lainnya. Demikian juga, +X
menambahkan izin eksekusi hanya jika salah satu izin eksekusi sudah disetel atau file adalah direktori; ini dapat berguna untuk memulihkan izin secara global tanpa harus ke file kasus khusus v. direktori. Jadi, chmod -R ug=rX,u+w,o=
setara dengan menerapkan chmod -R 750
ke semua direktori dan file yang dapat dieksekusi dan chmod -R 640
ke semua file lainnya.