gpt4 book ai didi

自动授予文件夹权限的 Python Windows 服务会创建重复的 ACE

转载 作者:可可西里 更新时间:2023-11-01 09:36:44 26 4
gpt4 key购买 nike

我用 Python 编写了一个 Windows 服务,用于扫描给定目录中的新文件夹。每当创建新文件夹时,该服务都会创建 4 个子文件夹并为每个子文件夹授予一组不同的权限。问题是在这些子文件夹中,创建的任何文件夹(基本上是第三级或子子文件夹)访问权限时出现如下错误(通过右键->属性->安全):

“test文件夹权限排序错误,可能导致部分条目无效”

重申一下,我们有一个被扫描的文件夹 A。当我在文件夹 A 中创建文件夹 B 时,将在 B 中创建文件夹 1、2、3、4,并使用脚本提供的权限。在(1,2,3,4)内创建的任何文件夹在打开目录权限时出现上述错误。此外,单击高级时,SYSTEM、Administrators 和 Authenticated Users 的安全条目会出现两次。

代码的相关部分是:

import win32security
import ntsecuritycon

for rw_user in rw:
sd=win32security.GetFileSecurity(in_dir+"\\"+dir_,win32security.DACL_SECURITY_INFORMATION)
dacl=sd.GetSecurityDescriptorDacl()
dacl.AddAccessAllowedAceEx(sec.ACL_REVISION_DS,sec.OBJECT_INHERIT_ACE|sec.CONTAINER_INHERIT_ACE,con.FILE_GENERIC_READ|con.FILE_ADD_FILE,p_dict[rw_user][0])

sd.SetSecurityDescriptorDacl(1,dacl,0)
win32security.SetFileSecurity(in_dir+"\\"+dir_,win32security.DACL_SECURITY_INFORMATION,sd)

这基于在 Setting folder permissions in Windows using Python 中找到的示例

非常感谢任何帮助。

***编辑添加:

这是服务创建的文件夹中 icacls.exe 的输出:

PS C:\> icacls "C:\directory monitor\main\center\test\request"
C:\directory monitor\main\center\test\request PNIM\jmtzlilmi:(OI)(CI)(R,WD)
PNIM\jmtzlilmi:(OI)(CI)(W,Rc)
PNIM\jmtzlilmi:(OI)(CI)(R,WD)
PNIM\jmtzlilmi:(OI)(CI)(W,Rc)
BUILTIN\Administrators:(I)(F)
BUILTIN\Administrators:(I)(OI)(CI)(IO)(F)
NT AUTHORITY\SYSTEM:(I)(F)
NT AUTHORITY\SYSTEM:(I)(OI)(CI)(IO)(F)
BUILTIN\Users:(I)(OI)(CI)(RX)
NT AUTHORITY\Authenticated Users:(I)(M)
NT AUTHORITY\Authenticated Users:(I)(OI)(CI)(IO)(M)

这是我在自动创建的文件夹中创建的目录中 icacls 的输出,该文件夹具有重复条目:

PS C:\> icacls "C:\directory monitor\main\center\test\request\test folder"
C:\directory monitor\main\center\test\request\test folder PNIM\jmtzlilmi:(OI)(CI)(R,WD)
PNIM\jmtzlilmi:(OI)(CI)(W,Rc)
PNIM\jmtzlilmi:(OI)(CI)(R,WD)
PNIM\jmtzlilmi:(OI)(CI)(W,Rc)
BUILTIN\Administrators:(F)
BUILTIN\Administrators:(I)(OI)(CI)(IO)(F)
NT AUTHORITY\SYSTEM:(F)
NT AUTHORITY\SYSTEM:(I)(OI)(CI)(IO)(F)
BUILTIN\Users:(OI)(CI)(RX)
NT AUTHORITY\Authenticated Users:(M)
NT AUTHORITY\Authenticated Users:(I)(OI)(CI)(IO)(M)

服务监控的文件夹名为 center,我在其中创建的文件夹名为 test。该服务然后在测试中创建“请求”,我在请求中创建“测试文件夹”(是的,我很擅长命名文件夹,我知道。它在生产中更加连贯。)

再次编辑:

复制了错误的代码。我使用了 AddAccessAllowedAceEx 而不是 AddAccessAllowedAce。非常抱歉...

最佳答案

所以这里的问题出在 win32security.SetFileSecurity() 函数中。根据 MSDN,此函数已过时(请参阅:https://msdn.microsoft.com/en-us/library/windows/desktop/aa379577(v=vs.85).aspx)并已被 SetNamedSecurityInfo 取代。我切换了,一切似乎都运行良好。不管怎么说,还是要谢谢你!

关于自动授予文件夹权限的 Python Windows 服务会创建重复的 ACE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39876729/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com