Setelah bekerja dengan Linux selama bertahun-tahun, dan menemukan diri saya dengan waktu luang, saya memutuskan untuk mengunjungi kembali beberapa dasar. Jadi saya membaca kembali hal-hal tentang izin (tanpa memeriksa kode sumber), dan kasus khusus untuk folder, dan muncul dengan cara berpikir baru (setidaknya untuk saya ...) tentang izin folder (untuk pengguna tertentu / grup / lainnya): Saya membayangkan folder sebagai tabel dengan dua kolom, seperti:
filename | inode
foo | 111
bar | 222
The membaca izin berarti Anda dapat membaca (dan daftar) kolom kiri meja, menulis berkorespondensi izin untuk menambah dan menghapus entri ke meja, dan mengeksekusi berkorespondensi izin untuk mampu menerjemahkan dari nama file inode; yaitu Anda dapat mengakses isi folder.
Saya melakukan beberapa percobaan, dan hasilnya semua konsisten dengan "pandangan dunia" saya ini, tetapi satu kesimpulan tampaknya tidak terhindarkan: bahwa folder dengan izin d-w-------
, sama sekali tidak berguna. Mengelaborasi: Anda tidak dapat membuat daftar isinya, Anda tidak dapat membaca file yang Anda tahu ada di dalam (karena Anda tidak dapat menerjemahkan nama menjadi inode), Anda tidak dapat menghapus atau mengubah nama atau menambahkan file, karena sekali lagi itu akan menyiratkan terjemahan , dan Anda bahkan tidak dapat menambahkan hardlink (karena, saya menduga, itu berarti menambahkan nama serta nomor inode, yang berarti Anda akan mengetahui keduanya, yang pada gilirannya, sekali lagi menduga, melanggar tujuan tidak mengijinkan izin eksekusi yang belum disetel) . Dan tentu saja, jika ada yang file dalam satu folder tersebut, maka Anda tidak dapat menghapus folder yang baik, karena Anda tidak dapat menghapus isinya.
Jadi ... Saya ingin mengajukan dua pertanyaan:
- Apakah analogi saya ini benar, atau itu kesalahan besar?
- Terlepas dari jawaban sebelumnya, apakah ada setiap situasi di mana memiliki folder dengan izin seperti yang dijelaskan sesuai?
mkdir foo ; chmod 200 foo ; touch foo/bar
saya mengerti touch: cannot touch ‘foo/bar’: Permission denied
. Ini terjadi bahkan jika foo / bar sudah ada. Saya sedang menguji di bash (Arch Linux).