使用python检查文件夹/文件ntfs权限

Posted

技术标签:

【中文标题】使用python检查文件夹/文件ntfs权限【英文标题】:Checking folder/file ntfs permissions using python 【发布时间】:2010-10-28 03:41:02 【问题描述】:

正如问题标题所暗示的那样,我非常想知道检查给定文件或文件夹的 ntfs 权限的方法(提示:这些是您在“安全”选项卡中看到的)。基本上,我需要的是获取文件或目录的路径(在本地机器上,或者最好是在远程机器上的共享上)并获取用户/组列表以及此文件/文件夹的相应权限.最终,应用程序将遍历目录树,读取每个对象的权限并相应地处理它们。

现在,我可以想出很多方法来做到这一点:

解析 cacls.exe 输出 - 很容易完成,但是,除非我遗漏了什么,否则 cacls.exe 仅以 R|W|C|F(读/写/更改/完整)的形式提供权限,即不足(我需要获得“列出文件夹内容”等权限,也需要扩展权限) xcacls.exe 或 xcacls.vbs 输出 -- 是的,它们为我提供了我需要的所有权限,但它们的工作速度非常慢,xcacls.vbs 大约需要一秒钟才能获得本地系统文件的权限。这样的速度是不能接受的 win32security(它围绕着 winapi,对吗?)——我确信它可以像这样处理,但我宁愿不重新发明***

我还有什么遗漏的吗?

【问题讨论】:

我认为 win32security 是你想要的。它确实是 Windows API 的包装器。您是否担心它太低级? 好吧,如果这是唯一的方法,我还不如使用 win32security 来做,但这就像滚动我自己的 cacls,这就是为什么我将其称为重新发明***。跨度> 嗯,首先,cacls 并没有完成 Win API 所做的所有事情(显然,包括您想要做的事情)。其次,调用 API(即使是通过绑定)可能会比转至另一个程序并解析输出要快得多。 【参考方案1】:

除非您喜欢自己动手,否则 win32security 是不错的选择。这里有一个例子的开头:

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

或者你可以直接查看 svn trunk:

svn cohttp://winsys.googlecode.com/svn/trunkwinsys

要做你描述的事情(稍微猜测一下确切的要求)你可以这样做:

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

【讨论】:

哦,蒂姆,非常感谢!我要说的是,我已经想出了如何去做(使用 win32security,是的),但我刚刚意识到,我是使用 your 网站上的示例做到的!这是什么巧合! :)

以上是关于使用python检查文件夹/文件ntfs权限的主要内容,如果未能解决你的问题,请参考以下文章

Linux文件系统,ntfs分区显示只读文件系统,提示超级快损坏

苹果电脑不能拷贝文件到移动硬盘怎么解决?

如何在 Python 中通过 SFTP 检查 S_ISREG 以获取 Windows NTFS 文件?

确定是不是继承了 ntfs 权限的可靠方法

NTFS权限和共享权限有何区别?

MacOS 读写 NTFS 即插即用.