Keamanan File dan Hak Akses
Karena file adalah objek yang dapat diamankan, akses ke objek diatur oleh model kontrol akses yang mengatur akses ke semua objek lain yang dapat diamankan di Windows. Untuk penjelasan terperinci tentang model ini, lihat Kontrol Akses.
Anda dapat menentukan deskriptor keamanan untuk file atau direktori saat Anda memanggil fungsi CreateFile, CreateDirectory, atau CreateDirectoryEx. Jika Anda menentukan NULL untuk parameter lpSecurityAttributes , file atau direktori mendapatkan deskriptor keamanan default. Daftar kontrol akses (ACL) dalam deskriptor keamanan default untuk file atau direktori diwarisi dari direktori induknya. Perhatikan bahwa deskriptor keamanan default ditetapkan hanya ketika file atau direktori baru dibuat, dan bukan saat diganti namanya atau dipindahkan.
Untuk mengambil pendeskripsi keamanan file atau objek direktori, panggil fungsi GetNamedSecurityInfo atau GetSecurityInfo. Untuk mengubah pendeskripsi keamanan file atau objek direktori, panggil fungsi SetNamedSecurityInfo atau SetSecurityInfo.
Hak akses yang valid untuk file dan direktori mencakup hak akses standar DELETE, READ_CONTROL, WRITE_DAC, WRITE_OWNER, dan SYNCHRONIZE. Tabel dalam Konstanta Hak Akses File mencantumkan hak akses yang khusus untuk file dan direktori.
Meskipun hak akses SYNCHRONIZE didefinisikan dalam daftar hak akses standar sebagai hak untuk menentukan handel file di salah satu fungsi tunggu, saat menggunakan operasi I/O file asinkron, Anda harus menunggu pada handel peristiwa yang terkandung dalam struktur TUMPANG TINDIH yang dikonfigurasi dengan benar daripada menggunakan handel file dengan akses SYNCHRONIZE tepat untuk sinkronisasi.
Berikut ini adalah hak akses umum untuk file dan direktori.
Akses ke kanan | Deskripsi |
---|---|
FILE_GENERIC_EXECUTE |
FILE_READ_ATTRIBUTES STANDARD_RIGHTS_EXECUTE MENSINKRONISASI |
FILE_GENERIC_READ |
FILE_READ_DATA FILE_READ_EA STANDARD_RIGHTS_READ MENSINKRONISASI |
FILE_GENERIC_WRITE |
FILE_WRITE_ATTRIBUTES FILE_WRITE_DATA FILE_WRITE_EA STANDARD_RIGHTS_WRITE MENSINKRONISASI |
Windows membandingkan hak akses yang diminta dan informasi dalam token akses utas dengan informasi dalam file atau deskriptor keamanan objek direktori. Jika perbandingan tidak melarang semua hak akses yang diminta diberikan, handel ke objek dikembalikan ke utas dan hak akses diberikan. Untuk informasi selengkapnya tentang proses ini, lihat Interaksi antara Utas dan Objek Yang Dapat Diamankan.
Secara default, otorisasi untuk akses ke file atau direktori dikontrol secara ketat oleh ACL di deskriptor keamanan yang terkait dengan file atau direktori tersebut. Secara khusus, pendeskripsi keamanan direktori induk tidak digunakan untuk mengontrol akses ke file atau direktori turunan apa pun. Hak akses FILE_TRAVERSE dapat diberlakukan dengan menghapus hak istimewa BYPASS_TRAVERSE_CHECKING dari pengguna. Ini tidak disarankan dalam kasus umum, karena banyak program tidak menangani kesalahan traversal direktori dengan benar. Penggunaan utama untuk akses FILE_TRAVERSE tepat pada direktori adalah untuk memungkinkan kesesuaian dengan standar IEEE dan ISO POSIX tertentu ketika interoperabilitas dengan sistem Unix adalah persyaratan.
Model keamanan Windows menyediakan cara bagi direktori anak untuk mewarisi, atau dicegah untuk mewarisi, satu atau beberapa ACE dalam deskriptor keamanan direktori induk. Setiap ACE berisi informasi yang menentukan bagaimana ACE dapat diwariskan, dan apakah itu akan berpengaruh pada objek direktori warisan. Misalnya, beberapa ASE yang diwariskan mengontrol akses ke objek direktori yang diwariskan, dan ini disebut ACE yang efektif. Semua ACE lainnya disebut ASE khusus warisan.
Model keamanan Windows juga memberlakukan warisan otomatis ACE ke objek turunan sesuai dengan aturan warisan ACE. Warisan otomatis ini, bersama dengan informasi warisan di setiap ACE, menentukan bagaimana pembatasan keamanan diteruskan hierarki direktori.
Perhatikan bahwa Anda tidak dapat menggunakan ACE yang ditolak akses untuk menolak hanya GENERIC_READ atau hanya GENERIC_WRITE akses ke file. Ini karena untuk objek file, pemetaan generik untuk GENERIC_READ atau GENERIC_WRITE menyertakan hak akses SYNCHRONIZE . Jika ACE menolak akses GENERIC_WRITE ke wali amanat, dan wali amanat meminta akses GENERIC_READ, permintaan akan gagal karena permintaan secara implisit menyertakan akses SYNCHRONIZE yang secara implisit ditolak oleh ACE, dan sebaliknya. Alih-alih menggunakan ACE yang ditolak akses, gunakan ACE yang diizinkan akses untuk secara eksplisit mengizinkan hak akses yang diizinkan.
Cara lain untuk mengelola akses ke objek penyimpanan adalah enkripsi. Implementasi enkripsi sistem file di Windows adalah Sistem File Terenkripsi, atau EFS. EFS hanya mengenkripsi file dan bukan direktori. Keuntungan enkripsi adalah memberikan perlindungan tambahan untuk file yang diterapkan pada media dan bukan melalui sistem file dan arsitektur kontrol akses Windows standar. Untuk informasi selengkapnya tentang enkripsi file, lihat Enkripsi File.
Dalam kebanyakan kasus, kemampuan untuk membaca dan menulis pengaturan keamanan file atau objek direktori dibatasi untuk proses mode kernel. Dengan jelas, Anda tidak ingin proses pengguna dapat mengubah kepemilikan atau pembatasan akses pada file atau direktori privat Anda. Namun, aplikasi cadangan tidak akan dapat menyelesaikan tugasnya untuk mencadangkan file Anda jika pembatasan akses yang Telah Anda tempatkan pada file atau direktori Anda tidak mengizinkan proses mode pengguna aplikasi untuk membacanya. Aplikasi cadangan harus dapat mengambil alih pengaturan keamanan objek file dan direktori untuk memastikan pencadangan lengkap. Demikian pula, jika aplikasi cadangan mencoba menulis salinan cadangan file Anda melalui salinan disk-resident, dan Anda secara eksplisit menolak hak tulis ke proses aplikasi cadangan, operasi pemulihan tidak dapat diselesaikan. Dalam hal ini juga, aplikasi cadangan harus dapat mengambil alih pengaturan kontrol akses file Anda.
Hak istimewa akses SE_BACKUP_NAME dan SE_RESTORE_NAME dibuat secara khusus untuk menyediakan kemampuan ini untuk mencadangkan aplikasi. Jika hak istimewa ini telah diberikan dan diaktifkan dalam token akses proses aplikasi cadangan, maka dapat memanggil CreateFile untuk membuka file atau direktori Anda untuk pencadangan, menentukan standar READ_CONTROL akses tepat sebagai nilai parameter dwDesiredAccess. Namun, untuk mengidentifikasi proses panggilan sebagai proses pencadangan, panggilan ke CreateFile harus menyertakan bendera FILE_FLAG_BACKUP_SEMANTICS dalam parameter dwFlagsAndAttributes . Sintaks lengkap panggilan fungsi adalah sebagai berikut:
HANDLE hFile = CreateFile( fileName, // lpFileName
READ_CONTROL, // dwDesiredAccess
0, // dwShareMode
NULL, // lpSecurityAttributes
OPEN_EXISTING, // dwCreationDisposition
FILE_FLAG_BACKUP_SEMANTICS, // dwFlagsAndAttributes
NULL ); // hTemplateFile
Ini akan memungkinkan proses aplikasi cadangan untuk membuka file Anda dan mengambil alih pemeriksaan keamanan standar. Untuk memulihkan file Anda, aplikasi cadangan akan menggunakan sintaks panggilan CreateFile berikut saat membuka file Anda untuk ditulis.
HANDLE hFile = CreateFile( fileName, // lpFileName
WRITE_OWNER | WRITE_DAC, // dwDesiredAccess
0, // dwShareMode
NULL, // lpSecurityAttributes
CREATE_ALWAYS, // dwCreationDisposition
FILE_FLAG_BACKUP_SEMANTICS, // dwFlagsAndAttributes
NULL ); // hTemplateFile
Ada situasi ketika aplikasi cadangan harus dapat mengubah pengaturan kontrol akses file atau direktori. Contohnya adalah ketika pengaturan kontrol akses salinan file atau direktori residen disk berbeda dari salinan cadangan. Ini akan terjadi jika pengaturan ini diubah setelah file atau direktori dicadangkan, atau jika rusak.
Bendera FILE_FLAG_BACKUP_SEMANTICS yang ditentukan dalam panggilan ke CreateFile memberikan izin proses aplikasi cadangan untuk membaca pengaturan kontrol akses file atau direktori. Dengan izin ini, proses aplikasi cadangan kemudian dapat memanggil GetKernelObjectSecurity dan SetKernelObjectSecurity untuk membaca lalu mengatur ulang pengaturan kontrol akses.
Jika aplikasi cadangan harus memiliki akses ke pengaturan kontrol akses tingkat sistem, bendera ACCESS_SYSTEM_SECURITY harus ditentukan dalam nilai parameter dwDesiredAccess yang diteruskan ke CreateFile.
Aplikasi cadangan memanggil BackupRead untuk membaca file dan direktori yang ditentukan untuk operasi pemulihan, dan BackupWrite untuk menulisnya.
Topik terkait