Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Uygun bir isteğe bağlı erişim denetimi listesi (DACL) oluşturmak, uygulama geliştirmenin gerekli ve önemli bir parçasıdır. NULL DACL tüm kullanıcılara tüm erişim türlerine izin verir çünkü NULL DACL'leri kullanmayın.
Warning
NULL DACL, güvenilmeyen kullanıcılar ve uzak saldırganlar da dahil olmak üzere herkese tam erişim verir. Hiçbir zaman güvenli hale getirilebilir nesnelerde NULL DACL kullanmayın. Geniş erişime izin vermeniz gerekiyorsa, gereken en düşük izinleri veren açık bir DACL oluşturun. Boş bir DACL (sıfır ACL'ye sahip bir DACL) tüm erişimi reddeder; hangi izinlerin verildiğinden emin değilseniz bu, güvenli varsayılan değerdir.
Aşağıdaki örnekte bir DACL'nin düzgün bir şekilde nasıl oluşturulacağı gösterilmektedir. Örnek, bir DACL'de verilen ve reddedilen erişim denetimini tanımlamak için güvenlik tanımlayıcısı tanım dilini (SDDL) kullanan CreateMyDACL adlı bir işlev içerir. Uygulamanızın nesnelerine farklı erişim sağlamak için CreateMyDACL işlevini gerektiği gibi değiştirin.
Örnekte:
Ana işlev, createMyDACL işlevine bir SECURITY_ATTRIBUTES yapısının adresini geçirir.
CreateMyDACL işlevi, aşağıdakileri yapmak için SDDL dizelerini kullanır:
- Konuk ve anonim oturum açma kullanıcılarına erişimi reddedin.
- Kimliği doğrulanmış kullanıcılara okuma/yazma/yürütme erişimine izin verin.
- Yöneticiler için tam denetime izin verin.
SDDL dize biçimleri hakkında daha fazla bilgi için bkz. Güvenlik Tanımlayıcısı Dize Biçimi.
CreateMyDACL işlevi, SDDL dizelerini bir güvenlik tanımlayıcısına dönüştürmek için ConvertStringSecurityDescriptorToSecurityDescriptor işlevini çağırır. Güvenlik tanımlayıcısı, SECURITY_ATTRIBUTES yapısının lpSecurityDescriptor üyesi tarafından işaret edilir. CreateMyDACL, ConvertStringSecurityDescriptorToSecurityDescriptor'dan dönüş değerini ana işleve gönderir.
Ana işlev, CreateDirectory işlevi tarafından oluşturulan yeni bir klasörün DACL'sini belirtmek üzere güncelleştirilmiş SECURITY_ATTRIBUTES yapısını kullanır.
Ana işlev SECURITY_ATTRIBUTES yapısını kullanarak tamamlandığında, ana işlev LocalFree işlevini çağırarak lpSecurityDescriptor üyesi için ayrılan belleği serbest bırakır.
Note
ConvertStringSecurityDescriptorToSecurityDescriptor gibi SDDL işlevlerini başarıyla derlemek için _WIN32_WINNT sabitini 0x0500 veya daha büyük olarak tanımlamanız gerekir. Modern uygulamalar için en az Windows 10 (0x0A00) hedefle.
#include <windows.h>
#include <sddl.h>
#include <stdio.h>
#pragma comment(lib, "advapi32.lib")
BOOL CreateMyDACL(SECURITY_ATTRIBUTES *);
void main()
{
SECURITY_ATTRIBUTES sa;
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.bInheritHandle = FALSE;
// Call function to set the DACL. The DACL
// is set in the SECURITY_ATTRIBUTES
// lpSecurityDescriptor member.
if (!CreateMyDACL(&sa))
{
// Error encountered; generate message and exit.
printf("Failed CreateMyDACL\n");
exit(1);
}
// Use the updated SECURITY_ATTRIBUTES to specify
// security attributes for securable objects.
// This example uses security attributes during
// creation of a new directory.
if (0 == CreateDirectory(TEXT("C:\\MyFolder"), &sa))
{
// Error encountered; generate message and exit.
printf("Failed CreateDirectory\n");
exit(1);
}
// Free the memory allocated for the SECURITY_DESCRIPTOR.
if (NULL != LocalFree(sa.lpSecurityDescriptor))
{
// Error encountered; generate message and exit.
printf("Failed LocalFree\n");
exit(1);
}
}
// CreateMyDACL.
// Create a security descriptor that contains the DACL
// you want.
// This function uses SDDL to make Deny and Allow ACEs.
//
// Parameter:
// SECURITY_ATTRIBUTES * pSA
// Pointer to a SECURITY_ATTRIBUTES structure. It is your
// responsibility to properly initialize the
// structure and to free the structure's
// lpSecurityDescriptor member when you have
// finished using it. To free the structure's
// lpSecurityDescriptor member, call the
// LocalFree function.
//
// Return value:
// FALSE if the address to the structure is NULL.
// Otherwise, this function returns the value from the
// ConvertStringSecurityDescriptorToSecurityDescriptor
// function.
BOOL CreateMyDACL(SECURITY_ATTRIBUTES * pSA)
{
// Define the SDDL for the DACL. This example sets
// the following access:
// Built-in guests are denied all access.
// Anonymous logon is denied all access.
// Authenticated users are allowed
// read/write/execute access.
// Administrators are allowed full control.
// Modify these values as needed to generate the proper
// DACL for your application.
TCHAR * szSD = TEXT("D:") // Discretionary ACL
TEXT("(D;OICI;GA;;;BG)") // Deny access to
// built-in guests
TEXT("(D;OICI;GA;;;AN)") // Deny access to
// anonymous logon
TEXT("(A;OICI;GRGWGX;;;AU)") // Allow
// read/write/execute
// to authenticated
// users
TEXT("(A;OICI;GA;;;BA)"); // Allow full control
// to administrators
if (NULL == pSA)
return FALSE;
return ConvertStringSecurityDescriptorToSecurityDescriptor(
szSD,
SDDL_REVISION_1,
&(pSA->lpSecurityDescriptor),
NULL);
}