Saya akan menjawab pertanyaan Anda dalam tiga bagian:jenis file, izin, dan kasus penggunaan untuk berbagai bentuk chmod
.
Jenis file
Karakter pertama di 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 di ls dokumentasi; yang mungkin Anda temui adalah
-
:file “biasa”, dibuat dengan program apa pun yang dapat menulis fileb
:memblokir file khusus, biasanya perangkat disk atau partisi, dapat dibuat denganmknod
c
:file khusus karakter, juga dapat dibuat denganmknod
(lihat/dev
untuk contoh)d
:direktori, dapat dibuat denganmkdir
l
:tautan simbolis, dapat dibuat denganln -s
p
:bernama pipa, dapat dibuat denganmkfifo
s
:socket, dapat dibuat dengannc -U
D
:door, 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 sekumpulan izin:
suid
,sgid
dan “lengket” (lihat di bawah)- izin pengguna
- izin grup
- izin “lainnya”
Nilai oktal dihitung sebagai jumlah 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 set bit ini dijalankan sebagai grup pemiliknya (ini digunakan untuk game sehingga skor tinggi dapat dibagikan, tetapi seringkali merupakan risiko keamanan bila digabungkan dengan kerentanan dalam game), dan file yang dibuat di direktori dengan set bit ini adalah milik grup pemilik direktori secara default (ini berguna untuk membuat folder bersama)- "lengket" (atau "penghapusan terbatas") adalah 1; file dalam direktori dengan kumpulan bit ini hanya dapat dihapus oleh pemiliknya, pemilik direktori, atau
root
(lihat/tmp
untuk contoh umum dari ini).
Lihat chmod
halaman manual untuk rincian. Perhatikan bahwa selama ini saya mengabaikan fitur keamanan lain yang dapat mengubah izin pengguna pada file (SELinux, ACL file...).
Bit khusus ditangani secara berbeda tergantung pada jenis file (file biasa atau direktori) dan sistem yang mendasarinya. (Ini disebutkan dalam chmod
halaman manual.) Pada sistem yang saya gunakan untuk menguji ini (dengan coreutils
8.23 pada ext4
filesystem, menjalankan kernel Linux 3.16.7-ckt2), perilakunya adalah sebagai berikut. Untuk file, bit khusus selalu dihapus kecuali diatur secara eksplisit, 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 angka empat digit, sehingga berlaku chmod 0777
juga setara dengan chmod 777
tetapi itu menyesatkan karena beberapa bit 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
secara eksplisit atau tentukan nilai numerik negatif, jadi chmod -7000
akan menghapus semua bit khusus pada direktori.
Di ls -l
keluaran, suid
, sgid
dan “sticky” muncul sebagai pengganti x
entri:suid
adalah s
atau S
bukan x
pengguna , sgid
adalah s
atau S
bukan x
grup , dan "lengket" adalah t
atau T
bukan x
milik orang lain . Huruf kecil menunjukkan bahwa bit khusus dan bit yang dapat dieksekusi telah disetel; huruf besar menunjukkan bahwa hanya bit khusus yang disetel.
Berbagai bentuk chmod
Karena perilaku yang dijelaskan di atas, gunakan empat digit penuh di chmod
bisa membingungkan (setidaknya ternyata saya bingung). Ini berguna saat Anda ingin menyetel bit khusus dan juga bit izin; jika tidak, bit dihapus jika Anda memanipulasi file, dipertahankan jika Anda memanipulasi direktori. Jadi chmod 2750
memastikan Anda mendapatkan setidaknya sgid
dan tepatnya 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 sangat berguna untuk dapat memikirkan izin menggunakan mode numerik, karena banyak perintah lain yang dapat menggunakannya (install
, mknod
...).
Beberapa varian teks dapat berguna:jika Anda hanya ingin memastikan file dapat dijalankan oleh siapa saja, chmod a+x
akan melakukan itu, terlepas dari izin lainnya. Demikian juga, +X
menambahkan izin eksekusi hanya jika salah satu izin eksekusi sudah ditetapkan atau file tersebut adalah direktori; ini berguna untuk memulihkan izin secara global tanpa harus file kasus khusus v. direktori. Jadi, chmod -R ug=rX,u+w,o=
sama dengan menerapkan chmod -R 750
ke semua direktori dan file yang dapat dieksekusi dan chmod -R 640
ke semua file lainnya.
Jadi, izin di Linux sangat penting. Saya akan mencoba membuat penjelasan singkat.
Untuk potongan mode file
Setiap file Unix memiliki sekumpulan izin yang menentukan apakah Anda dapat membaca, menulis, atau menjalankan file tersebut. Runningls -l menampilkan izin. Berikut ini contoh tampilan seperti itu:
-rw-r--r-- 1 user somegroup 7041 Mar 26 19:34 somefile
Saya lampirkan gambar potongan file mode:
Jenis bisa jadi hal yang berbeda. Misalnya:
- d (direktori)
- c (perangkat karakter)
- l (symlink)
- p (bernama pipa)
- s (soket)
- b (blokir perangkat)
- D (pintu, tidak umum pada sistem Linux, tetapi telah di-porting)
Jika Anda ingin menetapkan beberapa izin untuk semua direktori, Anda dapat menggunakan atribut R, misalnya:
chmod -R 777 /some/directory/
Untuk chmod 777 vs 0777
chmod
perintah biasanya mengharapkan input menjadi angka oktal, nol di depan mengacu pada nilai triplet sticky/sgid/suid bit. Namun di C, itu akan membuat perbedaan, karena 777
akan diterjemahkan ke 01411
(oktal), sehingga menyetel sticky bit (lihat chmod(2)
halaman manual), izin baca untuk pemilik dan bit yang dapat dieksekusi untuk grup dan lainnya (yang merupakan kombinasi yang agak aneh).
EDIT 1
Saya menemukan gambar lain tentang izin Linux dan saya akan melampirkannya agar lebih mudah dipahami:
d
berarti itu adalah sebuah direktori, jika Anda memiliki file itu adalah -
dan jika itu adalah tautan, Anda akan menemukan l
. Itu tidak dapat disetel/tidak disetel.
Jika Anda menggunakan 0777 sebagai izin, Anda memberikan kontrol penuh (baca+tulis+eksekusi) kepada setiap pengguna/grup sistem. Ini adalah cara malas untuk menyelesaikan masalah saat Anda memiliki pengguna/grup yang tidak dapat mengakses direktori/file.
Misalnya, jika Anda mencantumkan konten direktori dan mendapatkan ini:
-rw-r--r-- 1 root root 42596 jun 7 2012 preloadable_libintl.so
preloadable_libintl.so adalah file yang dimiliki oleh root pengguna dan root grup. pemilik memiliki akses baca dan tulis, grup hanya memiliki akses baca dan pengguna lain memiliki akses baca. Ini dapat diterjemahkan sebagai 644.
Jika saya ubah ke 777 akan terlihat seperti ini:
-rwxrwxrwx 1 root root 42596 jun 7 2012 preloadable_libintl.so