読者です 読者をやめる 読者になる 読者になる

倭マン's BLOG

くだらない日々の日記書いてます。 たまにプログラミング関連の記事書いてます。 書いてます。

ACL を POSIX 風に設定したとき、実際にはどのような権限が付与されるのか

Java

こちらの記事『これからの「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パソコンベストムック)

最新Ubuntu 15.10対応版 Linux超入門ガイド(日経BPパソコンベストムック)

お気に入りのUbuntu 14.04 LTS日本語Rem―無償OS &無償ソフトで何でも揃う!

お気に入りのUbuntu 14.04 LTS日本語Rem―無償OS &無償ソフトで何でも揃う!