2010-08-04

Snow Leopard における ACL の操作

必要に迫られて Snow Leopard での ACL の取り扱い、とくに ACL を付けたり取り除いたりといった最低限の操作について調べた。ググってみても、「これだ!」という情報には出会えなかった。結局、一番実用的なのは man chmod だった。

chmod のマニュアルページには "ACL MANIPULATION OPTIONS" というセクションがあり、操作の具体例を挙げつつコマンドオプションとACL属性の説明が書かれている。ACL で困ったら、まずは man chmod を見るべき。

ACL を見る

ls に表示用オプションが増えている。ls -l で表示させたとき、許可ビット欄の一番右に + が付いていたら、そのファイルやフォルダに ACL が付いている印。オプション le を加えることで、その ACL の内容を表示できる。以下が実行例。ユーザのホームにあるライブラリフォルダに ACL が付いていることを示している。その意味は「誰であっても消せない」というもの。これが付いていると、削除できないのはもちろん、名前の変更や移動もできない。

[imac] mnbi% ls -l                                                [~]
[...snip...]
drwx------+ 39 mnbi  staff  1326  8  3 01:34 Library/
[...snip...]
[imac] mnbi% ls -le                                               [~]
[...snip...]
drwx------+ 39 mnbi  staff  1326  8  3 01:34 Library/
 0: group:everyone deny delete
[...snip...]

ちなみに、+ ではなくて @ が付いていたら、それは EA (Extended Attribute) が付いている印。ACL と EA の両方が付いている場合、EA の印が優先されるようだ。

ACL を付ける

group:everyone deny delete を付けてみる。

[imac] mnbi% ls -l                                            [~/tmp]
total 184
-rw-r--r--+ 1 mnbi  staff  12427  1 21  2010 chess.pdf
[...snip...]
[imac] mnbi% ls -le                                           [~/tmp]
total 184
-rw-r--r--+ 1 mnbi  staff  12427  1 21  2010 chess.pdf
[...snip...]
[imac] mnbi% chmod +a "everyone deny delete" chess.pdf        [~/tmp]
[imac] mnbi% ls -l                                            [~/tmp]
total 184
-rw-r--r--+ 1 mnbi  staff  12427  1 21  2010 chess.pdf
[...snip...]
[imac] mnbi% ls -le                                           [~/tmp]
total 184
-rw-r--r--+ 1 mnbi  staff  12427  1 21  2010 chess.pdf
 0: group:everyone deny delete
[...snip...]
[imac] mnbi% rm chess.pdf                                     [~/tmp]
rm: chess.pdf: Permission denied

rm で削除しようとするとダメだと怒られる。

一方、このファイルを Finder から削除(やリネーム、それに移動)しようとすると、管理者パスワードの入力を求めるダイアログが出てくる(→)。もちろん、パスワードを正しく入力すれば削除(やリネーム、または移動)される。コマンドラインからでも sudo rm すれば削除できる。

ACL を取り除く

自分で付けた ACL を自分で変更したり取り除いたりする分には問題がないけれど、システムの初期状態で付いている ACL をいじると、何が起きるかわかったもんじゃない。たいていは group:everyone deny delete が付いているぐらいだけど、一部にはその他の属性も付いている(/Volumes とか)。そういうものを取り除く場合は、相応の覚悟をしてからやること。

付けるときと同様に chmod を使う。取り除くときは -a# オプションを使う。あらかじめ ls -le で ACL を表示させ、消したいものの番号を調べておく。その番号を -a# の後に指定する。-N オプションを使えば、ファイルに複数の ACL が付いている場合、まとめて取り除くことができる。実行例は以下のとおり。

[imac] mnbi% ls -le                                           [~/tmp]
total 184
-rw-r--r--+ 1 mnbi  staff  12427  8  4 06:36 chess.pdf
 0: group:everyone deny delete
[...snip...]
[imac] mnbi% chmod -a# 0 chess.pdf                            [~/tmp]
[imac] mnbi% ls -le                                           [~/tmp]
total 184
-rw-r--r--  1 mnbi  staff  12427  8  4 06:36 chess.pdf
[...snip...]
[imac] mnbi% chmod +a "everyone deny delete" chess.pdf        [~/tmp]
[imac] mnbi% chmod +a "staff allow delete" chess.pdf          [~/tmp]
[imac] mnbi% ls -le                                           [~/tmp]
total 184
-rw-r--r--+ 1 mnbi  staff  12427  8  4 06:36 chess.pdf
 0: group:everyone deny delete
 1: group:staff allow delete
[...snip...]
[imac] mnbi% chmod -N chess.pdf                               [~/tmp]
[imac] mnbi% ls -le                                           [~/tmp]
total 184
-rw-r--r--  1 mnbi  staff  12427  8  4 06:36 chess.pdf
[...snip...]
ACL、雑感

ACL は、ユーザやグループに対して、allowdeny を様々な許可項目(man chmod には 21 項目ある)ごとに組み合わせて指定することで「きめこまやかな」アクセス制御を可能にする、というものだ。指定する順序も関係する(番号の小さいものが優先)。もちろん指定する順序を間違うと意図したようには効かない。正直、難しい。サーバはともかく、個人が専有する Mac には不要だと思う。自分から積極的に使う気にはなれない。

関連リンク

  • File Server Administration (Mac OS X Server ガイドの一部; Chapter 2 Setting Up File Service Permission に ACL についていろいろ記述がある)

関連記事

0 件のコメント:

コメントを投稿