Dalam CMS saya, saya perhatikan bahwa direktori memerlukan bit executable ( +x
) yang diset agar pengguna dapat membukanya. Mengapa izin eksekusi diperlukan untuk membaca direktori, dan bagaimana izin direktori di Linux berfungsi?
linux
permissions
directory
Nick.h
sumber
sumber
chmod 771 dirOne
), Anda tidak dapat mencantumkan konten dirOne. TETAPI jika mengandung sub direktori "dirTwo" dengan hak yang ditetapkan seperti (chmod 774 dirTwo
) Anda benar-benar dapat membuat daftar isinya!Jawaban:
Saat menerapkan izin ke direktori di Linux, bit izin memiliki arti yang berbeda dari pada file biasa.
r
) memungkinkan pengguna yang terkena dampak untuk daftar file dalam direktoriw
) memungkinkan pengguna yang terkena dampak untuk membuat, mengubah nama, atau menghapus file dalam direktori, dan memodifikasi atribut direktori inix
) memungkinkan pengguna yang terkena dampak untuk memasukkan direktori, dan akses file dan direktori di dalamT
ataut
jika bit eksekusi diatur untuk orang lain) menyatakan bahwa file dan direktori di dalam direktori yang hanya dapat dihapus atau diganti oleh pemiliknya (atau root)sumber
+x
pada direktori, berikan akses ke file inode melalui direktori khusus ini (tidak kurang, tidak lebih, yah ... mungkinchdir
perlu+x
juga). Untuk membaca atau menulis konten dari satu file, pengguna juga perlu+r
/+w
pada file ini, tetapi itu adalah izin yang berbeda (mereka tidak menimpa apa pun).+x
pada direktori memberi akses ke file inode" - Ini sepertinya nemonic yang bagus, tetapi mungkin tidak menceritakan keseluruhan cerita? Tanpa bit eksekusi yang ditetapkan pada direktori, Anda tidak dapat mengubah nama file file di direktori itu. Saya bertanya-tanya mengapa ini, karena nama file disimpan dalam entri direktori, bukan inode.Pertama, pikirkan: Apa itu direktori? Itu hanya daftar item (file dan direktori lain) yang hidup di dalamnya. Jadi: direktori = daftar nama.
Baca bit = Jika diset, Anda dapat membaca daftar ini. Jadi, misalnya, jika Anda memiliki direktori bernama
poems
:ls poems
dan Anda akan mendapatkan daftar item yang tinggal di dalamnya (-l
tidak akan mengungkapkan detail apa pun!).touch poems/so <TAB> poems/somefile
.poems
direktori kerja Anda (yaitucd
ke dalamnya).Write bit = Jika diatur, Anda dapat memodifikasi daftar ini yaitu Anda dapat {menambah, mengganti nama, menghapus} nama-nama di dalamnya. Tapi! Anda benar-benar dapat melakukannya hanya jika bit eksekusi diatur juga.
Execute bit = Jadikan direktori ini sebagai direktori kerja Anda
cd
. Anda memerlukan izin ini jika Anda ingin:Kasus menarik 1 : Jika Anda memiliki izin menulis + eksekusi pada direktori, Anda dapat {delete, rename} item yang tinggal di dalamnya walaupun Anda tidak memiliki batasan penulisan pada item-item tersebut. (gunakan bit yang lengket untuk mencegah ini)
Kasus menarik 2 : Jika Anda telah menjalankan (tetapi tidak menulis) izin pada direktori DAN Anda memiliki izin menulis pada file yang ada di dalamnya, Anda tidak dapat menghapus file (karena melibatkan menghapusnya dari daftar). Namun, Anda dapat menghapus kontennya, mis. Jika itu adalah file teks, Anda dapat menggunakan vi untuk membukanya dan menghapus semuanya. File akan tetap ada, tetapi akan kosong.
Ringkasan:
Baca bit = Anda dapat membaca nama-nama dalam daftar.
Write bit = Anda dapat {menambah, mengganti nama, menghapus} nama-nama dalam daftar JIKA bit eksekusi juga diatur.
Execute bit = Anda dapat menjadikan direktori ini sebagai direktori kerja Anda.
PS: Artikel yang disebutkan oleh Kusalananda itu bacaan yang bagus.
sumber
x
bit untuk akses apa pun ke file ini: untukcat a/b/c/d
, saya perlux
bit pada semuanyaa
,b
danc
, bahkan jika saya tidak menggunakannya sebagai cwd.x
izin pada direktori, jika Anda tidak memilikix
izin pada file di dalamnya, Anda tidak dapat benar-benar "mengeksekusi" file tersebut. Anda hanya dapatcat
melakukannya misalnya, tetapi Anda tidak dapat menjalankan file itu sendiri.ls -l
bekerja untuk folder, perlu keduanyar
danx
izin.Saya telah menyiapkan tabel ini dengan semua izin yang memungkinkan dan efek praktisnya.
(*) Hanya nama file : atribut lainnya seperti ukuran atau tanggal tidak dapat diakses. Misalnya Anda dapat menggunakan kunci tab untuk melengkapi otomatis tetapi tidak perintah ls.
Beberapa pemikiran :
sumber
-W-
secara fungsional setara dengan---
untuk direktori. Tidak terlalu intuitif. Tentu saja jenis bit tingkat rendah ini sering tidak.-W-
, saya bisa mengganti nama direktori (dalam direktori dengan sedikit lengket) tetapi tidak dengan---
. Itu tampaknya menjadi perbedaanIni artikel bagus tentang ini.
Ringkasan:
Direktori dengan
x
set bitnya memungkinkan pengguna untukcd
(mengubah direktori) ke direktori ini, dan mengakses file di dalamnya.Detail:
Baca (
r
)Tulis (
w
)Jalankan (
x
)Berikut adalah beberapa contoh yang seharusnya membuatnya lebih mudah untuk dipahami:
Bahkan ada lebih banyak informasi dalam artikel Hacking Linux Exposed .
sumber
Dari buku Robert Love "LINUX System Programming" bab 1 izin bagian-
sumber
Untuk operasi apa pun yang mengakses file atau direktori, ia harus terlebih dahulu menyelesaikan jalur ke file atau direktori. Resolusi tersebut mengharuskan pengguna telah menjalankan izin pada semua direktori di sepanjang jalur, kecuali komponen jalur akhir. Jadi untuk direktori, Anda bisa memikirkan bit eksekusi berarti "dapat diselesaikan".
Ambil jalur
/a/b/c.txt
sebagai contoh, misalkan pengguna memiliki 1) menjalankan izin pada/
dan/a
; 2) telah membaca izin/a/b
; 3) baca dan tulis izin/a/b/c.txt
.Pengguna akan gagal membaca (daftar)
/a
, karena tidak memiliki izin baca. Tetapi resolusi jalur tidak gagal.Pengguna akan dapat membaca (daftar)
/a/b
, karena pengguna telah menjalankan izin aktif/
,/a
dan membaca izin aktif/a/b
. Perhatikan bahwa, ketika membaca/a/b
, nama filec.txt
terlihat, tetapi metadata (mis. Filesize) dan konten tidak, karena nama file disimpan dengan direktori, bukan dengan file, tetapi metadata disimpan dalam inode file.Pengguna akan gagal untuk membaca
/a/b/c.txt
, karena ketika menyelesaikan jalan dari/
ke/a
ke/a/b
, gagal di/a/b
karena pengguna tidak memiliki izin eksekusi.Lihat juga bagaimana nama path diselesaikan ke file .
sumber
Analogi yang berguna adalah menganggap setiap file sebagai buku, dan setiap direktori sebagai ruang penyimpanan buku.
Ada aturan untuk dapat membuat daftar semua nama di sebuah ruangan: bit baca untuk direktori. Aturan untuk menghapus buku dari ruangan: bit tulis untuk direktori. Dan aturan untuk memasuki ruangan dan menjelajahi: direktori yang dihasilkan mengeksekusi bit.
Aturan-aturan itu terpisah dan berbeda dari aturan untuk setiap buku. Ada aturan untuk mengizinkan seseorang membuka buku dan membaca isinya: bit baca untuk setiap file. Ada aturan untuk mengubah isi buku: bit tulis untuk setiap file. Dan untuk mengeksekusi file: bit eksekusi untuk setiap file.
Saya menulis bit karena ada tiga bit untuk setiap tindakan. Ada satu bit baca untuk pemilik, satu bit baca untuk grup dan bit baca untuk orang lain (orang lain). Jika salah satu dari tiga bit tersebut ditetapkan untuk pengguna tertentu, pengguna tersebut memiliki bit baca yang aktif. Tidak peduli bagaimana yang sedikit ditemukan menjadi aktif baik oleh u ser atau g roup atau o ther, memiliki hasil yang efektif yang sama.
Dengan demikian, pengguna dapat diizinkan memasuki ruangan dan menghapus buku dari perpustakaan tetapi tidak diizinkan untuk membaca isi buku yang sama.
Itulah mengapa diperlukan bit baca untuk direktori: untuk mengontrol siapa yang diizinkan untuk membuat daftar isi kamar (judul buku).
Dan bit eksekusi digunakan untuk mengontrol siapa yang bisa memasuki ruangan buku.
sumber
Arti Execute untuk direktori cukup jelas. Karena tidak ada izin Traverse, tidak seperti Windows, Anda harus membebani sesuatu. Para desainer memilih Execute, Itu menyebabkan kebingungan tanpa akhir. Sebagai petugas keamanan komputer yang menetapkan hak Execute untuk sesuatu yang Anda tidak bermaksud untuk benar-benar Execute terlihat cerdik.
sumber
GENERIC_EXECUTE
dan apa itu.