Windows整合性レベル

 
「MCTの憂鬱」で、おなじみの阿部さんがVirtual Machine分野の
Microsoft MVPになったことを先程知りました。
Hyper-VのVLANの件ではお世話になったことをはじめ、
ブログで有益な情報を色々とくださっていたので、
とてもうれしく、今回の受賞は自分のことのように喜んでいます。
阿部さん、おめでとうございます!
 
 
今日は資料を整理していたら、出てきたネタなのですが、
忘れちゃいそうだったので、ちょっとメモを。
 
Windows Vista以降のコンピュータは、ユーザーアカウント制御(UAC)の機能によって、
管理者ユーザーでも、一般ユーザーの権限だけを割り当てて、必要な時に昇格するという
ことができるようになりました。
言い方を変えると、
「ログオン時に作られるアクセストークンを2つ持ち、必要に応じて使い分けることができる」
ということになりますね。
 
一方、アクセストークンには、ユーザー名やSID、グループメンバーシップ、ユーザー権利などが
格納されますが、これらの情報とともにWindows Vista以降のコンピュータで生成される
アクセストークンには、Windows整合性レベルというのが格納されます。
一般に、Windows整合性レベル(WIL)には、
高レベル(High)、中レベル(Medium)、低レベル(Low)の3段階があると
言われており、UACで一般ユーザーのときにはMedium、管理者ユーザーのときにはHighが
割り当てられることになっていますが、
このWILには6段階ものレベルがあります。
 
6段階のレベルは以下のとおりです。
 
■untrusted – Anonymousと同等
■low – IEで実行されるプロセスに割り当てられ、テンポラリフォルダへのアクセスのみ可能
■medium – UACの一般ユーザーに割り当てられ、俗に言う盾マークがない部分へのアクセスが可能
■high – UACの管理者ユーザーに割り当てられ、盾マーク部分へのアクセスが可能
■system – LocalSystem等のサービスアカウントに割り当てられる
■trusted installer – 更新プログラムなどをインストールするプロセスに割り当てられる
 
 
これらの整合性レベルのうち、現在の自分に割り当てられているレベルを
確認するときは、whoami /groupsコマンドを使います。
 
 
上図だと、ユーザーがMedium Mandatory Levelグループのメンバーになっていますが、
これはMediumのレベルだということを表しています。
 
 
一方、Windows整合性レベルはファイルやプロセスにも割り当てられており、
トークンに記載されているレベルと突き合わせて、ファイルやプロセスの実行を許可したり、拒否したりします。
もし、ファイルへのアクセス可能なレベルを設定したいという場合
(いわゆる、DACによるアクセス許可ではなく、MACによるアクセス許可を設定したい場合)
icacls /setintegritylevelコマンドを使います。
 
 
 
上図では、最初のコマンドで、VE1.jpgファイルの整合性レベルをHighに設定し、
次のコマンドで、ファイルに対して設定された整合性レベルを確認しています。
(jpgファイルに設定する意味あるのかよ、というツッコミはなしで。。)
 
この状態で、一般ユーザーがファイルに対する編集を行い、保存しようとすると失敗します。
なぜなら、整合性レベルがHighだからです。
ここで疑問になるのが、整合性レベルがMediumのユーザーは
整合性レベルがHighのファイルを上書きできないのに、開くことができるんだあ、ってことです。
 
おはずかしながら、これも最近知ったのですが、
整合性レベルにはレベルに付随して3つのポリシーがあります。
 
■no read up (読み取り禁止)
■no write up (書き込み禁止)
■no execute up (実行禁止)
 
上図にある、High Mandatory Level:(NW)のNWとはNo Write upのことだったんですね。
だから、ファイルを開くことはできても、上書きはできなかったのですね。
 
 
それから、私はもうひとつ疑問に思ったことがあります。
icaclsコマンドを実際に使ってみるとわかるのですが、
/setintegritylevelオプションでは、L、M、Hの3段階しか使えません。
6段階あるうち、残りの3段階を設定することはできませんし、
ましてや、no read up、no write up、 no execute upなどの細かな設定などできません。
 
これに関しては、MVPのMark Minasiさんが作ったツール、chml(http://www.minasi.com/apps/)がお勧めです。
chmlではファイル等に割り当てられている、WILのレベルを確認するだけでなく、
WILのレベルをもっと細かく設定することができます。
 
ちょっと試してみましょう。
上記で設定したファイルについてchmlから整合性レベルを確認した様子がこちら。
 
整合性レベルとともにポリシーについても確認できますね。
そして、ファイルに対して整合性レベルやポリシーを設定した様子はこちら。
 
 
chmlのコマンドで-iオプションに続けて指定しているのが整合性レベル、-nrオプションで指定しているのが
no read upです。この状態でMediumのユーザーがファイルを開こうとすると、、
もうおわかりですね。
 
chmlコマンドの-iオプションでは、l, m, hの基本3レベルのほか、
untrustのuやsystemのsを指定することが可能です。
それから、ポリシーのオプションに関しては、
 
-nw no write up
-nr no read up
-nx no execute up
 
の3つがちゃんと用意してあります。
 
 
Windowsのアクセス権というと、これまでDAC(DACL)が主流でしたが、
整合性レベルについても、もっと使われる場面が増えてきてもよいような気がします。