Tingkat Peniruan (Otorisasi)
Enumerasi SECURITY_IMPERSONATION_LEVEL mendefinisikan empat tingkat peniruan yang menentukan operasi yang dapat dilakukan server dalam konteks klien.
Tingkat peniruan | Deskripsi |
---|---|
SecurityAnonymous | Server tidak dapat meniru atau mengidentifikasi klien. |
SecurityIdentification | Server bisa mendapatkan identitas dan hak istimewa klien, tetapi tidak dapat meniru klien. |
SecurityImpersonation | Server dapat meniru konteks keamanan klien pada sistem lokal. |
SecurityDelegation | Server dapat meniru konteks keamanan klien pada sistem jarak jauh. |
Klien dari koneksi pipa, RPC, atau DDE bernama dapat mengontrol tingkat peniruan. Misalnya, klien pipa bernama dapat memanggil fungsi CreateFile untuk membuka handel ke pipa bernama dan menentukan tingkat peniruan server.
Ketika koneksi pipa, RPC, atau DDE bernama jarak jauh, bendera yang diteruskan ke CreateFile untuk mengatur tingkat peniruan diabaikan. Dalam hal ini, tingkat peniruan klien ditentukan oleh tingkat peniruan yang diaktifkan oleh server, yang diatur oleh bendera pada akun server di layanan direktori. Misalnya, jika server diaktifkan untuk delegasi, tingkat peniruan klien juga akan diatur ke delegasi bahkan jika bendera yang diteruskan ke CreateFile menentukan tingkat peniruan identifikasi.
Klien DDE menggunakan fungsi DdeSetQualityOfService dengan struktur SECURITY_QUALITY_OF_SERVICE untuk menentukan tingkat peniruan. Tingkat SecurityImpersonation adalah default untuk server pipe, RPC, dan DDE bernama. Fungsi ImpersonateSelf, DuplicateToken, dan DuplicateTokenEx memungkinkan pemanggil menentukan tingkat peniruan. Gunakan fungsi GetTokenInformation untuk mengambil tingkat peniruan token akses.
Pada tingkat SecurityImpersonation, sebagian besar tindakan utas terjadi dalam konteks keamanan token peniruan utas daripada dalam token utamaproses yang memiliki utas. Misalnya, jika utas peniru membuka objek yang dapat diamankan, sistem menggunakan token peniruan untuk memeriksa akses utas. Demikian pula, jika utas peniruan membuat objek baru, misalnya dengan memanggil fungsi CreateFile , pemilik objek baru adalah pemilik default dari token akses klien.
Namun, sistem menggunakan token utama proses daripada token peniruan dari utas panggilan dalam situasi berikut:
- Jika utas peniruan memanggil fungsi CreateProcess , proses baru selalu mewarisi token utama proses.
- Untuk fungsi yang memerlukan hak istimewa SE_TCB_NAME, seperti fungsi LogonUser , sistem selalu memeriksa hak istimewa dalam token utama proses.
- Untuk fungsi yang memerlukan hak istimewa SE_AUDIT_NAME, seperti fungsi ObjectOpenAuditAlarm , sistem selalu memeriksa hak istimewa dalam token utama proses.
- Dalam panggilan ke fungsi OpenThreadToken , utas dapat menentukan apakah fungsi menggunakan token peniruan atau token utama untuk menentukan apakah akan memberikan akses yang diminta.