2016-10-05 9 views
3

私は、Pythonで新しいディレクトリをスキャンするWindowsサービスを作成しました。新しいフォルダが作成されるたびに、サービスによって4つのサブフォルダが作成され、それぞれに異なる権限セットが付与されます。問題は、これらのサブフォルダ内、任意のフォルダが作成されたということである(基本的に三次のレベル、またはサブサブフォルダ)(右クリック - >プロパティ - >セキュリティ経由)の権限にアクセスするとき は、次のエラーがあります。自動的にフォルダのアクセス許可を与えるPythonのWindowsサービスは、重複したACEを作成する

「テストフォルダのアクセス許可が正しくないため、一部のエントリが無効になる可能性があります」

繰り返して、フォルダAがスキャンされます。フォルダAにフォルダBを作成すると、フォルダ内にフォルダ1,2,3,4が作成され、スクリプトによって与えられた権限がB内に作成されます。 (1,2,3,4)内で作成されたフォルダには、ディレクトリアクセス権を開く際に上記のエラーが発生します。さらに、高度な機能をクリックすると、SYSTEM、Administrators、およびAuthenticated Usersのセキュリティエントリが2回表示されます。

コードの関連部分は、次のとおり

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

任意の助けを大幅に高く評価されるで見つかった例に基づいています。

*** ADDように編集:

これは、サービスによって作成されたフォルダ上ます。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の出力であります自動的に作成されたフォルダ、重複したエントリがある1内:

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) 

サービスによって監視されているフォルダがセンターと呼ばれているが、私は内に作成したフォルダは、CAですlledテスト。サービス内で "要求"が作成され、要求の範囲内で "テストフォルダ"が作成されました(はい、私はフォルダに名前をつけるのが賢明です)。

EDITED AGAIN:

間違ったコードをコピーしました。私はAddAccessAllowedAceExを使用し、AddAccessAllowedAceは使用しませんでした。多くのお詫び...

+0

システム、管理者、認証されたユーザーは 'rw'ですか? Windowsのサブフォルダは、親フォルダのアクセス許可を継承する傾向があります。これらの設定が継承され、それらを再度追加すると、それがダブルスのソースになる可能性があります。 – CAB

+0

@CABいいえ、彼らはrwにいません。 – DanielG

+0

作成したサブフォルダのいずれかにicacls.exeの出力を表示してください。 – eryksun

答えて

関連する問題