Penyebaran Otomatis ACE yang Dapat Diwariskan
Fungsi SetNamedSecurityInfo dan SetSecurityInfo mendukung penyebaran otomatis entri kontrol akses (ASE) yang dapat diwariskan. Misalnya, jika Anda menggunakan fungsi-fungsi ini untuk menambahkan ACE yang dapat diwariskan ke direktori dalam NTFS, sistem menerapkan ACE yang sesuai dengan daftar kontrol akses (ACL) dari subdirektori atau file yang ada.
ACE yang diterapkan secara langsung lebih diutamakan daripada ACE yang diwariskan. Sistem mengimplementasikan prioritas ini dengan menempatkan ACE yang diterapkan langsung di depan ACE yang diwariskan dalam daftar kontrol akses diskresi (DACL). Saat Anda memanggil fungsi SetNamedSecurityInfo dan SetSecurityInfo untuk mengatur informasi keamanan objek, sistem memberlakukan model pewarisan saat ini pada ACL semua objek dalam hierarki di bawah objek target. Untuk objek yang telah dikonversi ke model pewarisan saat ini, bit SE_DACL_AUTO_INHERITED dan SE_SACL_AUTO_INHERITED diatur di bidang kontrol deskriptor keamanan objek.
Saat Anda membangun deskriptor keamanan baru yang mencerminkan model pewarisan saat ini, perawatan diambil untuk tidak mengubah semantik deskriptor keamanan. Dengan demikian, izinkan dan tolak ACE tidak pernah dipindahkan dalam kaitannya satu sama lain. Jika gerakan tersebut diperlukan (misalnya untuk menempatkan semua ACE yang tidak diwariskan di bagian depan ACL), ACL ditandai sebagai dilindungi untuk mencegah perubahan semantik.
Sistem menggunakan aturan berikut saat menyebarkan ACE yang diwariskan ke objek anak:
- Jika objek anak tanpa DACL mewarisi ACE, hasilnya adalah objek anak dengan DACL yang hanya berisi ACE yang diwariskan.
- Jika objek anak dengan DACL kosong mewarisi ACE, hasilnya adalah objek anak dengan DACL yang hanya berisi ACE yang diwariskan.
- Jika Anda menghapus ACE yang dapat diwariskan dari objek induk, pewarisan otomatis akan menghapus salinan ACE yang diwariskan oleh objek turunan.
- Jika pewarisan otomatis menghasilkan penghapusan semua ACE dari DACL objek anak, objek anak memiliki DACL kosong daripada tidak ada DACL.
Aturan ini dapat memiliki hasil yang tidak terduga dari mengonversi objek tanpa DACL ke objek dengan DACL kosong. Objek tanpa DACL memungkinkan akses penuh, tetapi objek dengan DACL kosong tidak mengizinkan akses. Sebagai contoh bagaimana aturan ini dapat membuat DACL kosong, misalkan Anda menambahkan ACE yang dapat diwariskan ke objek akar pohon objek. Pewarisan otomatis menyebarkan ACE yang dapat diwariskan ke semua objek di pohon. Objek anak yang dimulai tanpa DACL sekarang memiliki DACL dengan ACE yang diwariskan. Jika Anda menghapus ACE yang dapat diwariskan dari objek akar, sistem secara otomatis menyebarkan perubahan ke objek anak. Objek anak yang dimulai tanpa DACL (memungkinkan akses penuh) sekarang memiliki DACL kosong (tidak mengizinkan akses).
Untuk memastikan bahwa objek anak tanpa DACL tidak terpengaruh oleh ACE yang dapat diwariskan, atur bendera SE_DACL_PROTECTED di deskriptor keamanan objek.
Untuk informasi tentang cara membuat DACL dengan benar, lihat Membuat DACL.