ユーザーのADアカウントが作成されたときに、Pythonを使用して新しい個人用フォルダーを作成しています。フォルダは作成されていますが、権限が正しくありません。Pythonは、新しく作成されたフォルダーにユーザーを追加して、ユーザーのアクセス許可を変更できますか?どこからコーディングを始めればいいのかわかりません。
8 に答える
pywin32win32security
の一部であるモジュールが必要です。これは、やりたいことを実行する例です。
この例では、ファイルの新しい DACL を作成して古いものを置き換えますが、既存の DACL を変更するのは簡単です。次のように、空の DACL を作成するのではなく、セキュリティ記述子から既存の DACL を取得するだけです。
import win32security
import ntsecuritycon as con
FILENAME = "whatever"
userx, domain, type = win32security.LookupAccountName ("", "User X")
usery, domain, type = win32security.LookupAccountName ("", "User Y")
sd = win32security.GetFileSecurity(FILENAME, win32security.DACL_SECURITY_INFORMATION)
dacl = sd.GetSecurityDescriptorDacl() # instead of dacl = win32security.ACL()
dacl.AddAccessAllowedAce(win32security.ACL_REVISION, con.FILE_GENERIC_READ | con.FILE_GENERIC_WRITE, userx)
dacl.AddAccessAllowedAce(win32security.ACL_REVISION, con.FILE_ALL_ACCESS, usery)
sd.SetSecurityDescriptorDacl(1, dacl, 0) # may not be necessary
win32security.SetFileSecurity(FILENAME, win32security.DACL_SECURITY_INFORMATION, sd)
これが最も簡単な解決策です(ユーザーを指定して変更許可を追加することもできます):
command = r'icacls "C:\Users\PC\PycharmProjects\IIS_configuration\someFolder" /grant "userA":(OI)(CI)RWRXM'
appcmd = subprocess.run(command, shell=True, check=True)
それがどのように機能するかを確認するには、CMD を介して実行できます。
icacls "C:\Users\PC\PycharmProjects\IIS_configuration\someFolder" /grant "userA":(OI)(CI)RWRXM
私は icacls (windows コマンド) を使用しました。これに関する情報は、こことここにあります。
そして、このコマンドを python subprocessで実行しました
この特定のコマンドに関する情報:
- "C:\Users\PC\PycharmProjects\IIS_configuration\someFolder" - dst
- userA - ユーザーの名前
- (OI) - オブジェクト継承
- (CI) -コンテナ継承
- RWRXM - 各単語は前提を示します。R が読み取られ、RX が読み取られてアクセスが実行されるように (info here )。
os.chmodを使用する
http://docs.python.org/library/os.html#os.chmod
os.chmodで権限を設定できます
modは基数8で記述されており、バイナリに変換すると次のようになります。
000 111 111 000 rwx rwx rwx最初のrwxは所有者用、2番目はグループ用、3番目は世界用です。
r =読み取り、w =書き込み、x=実行
最も頻繁に表示される権限は7読み取り/書き込み/実行です-内容を表示するにはディレクトリに対して実行する必要があります6読み取り/書き込み4読み取り専用
os.chmodを使用する場合は、8進表記を使用するのが最も理にかなっています。
os.chmod('myfile',0o666) # read/write by everyone
os.chmod('myfile',0o644) # read/write by me, readable for everone else
内容を確認できるように、通常はディレクトリを「実行可能」にする必要があると言ったことを思い出してください。
os.chmod('mydir',0o777) # read/write by everyone
os.chmod('mydir',0o755) # read/write by me, readable for everone else
注:0o777の構文は、Python2.6および3以降用です。それ以外の場合、2シリーズの場合は0777です。2.6はどちらの構文も受け入れるため、選択する構文は、下位互換性があるか下位互換性があるかによって異なります。
まず、ユーザーのプロファイル ディレクトリが存在しない場合は自動的に作成され、アクセス許可は適切な既定値に設定されます。Python を使用する特別な必要がない限り、Windows にフォルダーを作成させ、アクセス許可を整理させることができます。
とにかく python を使用したい場合は、正しい引数で cacls または icacls を呼び出すために os.system() を使用することを検討できます。アクセス許可の代わりに、フォルダーの所有者を、フォルダーを所有するユーザーに変更するだけでよい場合があります。
あなたの努力を頑張ってください。