SECURITY_ATTRIBUTES 实现最低权限总结

SECURITY_ATTRIBUTES 是 Windows 操作系统提供的一种实现最低权限的方法,可以应用在创建进程、打开文件、创建命名管道等场景中。

SECURITY_ATTRIBUTES 中包含一个标识符和两个指针,用于指定对象的安全描述符以及确定这个对象是否能被继承。下面分别详细介绍一下这三个参数的含义:

1. lpSecurityDescriptor:安全描述符参数指针,用于指定对象的安全属性。安全描述符是一组用于描述对象(如文件、进程、互斥、命名管道等)安全性质的信息,包括所有者、组、访问控制列表(ACL)以及系统审核等级等。

2. bInheritHandle:指定对象的继承性质,TRUE 表示允许继承,FALSE 表示不允许。如果一个进程创建了一个带有继承属性的对象,并将这个对象的句柄传递给其它进程,那么这个新创建的进程也可以访问这个对象。

3. dwFlags:一些额外的标记选项,目前只有一个标记:SEMAPHORE_ALL_ACCESS。它的作用是在创建信号量时,允许所有的信号量操作,包括增加、减少以及删除等操作。这个标记主要用于调试和开发目的。

如何使用 SECURITY_ATTRIBUTES 实现最低权限?

在 Windows 平台下,为了实现最低权限,可以使用 SECURITY_ATTRIBUTES 参数来指定文件的访问权限,这样就可以保证只有授权用户才能访问。例如,下面代码中的 pBuffer 指向的内存是私有的,并且无法被别的进程(即使是当前用户)读取。

```

DWORD dwDesiredAccess = GENERIC_READ;

DWORD dwShareMode = FILE_SHARE_READ;

LPSECURITY_ATTRIBUTES lpSecurityAttributes = new SECURITY_ATTRIBUTES;

lpSecurityAttributes->nLength = sizeof(SECURITY_ATTRIBUTES);

lpSecurityAttributes->lpSecurityDescriptor = NULL;

lpSecurityAttributes->bInheritHandle = FALSE;

HANDLE hFile = CreateFile("C:\\test.txt", dwDesiredAccess, dwShareMode, lpSecurityAttributes,

OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

if (hFile == INVALID_HANDLE_VALUE)

{

cout << "Failed to open file." << endl;

}

char *pBuffer = new char[256];

DWORD dwBufferLength = 256;

DWORD dwBytesRead = 0;

ReadFile(hFile, pBuffer, dwBufferLength, &dwBytesRead, NULL);

CloseHandle(hFile);

```

在上述代码中,我们使用 CreateFile 方法打开了一个名为 "C:\\test.txt" 的文件,拥有读取权限。在 CreateFile 函数的第四个参数中,我们传递了指向 SECURITY_ATTRIBUTES 变量的指针。还需要注意到,这里的 bInheritHandle 被设置为 FALSE,表示当前的文件句柄不能被其它进程所继承。

使用 SECURITY_ATTRIBUTES 实现最低权限的优势:

1. 安全性高:利用 SECURITY_ATTRIBUTES,可以限制不同用户对具体资源的访问权限,保证了系统的安全性。

2. 灵活性强:程序开发者可以根据不同的业务需求设置不同的权限和安全等级,满足不同用户的需求。

3. 内部实现简单:可以很方便的实现不同权限级别的文件共享等操作,而且操作系统内部实现起来也非常简单。

SECURITY_ATTRIBUTES 的应用场景:

1. 进程安全性设置:通过特定的安全描述符设置进程的安全属性。

2. 打开文件:通过 SECURITY_ATTRIBUTES 指定不同的访问权限、不同的文件共享方式等。

3. 命名管道的访问控制:通过安全描述符来限制对命名管道的访问。

4. 创建共享内存:使用 SECURITY_ATTRIBUTES 实现不同安全级别的共享内存。

比如,在 Win32 API 中,有很多函数可以使用 SECURITY_ATTRIBUTES 参数来实现最低权限,例如 CreateProcess、CreateDirectory、CreateMutex、CreateSemaphore、CreateFile 等等。

最后,我们来看一个 Windows 系统中应用 SECURITY_ATTRIBUTES 的案例:

比如,在 Active Directory 群发邮件系统中,如果管理员设置了某个用户的邮件发送权限,可以使用 SECURITY_ATTRIBUTES 参数来限定每个用户只能够访问自己的邮件,并且不能读取其它用户的邮件。这样能够大大增强系统的安全性,保护用户的隐私。 如果你喜欢我们三七知识分享网站的文章, 欢迎您分享或收藏知识分享网站文章 欢迎您到我们的网站逛逛喔!https://www.37seo.cn/

点赞(81) 打赏

评论列表 共有 1 条评论

好景不长 1年前 回复TA

水至清则无鱼,人至贱则无敌。

立即
投稿
发表
评论
返回
顶部