Windowsファイルのプライマリグループ変更の話

ほとんど何処にも影響がなく、 普通の手段では見ることを変えることもできない情報が、 NTFS上には存在する。 それは、セキュリティ記述子のプライマリグループの情報である。

いろいろな権利を伴う 所有者情報やアクセスコントロール情報とは別であり、 GUI, CUIのどちらについても、 Windows上でそれを参照したり変更したりする手段を、 今のところ私は見つけることが出来ないでいる。

しかしながらNFS経由でアクセスする場合には、 そのファイルやディレクトリのグループとして自己主張する。 そのため管理者がグループのアクセス権を設定した場合、 (有効に働くにも関わらず) UNIX系クライアントからの見た目に反映されなかったりする。

もちろんNFS経由で設定すれば反映されるため、 Unix系クライアントのみの利用では問題とならない。 ただ、Windows系の管理者が設定したものについて、 わざわざUNIX系のクライアント側からもう一度設定するのも 面倒な話ではある。

そこで、Windows側でこのプライマリグループ情報を 書き換えるプログラムをつくってみた。

C#で書かれたこのプログラムソースをダウンロードし、 コマンドプロンプトで、

C:\WINDOWS\Microsoft.NET\Framework\v2.0.xxxxx\csc.exe win_chgrp.cs

などと打ってコンパイルする。(xxxxxは適当なバージョン番号) 実行形式のファイル(win_chgrp.exe)が生成されるのでそれを使う。

使い方は、以下の通りである。 コマンドプロンプトから実行するものであることに注意して欲しい。 (取りあえず"-N -v"オプションをつけながら試すと 理解の助けになるかも知れない。)

win_chgrp.exe [-v][-N][-R][-f] "NTユーザ名" "ファイル/ディレクトリ名"
-v: 変更点いちいち表示する
-N: 実際には変更しない
-R: 下位ディレクトリ以下も再帰的に変更する
-f: エラーが出ても無視して続ける
(ファイル/ディレクトリ名はワイルドカードには対応しません)

このプログラムが役に立つことはほぼ無い。 しかしながら、

の三つが揃うところに、Windowsの深淵を覗いた気がした。

(2008/10/18 a-urasim)

(2010/8/10 a-urasim)※について、実はコマンドが存在することを知った。 標準で存在するものではなく、マイクロソフトのダウンロードセンターから ダウンロードするものであるが、subinaclというコマンドがあり、 それを用いてプライマリグループを変更できるらしい。 しかし、cacls, icacls, xcaclsなどの類似のコマンド群は、 もう少し何とかならなかったのだろうか?