ICACLSを使ってアクセス権限をコマンドラインで変更する方法

ページ : 1 2 3
<この記事を全て表示する場合はこちらをクリック>

001

Windows Server 2008のICACLSコマンドの使い方について調べてみました。
ICACLSコマンドは、CACLSコマンドに変わるコマンドラインでファイルのアクセス権限を変更出来る新しいコマンドです。

設定されているアクセス権限を調べてみる

まず、ICACLSで現在設定されているアクセス権限を表示させる方法です。
例えばDドライブのtestというフォルダのアクセス権限を調べる場合には、以下のように入力します。

ICACLS D:\test

入力結果は、以下のような結果になります。

C:\Users\Administrator>ICACLS D:\test

D:\test BUILTIN\Administrators:(I)(OI)(CI)(F)
        NT AUTHORITY\SYSTEM:(I)(OI)(CI)(F)
        CREATOR OWNER:(I)(OI)(CI)(IO)(F)
        BUILTIN\Users:(I)(OI)(CI)(RX)
        BUILTIN\Users:(I)(CI)(AD)
        BUILTIN\Users:(I)(CI)(WD)

このフォルダのアクセス権限は、GUI上から見ると以下のように設定されています。

002

なんだか難解ですね。
それでは、フォルダのアクセス権をいったん全て削除して、ICACLSコマンドだけを利用して先ほどの権限を復元してみましょう。
サーバの管理者権限を所持していれば、アクセス権が無くても、以下のコマンドで自分割り当てる事が可能です。

takeown /F D:\test

ただし、ICACLSを利用した以下のコマンドでは、所有者の書き換えを行う事は出来ません。
あくまでICACLSを実行する場合には、処理に対する正しいアクセス権限を持っていなければならないようです。

ICACLS D:\test /setowner administrator

アクセス権限の継承

003

それでは、testフォルダに元の権限を付与してみましょう。

ICACLS D:\test /inheritance:e

実はこの場合は、ややこしく設定する必要はなかったりします。
“/inheritance:e”を設定する事で、親フォルダのアクセス権限の継承が出来るので、削除したアクセス権限を個別に割り当てる必要は無いわけです。

ただしこのままでは厳密に言うと元のアクセス権限とは少しだけ異なっています。”/inheritance:e”でアクセス権限を継承させた場合、以下のようなアクセス権限になります。

004

アクセス権限の削除

既に設定されているアクセス権限を削除する場合には、以下のようにコマンドを実行します。

ICACLS D:\test /remove:g administrator

ただし、継承されているアクセス権限はこの方法で削除する事は出来ません。
継承が有効になっている場合には、先にアクセス権限の継承を無効にし、アクセス権限をコピーする必要があります。

ただし、以下のようにICACLSを実行しても、上手く動作してくれません。

ICACLS D:\test /inheritance:d /remove:g administrator

継承を無効にしてアクセス権限を削除

少し強引ですが、ICACLSをパイプ”|”で繋いで実行する事で、無理やり一行でコマンドを実行させる事は出来ました。
※もっと効率の良いコマンド記載方法ご存じの方いらっしゃれば教えてください。

ICACLS D:\test /inheritance:d | ICACLS D:\test /remove:g administrator



読み取りと実行権限を付与

“読み取りと実行権限”を付与する場合には以下のようにコマンドを入力します。

ICACLS D:\test /grant:r serv00\pnpk:(OI)(CI)(RX)

serv00というのは、ローカルホスト名です。ドメインアカウントを利用する場合には<ドメイン名>\<ユーザ名>という形になります。

変更権限を付与

“変更権限”を付与する場合には以下のようにコマンドを入力します。

ICACLS D:\test /grant:r serv00\pnpk:(OI)(CI)(M)

フルコントロール権限を付与

“フルコントロール権限”を付与する場合には以下のようにコマンドを入力します。

ICACLS D:\test /grant:r serv00\pnpk:(OI)(CI)(F)

アクセス権限をテキストに保存する

アクセス権限をテキストファイルに保存して、そのテキストファイルを元にアクセス権限を復元させる事も出来ます。
ディレクトリ構造だけ作成した後にこのコマンドを利用すれば同じようなフォルダ構造をたくさん作ったり、破損した時なんかに重宝すると思います。

ICACLS D:\test /save c:\temp\acl.txt

サブフォルダのアクセス権限についてもバックアップする場合は、以下のように/Tを追加します。

ICACLS D:\test /save c:\temp\acl.txt /T

アクセス権限をリストから復元する

アクセス権限を保存しておいたテキストから復元する場合には、/restoreスイッチを利用します。
リストア時にはリストアするフォルダが配置してあるディレクトリに対してICACLSを実行する必要があります。

ICACLS D:\ /restore c:\temp\acl.txt

/saveスイッチを実行した時に/Tを付けていた場合、/restore時には自動的にサブフォルダに対してもアクセス権限の書き換えが発生するようです。
また、フォルダ名に日本語が含まれている場合には、保存したテキストデータを開く際にUnicodeを選択しないと文字化けするので注意が必要です。

大量のフォルダに対してアクセス権限の付与をGUIで実行するのはかなり骨の折れる作業です。
そんな時にはICACLSを使って、少しでも楽な管理が出来るようにしたいですよね。



ICACLS <名前> /save <ACL ファイル> [/T] [/C] [/L] [/Q]
    すべての一致する名前の ACL を <ACL ファイル> に格納して、後で /restore で
    指定できるようにします。
        
ICACLS <ディレクトリ> [/substitute <旧 SID> <新 SID> [...]]  /restore:<ACL ファ
    イル> [/C] [/L] [/Q]
    格納されている ACL を <ディレクトリ> 内のファイルに適用します。
        
ICACLS <名前> /setowner <ユーザー> [/T] [/C] [/L] [/Q]
    すべての一致する名前の所有者を変更します。
        
ICACLS <名前> /findsid <SID> [/T] [/C] [/L] [/Q]
    <SID> が明示されている ACL を含むすべての一致する名前を検索します。

ICACLS <名前> /verify [/T] [/C] [/L] [/Q]
    ACL が正規の形式ではないか長さが ACE 数と一致しないすべてのファイルを
    検索します。

ICACLS <名前> /reset [/T] [/C] [/L] [/Q]
    すべての一致するファイルについて、ACL を継承された既定の ACL と置換します。

ICACLS <名前> [/grant[:r] <SID>:perm[...]] 
       [/deny <SID>:perm [...]] 
       [/remove[:g|:d]] <SID>[...]] [/T] [/C] [/L]  [/Q]
       [/setintegritylevel Level:policy[...]]
       
    /grant[:r] <SID>:perm は、指定されたユーザー アクセス権を付与します。
        :r を指定すると、以前に付与されたすべての明示的なアクセス許可は新しい
        アクセス許可に置き換えられます。
        :r を指定しない場合、新しいアクセス許可は以前に付与された明示的な
        アクセス許可に追加されます。
    
    /deny <SID>:perm は、指定されたユーザー アクセス権を明示的に否定します。
        指定されたアクセス許可の明示的な否定 ACE が追加され、明示的な許可内容
        に含まれた同じアクセス許可は削除されます。

    /remove[:[g|d]] <SID> は、ACL 内にあるすべての <SID> を削除します。
        :g を指定すると、その SID に対して許可されたすべての権限を ACL から
        削除します。
        :d を指定すると、その SID に対して否定されたすべての権限を ACL から
        削除します。

    /setintegritylevel [(CI)(OI)] レベルは、すべての一致するファイルに整合性
        ACE を追加します。このレベルは次の 1 つとして指定されます。
            L[ow]
            M[edium]
            H[igh]
        整合性 ACE の継承オプションは、レベルの前に配置でき、
        ディレクトリに対してのみ適用されます。
    
    /inheritance:e|d|r
        e - 継承を有効にします。
        d - 継承を無効にし、ACE をコピーします。 
        r - 継承された ACE をすべて削除します。

        
注意:
    <SID> は数値形式またはフレンドリ名形式で指定できます。数値形式の場合は、
    SID の始めに * を付けます。
    
    /T は、<名前> で指定されたディレクトリ以下のすべての一致するファイルと
        ディレクトリに対してこの処理が実行されることを指定します。
    
    /C は、どのようなファイル エラーが発生してもこの処理が続行されることを
        指定します。ただしエラー メッセージは表示されます。
  
    /L は、この処理がターゲットではなくシンボリック リンク自体に対して実行
        されることを指定します。
        
    /Q は、icacls が成功のメッセージを抑制することを指定します。
        
    ICACLS は、ACE エントリの正規の順序を維持します:
            明示的な否定内容
            明示的な許可内容
            継承された否定内容
            継承された許可内容
    
    perm はアクセス許可マスクであり、次の 2 種類の方法で指定できます:
        単純な権限を列挙:
                F - フル アクセス権
                M - 変更アクセス権
                RX - 読み取りと実行のアクセス権
                R - 読み取り専用アクセス権
                W - 書き込み専用アクセス権
        特定の権限をコンマ区切りでかっこ内に列挙:
                D - 削除
                RC - 読み取り制御
                WDAC - DAC の書き込み
                WO - 所有者の書き込み
                S - 同期
                AS - システム セキュリティへのアクセス
                MA - 無制限
                GR - 一般的な読み取り
                GW - 一般的な書き込み
                GE - 一般的な実行
                GA - 一般的なすべての操作
                RD - データ読み取り/ディレクトリの一覧表示
                WD - データ書き込み/ファイルの追加
                AD - データの追加/サブディレクトリの追加
                REA - 拡張属性の読み取り
                WEA - 拡張属性の書き込み
                X - 実行/スキャン
                DC - 子の削除
                RA - 属性の読み取り
                WA - 属性の書き込み
        継承権限はどちらの形式の前にも配置でき、ディレクトリにのみ適用され
        ます:
                (OI) - オブジェクト継承
                (CI) - コンテナ継承
                (IO) - 継承のみ
                (NP) - 継承を適用しない

例:
        
        icacls c:\windows\* /save <ACL ファイル> /T
	  - c:\windows より下にあるすべてのファイルとサブディレクトリの ACL を 
          <ACL ファイル> に保存します。

        icacls c:\windows\ /restore <ACL ファイル>
        - <ACL ファイル> 内のファイルのうち c:\windows とそのサブディレクトリ
          内に存在するすべてのファイルの ACL を復元します。

        icacls <ファイル> /grant Administrator:(D,WDAC)
        - Administrator ユーザーに、<ファイル> に対する削除および DAC 書き込み
          のアクセス許可を与えます。

        icacls <ファイル> /grant *S-1-1-0:(D,WDAC)
        - SID S-1-1-0 によって定義されたユーザーに、<ファイル> に対する削除
          および DAC 書き込みのアクセス許可を与えます。

ページ : 1 2 3
<この記事を全て表示する場合はこちらをクリック>

1 2 3

5 COMMENTS

Undo

すごく早いお返事で驚きました。
教えていただき、ありがとうございます。

現在、ICACLSの出力結果を見やすくしてという
依頼を受け中なのでした。
感謝です。

pnpk

こんにちは、コメントありがとうございます。
自分も気になって試してみました。

[このオブジェクトの親からの継承可能なアクセス許可を含める]

のチェックを外すと(I)が消えましたので、(I)はおそらく権限の継承を意味していると思われます。

いかがでしょうか。
よろしくお願いします。

Undo

通りすがりですが

>BUILTIN\Administrators:(I)(OI)(CI)(F)

の「(I)」が何を意味しているかご存じですか?
ひたすらググったのですが、見つかりませんでした。

MSのリファレンスにさえ載っていません。
http://technet.microsoft.com/ja-jp/library/cc753525(WS.10).aspx

ご存じでしたら教えていただきたいです。

pnpk

>Sampoさん
コメントありがとうございます。
&で実行出来たのですね、知りませんでした。

実際試させていただいたところ、かなり快適に作業出来るようになりました。

ありがとうございました。

時間ある時に動作確認して、コンテンツ内容も修正したいと思います。

今後ともよろしくお願いいたします。

Sampo

コマンドの連続実行は、| でももちろん結果的にできますが、 & が使えますよ。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です