Windowsのアクセス権設定(その1) caclsコマンド
私の家では、WindowsXP Home と Windows Vista Home Premium の2つのOSを使用している。いずれも、私以外に家族もユーザとして登録している。私以外は基本的にはネットサーフィン(古い!)しか使用していないので、私だけが admin 権限、他はそれ以外の権限(XP では「制限付き」、Vista では「標準ユーザー」)としている。
しばらく、この状態で使っていたのだが、ある時、大変なことに気付いた。
それは、個人のフォルダ(例えば、私のユーザ名が toshi の場合、"C:\Documents and Settings\toshi")以外のフォルダは全て丸見えということである。すなわち、何気なく、C:\xxxx というフォルダやファイルを作った場合、デフォルトでは、どのユーザに対しても参照権限が与えられてしまうのだ。
これについては、心の片隅では意識しており、「ヤバイ」ファイルは個人フォルダに置いているつもりであったが、1つ抜け穴があった。それは、2009年2月15日の記事「ToClip と Truecrypt」で紹介した暗号化ソフト Truecrypt でマウントした時にできる仮想ドライブである。
私は、「ヤバイ」ファイルも含めて重要なファイルは Truecrypt の仮想ドライブにバックアップをとっているのだが、仮想ドライブには1つのドライブレターが振られる、つまり個人のフォルダ内ではないので、どのユーザに対しても参照権限がある状態だったのである。Truecrypt は、ファイルを暗号化して格納しているものの、マウントしている間は参照権限さえあれば誰でも内容を見れる状態になっている。
もちろん、今後の回避策として以下も考えられる。
1.バックアップが終わったら忘れずに仮想ドライブをアンマウントする。
2.Truecrypt の標準機能である 「ログオフ時に自動アンマウント」を設定する
しかし、1は、どうしても忘れることがありそうだし、2は、ユーザー切替を使用した場合には動作しない。(更に、Truecrypt を常駐させなければならないのもイヤだ。)
そこで、正攻法として、ユーザのアクセス権を設定することにした。
Vista Home Premium や XP Professional には、フォルダのプロパティに 「セキュリティ」タブがあり、GUIで直感的に 設定することができたが、何と XP Home には「セキュリティ」タブがない。どうやら、XP Home の場合は、セーフモードで立ち上げた場合のみ「セキュリティ」タブが現れるという仕様らしい。全く意味不明、意図不明の仕様だ。
ただし XP Home でも cacls というコマンド(Vistaでは、より高機能な icacls もある)でアクセス権を設定できるらしい。
XP Home には「セキュリティ」タブがない!(↓参照)
( 「日時の変更」や「拡張メニューの設定」タブは、Mt.Wideさんのフリーソフト「エクスプローラ拡張メニュー」の影響なので気にしないで)
そこで今回は、まず cacls コマンドの使い方について説明する。(次回は、caclsや「セキュリティ」タブを使った実際の設定例について説明する。)
まず、フォルダやファイルのみを引数にして実行すると、そのフォルダやファイルに対して現在設定されているアクセス権が表示される。
以下が実行例である。
PUPPY は コンピュータ名、toshi が私のユーザ名で、「Q:\クリップボード」フォルダの作成者でもある。また、最初の > はコマンドプロンプトである。
> cacls Q:\クリップボード
Q:\クリップボード BUILTIN\Administrators:(OI)(CI)F
NT AUTHORITY\SYSTEM:(OI)(CI)F
PUPPY\toshi:F
CREATOR OWNER:(OI)(CI)(IO)F
BUILTIN\Users:(OI)(CI)R
BUILTIN\Users:(CI)(特殊なアクセス:)
FILE_APPEND_DATA
BUILTIN\Users:(CI)(特殊なアクセス:)
FILE_WRITE_DATA
表示されている各行を アクセス制御エントリ(Access Control Entry:ACE)といい、このフォルダに対する各ユーザやグループのアクセス権を表している。1つのフォルダやファイルのアクセス権は、上のように複数のACEの組(リスト)として表され、これらをまとめて アクセス制御リスト(Access Control List:ACL)という。
ACEの括弧内のアルファベット2文字の組合せと、その後の1文字の意味はそれぞれ以下の通りである。
括弧内のアルファベット2文字の組合せは、アクセス権のサブフォルダや直下のファイルへの継承設定を表す。
(OI)(CI)(IO):サブフォルダとファイルのみ
(CI) :このフォルダとサブフォルダ
何もなし :このフォルダのみ
(OI)(CI) :このフォルダ、サブフォルダおよびファイル
(OI) :このフォルダとファイル
(CI)(IO) :サブフォルダのみ
(OI)(IO) :ファイルのみ
何もなし と (OI)(CI)(IO)の2行:このフォルダ、サブフォルダおよびファイル
行末の1文字はアクセス権を意味する。
F:フルコントロール。すべての操作が対象となる(Cに加え権限変更も可)
C:変更(書き込み)可能(Wに加え削除も可能)
W:書き込み可能(作成や修正も可能)
R:読み出しのみ可能
N:アクセス権なし
例えば先ほどの例で3行目「PUPPY\toshi:F」は、ユーザー toshi は Q:\クリップボード フォルダに対してはフルコントロールの権限を持っているが、継承設定は「何もなし」=「このフォルダのみ」なので、この権限はサブフォルダには継承されないことを意味している。
次に cacls を使ったアクセス権の設定方法について説明する。(cacls を引数なしで実行すると説明が表示されるので、興味のある人はそれも合わせて見て欲しい。)
最も一般的な使用例は以下となる。
>cacls Q:\クリップボード /t /e /p toshi:F
ここで、各引数は以下の意味である。
Q:\クリップボード
対象フォルダ(ワイルドカード使用可)
/t
フォルダ以下にあるすべてのフォルダ/ファイルに対して実行することを意味する。これがなければ、サブフォルダについては実行しない。
/e
現在のACLを(削除せずに)編集することを意味する。これがないと、現在のACLは全て削除されてしまうので、通常これは必要である。
/p:ユーザー名またはグループ名:アクセス権
/g:ユーザー名またはグループ名:アクセス権
ユーザにアクセス権を設定する。上の例では toshi にフルアクセス権を設定している。/g の場合は、現在の toshi の持つ権限はそのままで追加設定し、/p の場合は、現在の toshi の持つ権限は一旦削除した後、この権限を設定する。なお、アクセス権 N(アクセス権なし=拒否)を設定すると他のアクセス権よりも優先されるので、結果としてそのユーザーは一切のアクセスができなくなる。(N は /p との組合せでしか設定できない。)
ACEを削除するには /r を使用する。
>cacls Q:\クリップボード /t /e /r Users
/r の引数にはユーザー名やグループ名を指定し、この例では、Users グループの ACE を全て削除することを意味する。もし先ほどの例の Q:\クリップボード フォルダに適用したとしたら BUILTIN\Users のACEの3行は全て削除される。その結果として、Users グループに属するユーザーは(他に有効なACEがない限り)アクセスできなくなる。
以上が cacls の使用方法である。
それでは、次回の実践編で。
【2009年5月16日追記】
実践編をアップしました。
| 固定リンク
コメント