正如问题标题可能暗示的那样,我非常想知道如何检查给定文件或文件夹的 ntfs 权限(提示:这些是您在“安全”选项卡中看到的权限)。基本上,我需要的是获取文件或目录的路径(在本地计算机上,或者最好在远程计算机上的共享上)并获取用户/组的列表以及该文件/文件夹的相应权限。最终,应用程序将遍历目录树,读取每个对象的权限并进行相应的处理。
现在,我可以想到很多方法来做到这一点:
- 解析 cacls.exe 输出——很容易完成,但是,除非我遗漏了某些东西,否则 cacls.exe 只以 R|W|C|F (读/写/更改/完整)形式提供权限,这是不够的(我需要获得“列出文件夹内容”等权限,还有扩展权限)
- xcacls.exe 或 xcacls.vbs 输出 - 是的,它们给了我所需的所有权限,但它们的工作速度非常慢,xcacls.vbs 大约需要一秒钟才能获得本地系统文件的权限。这样的速度让人无法接受
- win32security(它环绕 winapi,对吧?)——我确信它可以这样处理,但我不想重新发明轮子
我还缺少什么吗?
除非您喜欢自己动手,否则 win32security 是您的最佳选择。这里是一个例子的开始:
http://timgolden.me.uk/python/win32_how_do_i/get-the-owner-of-a-file.html http://timgolden.me.uk/python/win32_how_do_i/get-the-owner-of-a-file.html
如果你想生活得稍微危险一点(!),我正在开发的 winsys 包就是为了完成你所追求的而设计的。您可以在此处获取开发版本的 MSI:
http://timgolden.me.uk/python/downloads/WinSys-0.4.win32-py2.6.msi http://timgolden.me.uk/python/downloads/WinSys-0.4.win32-py2.6.msi
或者你可以只检查 svn trunk:
svn co http://winsys.googlecode.com/svn/trunk http://winsys.googlecode.com/svn/trunk winsys
要执行您所描述的操作(稍微猜测确切的要求),您可以这样做:
import codecs
from winsys import fs
base = "c:/temp"
with codecs.open ("permissions.log", "wb", encoding="utf8") as log:
for f in fs.flat (base):
log.write ("\n" + f.filepath.relative_to (base) + "\n")
for ace in f.security ().dacl:
access_flags = fs.FILE_ACCESS.names_from_value (ace.access)
log.write (u" %s => %s\n" % (ace.trustee, ", ".join (access_flags)))
TJG
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)