アクセス権

なぜか、$HOMEのアクセス権がなくなっていた。
気がついたきっかけは、Emacs.appの終了時に.skk-jisyo.BAKを作る処理でエラーが出ること。そういえば、iTerm.appを終了させる時も、ちらりと.zsh_historyがらみでエラーが出てるような気がする。
$HOMEでls -ldすると、もちろん自分に対してrwxは許可されているし、Finderでアクセス権を確認しても「読み/書き」が可能になっている。
$HOMEにできているフォルダの下にはもちろん書き込み可能なので、実用上はあまり問題にならないのだけれど。Onyxでアクセス権の修復をしても現象は再現する。実際にはそんなに困っているわけではないけれど、気持ち悪いな。

% ls -ld
drwxrwxr-x+ 90 toshi  staff  3060  3  8 13:21 ./

で、気になるのは、drwxrwxr-x+だ。なんだろう?「+」って。
man lsしてみると、こんな事が書いてあった。

If the file or directory has extended attributes, the permissions field printed by the -l option is followed by a '@' character. Otherwise, if the file or directory has extended security information, the permissions field printed by the -l option is followed by a '+' character.

言わんとすることextended security informationが設定されているということはわかったが、じゃあどうしたら良いのか。

次にman chmodしてみると、こんな事が書いてある。

The +a mode parses a new ACL entry from the next argument on the commandline and inserts it into the canonical location in the ACL. If the supplied entry refers to an identity already listed, the two entries are combined.

なるほど、どうやら、ACLが設定されているようだ。

% ls -lde .
drwxrwxr-x+ 90 toshi  staff  3060  3  8 13:21 ./
 0: group:everyone deny add_file,delete,add_subdirectory,delete_child,writeattr,writeextattr,chown

何故だろう?あらゆる事をdenyされている。ownerだけでもこの辺の許可をするようにACLを設定すれば万事解決しそうだが、通常のLeopardの$HOMEでは、ownerに対してどのようなACLが設定されているべきなのか?が分からない。
とりあえず、新規ユーザを作ってみてls -ldeしてみたところ「0: group:everyone deny delete」しか設定されていないようだったので、同じように設定しておくことにする。必要かどうかよく分からないけど、とりあえずsudo付きでchmodを実行。

% sudo chmod -a "group:everyone deny add_file,add_subdirectory,delete_child,writeattr,writeextattr,chown" .
% ls -lde
drwxrwxr-x+ 93 toshi  staff  3162  3 18 21:26 ./
 0: group:everyone deny delete

というワケで、本件終了。とはいえ、こんな感じで良かったんだろうか?

しかし、いつ、どういうタイミングでこうなってしまったのか?