2017-01-13 19 views
0

私はWindows 2012 R2で動作しています。icaclsを使用してバッチファイルを使用してNTFSパーマネントを管理しようとしています。バッチファイルはほぼ完成しているので、私はそれを管理する経験がはるかに少ない人に手渡しますので、可能な限り簡単にするようにしています。icaclsはドライブのルートを置き換えます

ドライブルート(E :)が変更されている場合は、すべてのpermを自動的に置き換えたいと考えています。ドライブ全体が既知の構成に復元されます。次に、すべてのサブディレクトリに継承を伝播するルート(管理者、バックアップなど)にいくつかのpermを設定します。 (おそらく、これらの2つの操作は同じicacls呼び出しです)多くのサブディレクトリがあり、それぞれに異なる権限が適用されます。私は、バッチファイルのサブディレクトリ部分を完全に成功させました。

icaclsを使用してドライブルートのすべてのアクセス権を置換できませんでした。私が試してみました:

ICACLS.EXE "E:" /inheritance:r /grant:r "Administrators":(OI)(CI)F /T /Q 

ICACLS.EXE "E:" /grant:r "Administrators":(OI)(CI)F /T /Q 

の両方をなし成功を収めて。テストのために、E:へのアクセス権を持つ別のグループを追加しました。バッチファイルが正常に実行されて完了すると、その別のグループにはまだアクセス権があります。それはEのACLから削除されませんでした:

アイデア?

+0

? "dir/q"はルートの所有者を直接表示しませんが、 "dir" C:\ Program Files "/ q/ad"は ".." - ルートフォルダを表示します。私にとっては「信頼できるインストーラ」であり、管理者としてもicaclsを使用できないその所有者の他のフォルダが見つかりました。しかし、私はtakeownを使用して所有者をbuildin \ admisitratorsに変更することができます – joeking

+0

私は(または割り当てられていますか?)所有権を私たちのドメインの管理者グループに、基本的に指示します。不思議なことに、私がそうしたときに、プロパティ>>セキュリティ>>詳細を表示すると、 "SYSTEM"が所有者であることが示されます。私はこれが同等であると仮定します。いずれにせよ、私は任意の便利なアカウントに所有権を取ることができます。私の問題は、ICACLSが私の目標を達成するために何を呼び出すのか分かりません。 – Derek

+0

どのような問題が残っていますか?通常、ドライブのルートはTrustedInstallerが所有します。これは、管理者でさえシステムファイルを変更できないようにするために、VistaでUAC用に作成された仮想ユーザーです。 CMDの行から、 "takeown/f C:¥/ A"は所有者をBuiltin \ Administratorsに変更する必要があります。管理者が所有すると、ICACLSを使用して権限を変更できます。 TAKEOWNが成功した後、ICACLSはまだ失敗しますか? – joeking

答えて

0

ハァッ、面白い... ICACLSのように見えますが、単にすべての権限を置き換えるのは難しいです。

したがって、まずTAKEOWNを使用して、TrustedInstallerから所有者を変更して、UACの保証を無効にします。管理者\ \/gの組み込み:

その後 CACLS C

fはまた、ICACLS /復元でこれを行うことができますが、それはあなたがACLファイルを準備する必要があります。 ACLファイルにはファイル名が含まれているため、作成するのが面倒です。

これを行うための簡単なBATファイル。

注:ICACLSは本当にうるさいです:

  • ACLFileはACLFileは、その中のファイルを指名した、と名前が与えられた相対 にパスされているUTF-16
  • するneeedようですicaclsコマンドラインで
  • icaclsコマンドラインのフォルダ名の末尾に "\" を含めることはできません。ルートディレクトリの所有者である

@echo off 
setlocal 

:: Change the ACL to "BUILTIN\Administrators:(OI)(CI)(F)"  
if exist aclfile.txt del aclfile.txt 

if "%1"=="" echo Requires a filename && exit /b 1 

:: The ACL file is required to be UTF-16 encoded. 
:: Use "icacls FILE /save ACLFILE.txt on a sample 
:: file to get the exact SDDL you want to use 
cmd /u /c echo %~n1 > aclfile.txt 
cmd /u /c echo D:P(A;OICI;FA;;;BA)>>aclfile.txt 

:: Ick, trim the trailing \ 
:: ICACLS is really dumb. 
set pathname=%~dp1 
set pathname=%pathname:~,-1% 
icacls "%pathname%" /restore aclfile.txt 
+0

問題は、「/ C」フラグがCACLSとICACLSで異なることです。 CACLSでは、NTFSアクセス拒否エラーのみが無視されます。 (ICACLSはすべてのエラーを無視します)他のすべてのエラー(ファイルパスの長さが長すぎるなど、多くの場所で発生しています)は、その場でCACLSコマンドを強制終了します.CACLSはドライブを未知の状態、設定されています。私は何かが欠けているはずだと思うが、ICACLSを使ってドライブのルートにパーマを設定するのは難しいことではない。 – Derek

+0

あなたのドライブの状態を知ることは不可能ですが、ドライブのすべてのアクセス権を置き換えようとするなら、まずtakeown/f C:\/a/r/skipsl/dyのすべてを取り除く必要があります。 rootの権限を置き換え、最後に "root"の下にある "icacls/reset/t"を置き換えます。 私はあなたが何かを欠けているとは思わない、WindowsのACLは本当の痛みです。上記のバットファイルの訂正を参照してください。 – joeking

+0

私はあなたがもっと選択的かもしれないと思う...すべての所有権を取るのではなく、代わりにICACLS/reset/tを使ってエラーを記録する。その後、失敗したアイテムだけを引き取る。これは、ファイルの元の所有権を保持することが重要である場合にのみ重要です。 – joeking

関連する問題