GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara ACL menghitung izin efektif pada suatu file?

effective izin dibentuk oleh ANDing sebenarnya (nyata?) izin dengan mask . Sejak mask file Anda adalah rw- , semua effective izin memiliki x sedikit dimatikan.


Jawaban singkat:Jika Anda ingin mask dengan bit eksekusi aktif, Anda harus menyetelnya secara eksplisit menggunakan setfacl setelah touch . Keamanan melarang pengaturan implisitnya.

setfacl -n -m m::rwx foo

"-n" untuk menekan penghitungan ulang topeng (mungkin tidak diperlukan).
"m::rwx" menyetel nilai topeng ke 'rwx'. Perhatikan bahwa "m::x" akan menonaktifkan semua baca dan tulis.

Saya tidak dapat menunjukkan mengapa topengnya "rw-". Saya berasumsi bahwa direktori default tempat touch membuat file tetap tidak berubah untuk seluruh contoh OP.

  1. Entri direktori untuk 'foo' harus menampilkan pemilik 'root' (karena perintah sudo dan grup 'guards' karena direktori tersebut memiliki bit SUID yang disetel. Izin akan menjadi default '-rw-...r--' dengan izin grup dari direktori '-...r-x...' (karena bit SUID ditampilkan sebagai s kecil).

  2. Berikutnya adalah ACL, yang seharusnya menjadi direktori default. Mengingat bahwa ACL mewarisi, saya tidak berharap ada ACLe yang dibuat, dan topeng ACLE menjadi direktori default, 'rwx'.

Tetapi jika dibuat, saya berharap ACLe baru akan diprioritaskan dari default, sekali lagi meninggalkan topeng di 'rwx'. Jika mereka tidak diprioritaskan dari default, ini tampaknya akan mengalahkan ide ACL default -- ACL "default" hanya akan menyediakan ACL pengguna bernama dan grup bernama.

Ini sekarang menimbulkan pertanyaan tentang seperti apa topeng ACLe itu. Saya berharap itu menjadi 'rwx' dari entri topeng default. Tapi itu bisa dibuat dengan topeng kosong, dan kemudian semua jenis hukum berlaku.

  1. Dengan ACL tentatif pengguna::rw-, grup::r-x, lainnya::r--, grup:roda:rwx, grup:penjaga:rwx, dan mask:::(tidak disetel), kami berkonsultasi dengan dokumentasi untuk setfacl , dengan asumsi aturan yang sama berlaku untuk pembuatan file.

Ada klausa:

Jika ACL berisi entri pengguna bernama atau grup bernama, dan tidak ada entri topeng, entri topeng yang berisi izin yang sama dengan entri grup akan dibuat.

Ini akan mengatur topeng ACL ke "r-x", jika entri grup ACL dibuat dari entri direktori file, atau "r-x" jika entri grup ACL berasal dari ACL default. (Ether way, untuk kasus ini, hasilnya sama.)

Ada juga klausa:

Jika ACL Default berisi entri pengguna bernama atau entri grup bernama, dan tidak ada entri mask, entri mask yang berisi izin yang sama dengan entri grup ACL default ditambahkan. ... izin entri topeng disesuaikan lebih lanjut untuk menyertakan penyatuan semua izin yang dipengaruhi oleh entri topeng.

Jika aturan ini berlaku, topeng akan dimulai sebagai "r-x" (logika yang sama) seperti klausa sebelumnya), dan kemudian akan disesuaikan menjadi "penyatuan semua izin yang dipengaruhi oleh entri topeng".

"izin yang dipengaruhi oleh entri topeng" tidak ditentukan dalam setfacl dokumentasi perintah. Dokumentasi ACL POSIX mengatakan:

Topeng adalah kombinasi dari semua izin akses dari grup pemilik dan semua entri pengguna dan grup.

Beri kata "gabungan", yang bersifat tambahan, saya akan membaca "kombinasi" menjadi or-ing yang logis. Dengan kata lain, jika ada grup atau pengguna ACLe yang memiliki izin "x", mask akan berisi "x".

  1. Dengan semua logika ini, nilai topeng dalam contoh OP harus 'rwx', tidak peduli jalur logis mana yang diikuti.

Alasan di atas pasti cacat, karena x untuk eksekusi tidak muncul di topeng.

Oleh karena itu, harus ada aturan tentang cara penghitungan mask yang telah "disembunyikan" dari sumber dokumentasi umum (atau kami telah menemukan bug).

Kesimpulan saya adalah bahwa 'x' selalu dihapus tanpa syarat, dan dokumentasinya lemah.

Perubahan ini mungkin dilakukan atas dasar "keamanan" -- tidak ada file yang dapat dieksekusi secara implisit, tetapi bit yang dapat dieksekusi harus diaktifkan setelah dibuat.


Linux
  1. “sudo:/etc/sudoers is world writable” – Cara memperbaiki hak akses file sudoers

  2. Bagaimana cara menambahkan output ke file?

  3. Bagaimana cara mengarahkan output dari system() ke file?

  1. Bagaimana menemukan pengelola file default?

  2. Bagaimana cara kerja izin file untuk pengguna root?

  3. Apa arti + di akhir izin dari ls -l?

  1. Apakah Tail Membaca Seluruh File?

  2. Bagaimana Perintah Sed '1!g;h;$!d' Membalikkan Isi File?

  3. Memahami Bagaimana Umask Mengontrol Izin File / Direktori Awal di Linux