[Gauche-devel-jp] Gauche-file-acl

アーカイブの一覧に戻る

Kimura Fuyuki fuyuk****@nigre*****
2003年 11月 3日 (月) 12:13:58 JST


たぶんユーザーは私しかいないと思いますが、せっかく書いたのでさらしてお
きます。

http://www.nigredo.org/fuyuki/Gauche-file-acl-0.0.tar.gz

POSIX.1eのACL機能を利用するためのモジュールです。POSIX.1e ACLが有効に
なっていることが前提になります。FreeBSD 5.xには最初から組み込まれてい
るので、

http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/fs-acl.html

を見ながらやれば、そう苦労せずに使えるようになるはずです。Linuxの場合
は、libacl.soというファイルが存在するなら、POSIX.1e ACLが有効になって
いる可能性が高いです。もしない場合は、

http://acl.bestbits.at/

からパッチなどをもらってくる必要があるかもしれません。

*

POSIX.1eというのは初耳の人も多いと思うので、まずはそこから解説します。
ヌルい解説などいらん仕様書よこせという方はこちらへどうぞ。

http://wt.xpilot.org/publications/posix.1e/

で、解説。UNIXの世界では

「9ビットのパーミッションだけじゃもたないよね」

とか

「無敵のroot 様に権限が集中してるのってまずいよね」

というのは石器時代から言われてきたと思うのですが、POSIX.1eはそのへんを
改善するための規格です。それはいいのですが、困ったことに、この規格は
withdrawnになってしまいました。

「ならほっとけばいいやん」

という向きもあろうかと思いますが、そうはいきません。現状に問題があるの
はたしかだし、ほかに代替になるような規格もないからです。

というわけで、POSIX.1eの最終ドラフトをベースにしてあちこちで実装がすす
められています。全体的な感触をつかむには、

http://www.trustedbsd.org/trustedbsd-bsdcon-2000.ps.gz

を見るといいでしょう。

*

POSIX.1e ACLは、現状の9ビットのパーミッションの制限を打破するための規
格です。ある程度UNIX歴のある人なら、一度はパーミッションの表現力の貧し
さに泣かされたことがあるはずですが、ACL機能があればそういった問題はだ
いたい解決するはずです。

ACLはACLエントリの集合体です。ACLエントリというのは、従来のファイルモー
ドでいうところのrwx(3ビット)をあらわすものと思ってください。

ACL機能は従来のパーミッションと整合性を保つように設計されているので、
特にACLを設定していないファイルからACLを読み込むと、単に9ビットのパー
ミッションがそのまま取れてくる感じになります。

(number->string (ref (sys-stat "test") 'perm) 8)
=> "644"

(define facl (get-file-acl "test"))
(coerce-to <list> facl) =>
(#,(<file-acl-entry> other #f #t #f #f)
 #,(<file-acl-entry> group #f #t #f #f)
 #,(<file-acl-entry> user  #f #t #t #f))
                           q  r  w  x

rwxはいいとして"q"のところがわからないと思いますが、これはqualifierで、
実質的にはuidかgidのいずれかです。ここに値を設定したACLエントリを足し
てやると、特定のユーザーやグループに対してパーミッションを開けてやるこ
とができます(ファイルのowner/groupとは別に)。

たとえば、グループ"staff"に読み書き権限を与えるには、次のようにしてACL
エントリを追加してやります。

(file-acl-add! facl 'group (sys-group-name->gid "staff") 'read 'write)
(set-file-acl! "test" facl)

これで、コマンドラインから

$ setfacl -m g:staff:rw test

としたのと同じ結果が得られるはずです。

*

制限。このモジュールは基本的にPOSIX.1e ACLライブラリの理解と検証のため
に書いたので、何か変なことをやっているかもしれません。

で、現時点での感想としては、

- けっこうよく考えて設計されているらしい

- が、やはりPOSIXというか、妙に機能が半端だったり、抜けがあったりする

といったところです。

たとえば、ACLエントリからパーミッションを読み取るためのAPIがありません。
「ありません」ではすまないので、実際には実装のレベルでなんとかしていま
す。が、コミュニティ間の連係がうまくいっているようなので、それほどAPI 
がバラけることはないでしょう。

-- 
木村 冬樹



Gauche-devel-jp メーリングリストの案内
アーカイブの一覧に戻る