web-dev-qa-db-ja.com

ProgramFilesと同じ権限で外付けドライブ上のプログラムを保護する

スペースを節約するために、一部のプログラムをProgramFilesおよびProgramFiles(x86)からセカンダリドライブの別のフォルダーに移動しました。ただし、ユーザーレベルのアクセス許可を持つすべてのプログラムがフォルダーに書き込むことができるようになったため、プログラムを変更/バックドアできます。 Program Filesは管理者のみが書き込み可能であるため、これはProgramFilesでは不可能です。

Program Filesと同じレベルの保護をフォルダに適用するにはどうすればよいですか?ありがとう

3
Richard V.

ドライブはNTFSを使用している必要があります。 FAT/exFATではこれを行うことはできません。

NTFSボリュームでは、このような保護はすべて、icacls.exeSet-Acl、またはフォルダの[プロパティ]ウィンドウの[セキュリティ]タブで変更できる通常のファイルACLに基づいています。

既存のACLのクローンを作成する簡単な方法は、PowerShellを使用することです(同じ有効なACLを生成しますが、順序が少し異なります)。

PS> Get-Acl "C:\Program Files" | Set-Acl D:\Games

...またはicaclsのバックアップ/復元機能を使用する(正確なコピーを生成する):

CMD> cd/d "C:\Program Files"
CMD> icacls . /save C:\theacl.txt
CMD> cd/d D:\Games
CMD> icacls . /restore C:\theacl.txt

または、メインフォルダーの継承を無効にし、既存のアクセスエントリを削除して、ACLを最初から作成することもできます。

> icacls D:\Games /inheritance:r
> icacls D:\Games /grant SYSTEM:(OI)(CI)F
> icacls D:\Games /grant "NT SERVICE\TrustedInstaller:(OI)(CI)F"
> icacls D:\Games /grant Administrators:(OI)(CI)F
> icacls D:\Games /grant Users:(OI)(CI)RX
> icacls D:\Games\Foo\Screenshots /grant Users:(OI)(CI)M

Icaclsでは、「I」は「継承」を意味し、「OI」は「ファイルによって継承可能」(オブジェクト)を意味し、「CI」は「サブフォルダーによって継承可能」(コンテナー)を意味し、「IO」は「継承のみ」を意味します(子に適用されますがオブジェクト自体ではありません)。 icaclsと[セキュリティ]ウィンドウのどちらを使用するかは関係ありません。どちらも同じオプションがあります。

すべてのサブフォルダーが継承されたアクセス許可を使用しているかどうかを確認することを忘れないでください。いずれかのサブフォルダーで継承が無効になっている場合、設定した保護は自動的に受けられません。 icacls D:\Games\Foo /reset /tでうまくいきます。

最後のステップとして、ディレクトリの所有権をたとえばに譲渡します。管理者またはTrustedInstallerでさえ、所有者は常にアクセス許可を編集することが許可されています(したがって、マルウェアは可能な限り実行されます技術的に自身にフルアクセスを許可します):

> takeown /f "D:\My Programs" /a /r
6
user1686