Windows7のfile permission

変なタイトルだが,要は NTFS のファイルアクセス権の話.

Windows XP で運用していたマシンに Windows 7を入れた.特にアップグレードインストールをしたつもりではなかった (なかった...よなあ) のだが,いままで使っていたファイルがそれなりに残っていて,それなりに良かった反面,ファイルの使用権関係でたくさんトラブルも引き起こした.わかったことをメモしておく.

GUIから変更しようとすると大変になることが多い.死ぬほどボタンを押す羽目になったり.コマンドラインから行うのが得策.コマンドプロンプトを起動するとき,「管理者として実行」としないと,できないことがいろいろある.

アクセス権の変更は所有者にしかできない.したがって,まず所有者になる必要がある.takeown コマンドを使う.対象は「/F path」で指定する./Rをつけると再帰実行.例:

> takeown /R /F C:\tmp

変なpermissionがついている場合は,それを消したいかもしれない.その場合,以下のように実行.

> icacls C:\tmp /reset /t
> icacls C:\tmp /inheritance:r

「/inheritance:r」によって,ACLの上位からの継承が無効になる./resetで各位置で指定しているACLが廃棄される./tは,再帰指定.

最後に,適当なACLを指定する.cygwinで使う場合はこんなものではないだろうか:

icacls C:\tmp /grant myname:(CI)(OI)F SYSTEM:(CI)(OI)F Administrators:(CI)(OI)F Everyone:(CI)(OI)RX "CREATOR OWNER:(CI)(OI)F" "CREATOR GROUP:(CI)(OI)RX" None:(CI)(OI)RX 

もちろん,「myname」は,自分のログイン名.「F」がフルコントロールで,「RX」が読み取りと実行.「(CI)」と「(OI)」は,それぞれフォルダ(container)に対する継承指定とファイル(object)に対する継承指定.cygwinは,グループはデフォルトでNoneにするようだし,othersに対するパーミッションは,Everyone を使っているようである.