2009-05-22 16 views
9

質問タイトルが示唆するように、私は与えられたファイルやフォルダのntfsパーミッションをチェックする方法を知りたいと思います。(ヒント: 「セキュリティ」タブ)。基本的に、私が必要とするのは、ファイルまたはディレクトリへのパス(ローカルマシン上、またはリモートマシン上の共有フォルダ)を取得し、このファイル/フォルダに対するユーザ/グループのリストと対応する権限を取得することです。最終的に、アプリケーションはディレクトリツリーを走査し、各オブジェクトのアクセス権を読み取り、それに応じて処理します。pythonを使ってフォルダ/ファイルのntfsパーミッションを確認する

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

  • 解析CACLS.EXE出力 - 簡単に行え、しかし、イムは、何かが欠けていない限り、CACLS.EXEだけでアクセス許可を与えますR | W | C | F(読み込み/書き込み/変更/完全)の形式では不十分です(「フォルダの内容を一覧表示する」などのアクセス許可を取得する必要もあります)
  • xcacls.exeまたはxcacls.vbs出力 - はい、彼らは私に必要なすべての権限を与えますが、彼らは恐ろしいほど遅く働き、xcacls.vbsはローカルシステムファイルに対する権限を得るのに約1秒かかります。私はそれがこのように扱うことができますが、私はむしろホイール

を改革ではないだろうと確信して私は何か他のものがあります - そのような速度はは(?それは右、WINAPIを包み込む)

  • win32security 受け入れられませんここに行方不明?

  • +2

    私はwin32securityがあなたが望むものだと思います。これは実際にはWindows APIのラッパーです。それが低すぎると懸念していますか? –

    +0

    それが唯一の方法であれば、私はwin32securityを使ってそれを行うこともできますが、それは自分のcaclsを動かすようなものになるでしょう。なぜ私はそれをホイールを再発明すると言いましたか? – shylent

    +0

    まず、caclsは、Win APIが(明らかに、あなたがしたいことを含めて)すべてのことをするわけではありません。第2に、APIを呼び出すことは(バインディングを介しても)おそらく、はるかに速くなり、別のプログラムにシェルターして出力を解析することになります。 –

    答えて

    16

    あなた自身を気遣っていない限り、win32securityは道のりです。ここでは例の始まりがあります:

    http://timgolden.me.uk/python/win32_how_do_i/get-the-owner-of-a-file.html

    あなたは少し危険な住みたい場合は、私の進行中のwinsysパッケージはあなたが後にしている正確に何をするように設計されました(!)。あなたはここでのdevのバージョンのMSIを取得することができます:

    http://timgolden.me.uk/python/downloads/WinSys-0.4.win32-py2.6.msi

    またはあなただけのsvnトランクをチェックアウトすることができます

    SVNはあなたが(で少し推測について説明何を行うには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

    :あなたがこれを行うことができます正確な要件)
    +4

    ああ、ティム、ありがとう!私はすでに(win32securityを使用して)それを行う方法を考え出したと言っていましたが、私は_your_サイトの例を使って行ったことに気付きました!どのような偶然のことがそれです! :) – shylent