こちらの記事『これからの「Java I/O」の話をしようwww (13) : 続々・ファイル、ディレクトリの属性 - 倭マン's BLOG』で、Java nio で ACL (Access Control Listアクセス制御リスト)を設定する方法を見ましたが、設定するのがちょっと面倒。 まぁ、一度作成した AclEntry オブジェクト(のリスト)を使い回せば面倒なのは一度だけですが、POSIX ファイル・パーミッションに関しては標準 API に java.nio.file.attribute.PosixFilePermissions というユーティリティクラスがあって、「rwx------」のような文字列からファイル属性オブジェクト(FileAttribute オブジェクト)を簡単に生成することができるのを考えると API の使い勝手が雲泥の差。
ということで、ちょっと ACL の設定を文字列から簡単に設定できるお試しコードでも書いてみようと思って、ACL 設定に使われる設定文字列(「rwx------」のようなもの)を探すと、Bash などで使える getfacl/setfacl コマンドに指定できる文字列「user:Guest:rw-」のようなのが無難そう。 これはそのまんま、ユーザ Guese に読み書きを許可 (rw-) してるのですね。
さて、ここで疑問。 この3つの文字列は POSIX ファイル・パーミッションと同じ指定をできるんだろうけど、それぞれの設定の場合に ACL で設定できるファイル属性や ACL 属性の読み書きにはどのような設定がされるのか? 書き込み可能にしようと思って「-w-」にしたときに、ACL 属性も書き込み可能にしてしまったら実質的に読み取りも実行も可能になってしまいますよね。 これを論理的に考えていくのは大変そうなのでどうしたものかと思ってたんですが、Windows 環境でも Cygwin に getfacl/setfacl コマンドがあったので実際に setfacl コマンドで ACL を設定して、Java 側から ACL 属性を読み取ってやれば良さそうだということで、実際にやってみました。
結果を表にするとこんな感じ(○は許可):
--- | r-- | -w- | --x | rw- | r-x | -wx | rwx | |
WRITE_OWNER | ||||||||
---|---|---|---|---|---|---|---|---|
READ_ACL | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ |
WRITE_ACL | ||||||||
READ_ATTRIBUTES | ○ | ○ | ○ | ○ | ○ | ○ | ○ | |
WRITE_ATTRIBUTES | ○ | ○ | ○ | ○ | ||||
READ_NAMED_ATTRS | ○ | ○ | ○ | ○ | ||||
WRITE_NAMED_ATTRS | ○ | ○ | ○ | ○ | ||||
READ_DATA | ○ | ○ | ○ | ○ | ||||
WRITE_DATA | ○ | ○ | ○ | ○ | ||||
APPEND_DATA | ○ | ○ | ○ | ○ | ||||
EXECUTE | ○ | ○ | ○ | ○ | ||||
DELETE | ||||||||
DELETE_CHILE | ○ | ○ | ||||||
SYNCHRONISE | ○ | ○ | ○ | ○ | ○ | ○ | ○ |
- WRITE_OWNER, WRITE_ACL, DELETE はこの設定方法では許可されないようですね。
- 「rw-」は「r--」かつ「-w-」
- 「r-x」は「r--」かつ「--x」
- 「-wx」は「-w-」かつ「--x」かつ DELETE_CHILD
- 「rwx」は「r--」かつ「-wx」
もしかしたら getfacl/setfacl の実装によって与えられる権限がことなったりするのかも知れませんが、まぁ大体こんなもんでしょう。 ちなみに getfacl/setfacl には単に文字列として権限を指定するだけでなく、mask や default のような設定もできるようですが、この辺りの機能については触ってません。

最新Ubuntu 15.10対応版 Linux超入門ガイド(日経BPパソコンベストムック)
- 作者: 日経Linux
- 出版社/メーカー: 日経BP社
- 発売日: 2015/12/14
- メディア: 単行本
- この商品を含むブログを見る

お気に入りのUbuntu 14.04 LTS日本語Rem―無償OS &無償ソフトで何でも揃う!
- 作者: 岡田長治,中村睦
- 出版社/メーカー: カットシステム
- 発売日: 2014/10/24
- メディア: 単行本
- この商品を含むブログ (1件) を見る