11

質問のタイトルが示唆しているように、特定のファイルまたはフォルダーの ntfs アクセス許可を確認する方法を知りたいです (ヒント: これらは [セキュリティ] タブに表示されるものです)。基本的に、ファイルまたはディレクトリ (ローカル マシン上、またはできればリモート マシン上の共有上) へのパスを取得し、ユーザー/グループのリストと、このファイル/フォルダーに対応するアクセス許可を取得する必要があります。 . 最終的に、アプリケーションはディレクトリ ツリーを走査し、各オブジェクトの権限を読み取り、それに応じて処理します。

今、私はそれを行うためのいくつかの方法を考えることができます:

  • cacls.exe の出力を解析します -- 簡単に実行できますが、何か不足していない限り、cacls.exe は R|W|C|F (読み取り/書き込み/変更/完全) の形式でアクセス許可を与えるだけであり、これでは不十分です (I 「フォルダの内容をリストする」などの権限、拡張権限も取得する必要があります)
  • xcacls.exe または xcacls.vbs の出力 -- はい、必要な権限はすべて与えられますが、動作が非常に遅く、xcacls.vbs がローカル システム ファイルの権限を取得するのに約 1 秒かかります。そのような速度は受け入れられません
  • win32security (winapi をラップしていますよね?) -- このように処理できると確信していますが、車輪の再発明はしたくありません。

私がここで見逃しているものは他にありますか?

4

1 に答える 1

17

あなたがあなた自身を転がすのが好きでない限り、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トランクをチェックアウトすることもできます。

svn co 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

于 2009-05-22T13:56:50.003 に答える