web-dev-qa-db-ja.com

Windows:壊れた権限継承を修正する方法?

私たちのネットワーク共有では、あらゆる種類の権限継承が壊れています。

ほんの一例:フォルダー "D:\ Shares\PublicRelations"には、グループ "PublicRelations"と "HR"(両方とも完全継承セット)に対するフルアクセスがあります。ただし、継承がアクティブであっても、フォルダー "D:\ Shares\PublicRelations\SomeTopic"にはグループ "HR"の継承されたアクセス許可がありません。

これはおそらく、誰かがトップフォルダーに「HR」を追加し、何らかの理由で伝播が失敗したときに発生しました。

この種の問題を自動的に修正するツールはありますか?

理想的には、パラメーター "D:\ Shares"を指定して呼び出すだけです。その後、すべてのディレクトリを走査し、継承されたすべてのアクセス許可を必要に応じて修正します。

1
Andreas

私はそれをC#でコーディングしてしまいました:

  • SeBackupPrivilegeおよびSeRestorePrivilegeを取得します(ユーザーはどこでも読み書きできます)。
  • Windowsが長いファイル名を処理するようにパスを書き換えます(ローカルパスの場合:プレフィックス@ "\\?\")
  • ディレクトリツリーをたどります
  • 各要素に対してACLをロードします
  • 明示的なルールを追加して、もう一度削除してください。これは、ライブラリをだまして、ACLが変更されたと考えさせます。
  • ACLを書く
  • IOライブラリーは、変更されていないACLを書き込みながら、継承の問題を修正します。

また、修正が必要かどうかのチェックも実装しました。しかし、確実に機能させるには、いくつかの作業が必要でした。

  • 伝播フラグと継承フラグを正しく解釈する必要があります。
  • 場合によっては、アクセス許可が途中でマージされることもあれば、マージされないこともあります。最後に、それらが同じ意味であるかどうかを確認しました。
  • 特別な権限 "GENERIC_(READ | WRITE | EXECUTE | ALL)"に対処する

100万ファイル共有で約40.000個のエラーを検出して修正しました。

1
Andreas

icacls <folder> /t /resetは、デフォルトの継承可能な権限ですべての権限をリセットします。

Technetリファレンス

0
Lenniey