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 を使っているようである.