Hiroshi Shinji
hiros****@gmail*****
2008年 12月 8日 (月) 11:04:47 JST
宍道です。 遅くなりましたが、 (1)と(2)については、「個人的」に > (1) パーミッションを表すには path1.mode と path1.perm のどちらが良いか? path1.perm のほうが良いでしょうか。 mode だと、何を意味するのか少し分かりにくいかと思います。 > (2) owner/group/others の指定はそれぞれ(chmod での ugo を連想させる) user/group/others で良いか?それとも、 owner だから user よりも owner の方が良いか? userよりはownerのほうが正確でいいように思います。 とりあえず。 2008/12/03 21:09 Tetsuo Handa <from-****@i-lov*****>: > 熊猫です。 > > 某案件で、「プリンタに送られたデータを全てログファイルにも保存しておく」 > という要件がありました。 execute_handler を使ってパイプやソケットの通信内容を > tee してやれば良いわけですが、「どのような操作を行うか事前に把握できない」 > ブラックリスト的な設定を要求されたため、 execute_handler として動作する > 「通信内容傍受プログラム」と非 execute_handler として動作する「 cat や grep の > ような普通のプログラム」とを keep_domain された同一ドメイン上で動作させる必要が > 生じてしまいました。 > > そこで、 if 節を拡張して「 if task.type=execute_handler 」および > 「 if task.type!=execute_handler 」という条件指定をサポートすることにより、 > 同一ドメインで動作するプログラムであっても、「通信内容傍受プログラム」だけが > ログファイルなどへの書き込みができるような状態を実現できるようにしたいと > 思います。 > > また、「 setuid や setgid されたプログラムの実行を禁止する」という要望が > 出た場合への備えとして、ファイルの種別や DAC のパーミッションを考慮した > アクセス制御を行うために「 if path1.type=file 」や「 if path1.mode=0644 」 > などの指定もサポートしたいと思います。 > パーミッションの比較の際にはビット単位での指定もサポートしないと指定が非常に > 面倒なことになります。例えば DAC で group に対する read が与えられている場合 > だけ /etc/fstab を読み込みモードでオープンすることを許可したい場合、 > allow_read /etc/fstab if path1.mode=00040-00077 > allow_read /etc/fstab if path1.mode=00140-00177 > allow_read /etc/fstab if path1.mode=00240-00277 > allow_read /etc/fstab if path1.mode=00340-00377 > allow_read /etc/fstab if path1.mode=00440-00477 > allow_read /etc/fstab if path1.mode=00540-00577 > allow_read /etc/fstab if path1.mode=00640-00677 > allow_read /etc/fstab if path1.mode=00740-00777 > allow_read /etc/fstab if path1.mode=01040-01077 > allow_read /etc/fstab if path1.mode=01140-01177 > allow_read /etc/fstab if path1.mode=01240-01277 > allow_read /etc/fstab if path1.mode=01340-01377 > allow_read /etc/fstab if path1.mode=01440-01477 > allow_read /etc/fstab if path1.mode=01540-01577 > allow_read /etc/fstab if path1.mode=01640-01677 > allow_read /etc/fstab if path1.mode=01740-01777 > allow_read /etc/fstab if path1.mode=02040-02077 > allow_read /etc/fstab if path1.mode=02140-02177 > allow_read /etc/fstab if path1.mode=02240-02277 > allow_read /etc/fstab if path1.mode=02340-02377 > allow_read /etc/fstab if path1.mode=02440-02477 > allow_read /etc/fstab if path1.mode=02540-02577 > allow_read /etc/fstab if path1.mode=02640-02677 > allow_read /etc/fstab if path1.mode=02740-02777 > (・・・中略・・・) > allow_read /etc/fstab if path1.mode=07040-07077 > allow_read /etc/fstab if path1.mode=07140-07177 > allow_read /etc/fstab if path1.mode=07240-07277 > allow_read /etc/fstab if path1.mode=07340-07377 > allow_read /etc/fstab if path1.mode=07440-07477 > allow_read /etc/fstab if path1.mode=07540-07577 > allow_read /etc/fstab if path1.mode=07640-07677 > allow_read /etc/fstab if path1.mode=07740-07777 > という並列指定を行うか、あるいは > allow_read /etc/fstab if path1.mode!=00000-00037 path1.mode!=00100-00137 path1.mode!=00200-00237 path1.mode!=00300-00337 path1.mode!=00400-00437 path1.mode!=00500-00537 path1.mode!=00600-00637 path1.mode!=00700-00737 path1.mode!=01000-01037 path1.mode!=01100-01137 path1.mode!=01200-01237 path1.mode!=01300-01337 path1.mode!=01400-01437 path1.mode!=01500-01537 path1.mode!=01600-01637 path1.mode!=01700-01737 (・・・中略・・・) path1.mode!=07000-07037 path1.mode!=07100-07137 path1.mode!=07200-07237 path1.mode!=07300-07337 path1.mode!=07400-07437 path1.mode!=07500-07537 path1.mode!=07600-07637 path1.mode!=07700-07737 > という直列指定が必要になり、とても使いこなせるものではありません。 > > 現時点( revision 1918 )では以下のような仕様になっています。 > > プロセス種別の指定 > task.type=execute_handler プロセスは execute_handler として動作している > task.type!=execute_handler プロセスは普通のプロセスとして動作している > > ファイル種別の指定 > path1.type=file path1 は通常のファイルである > path1.type=directory path1 はディレクトリである > path1.type=fifo path1 は FIFO である > path1.type=socket path1 はソケットである > path1.type=symlink path1 はシンボリックリンクである > path1.type=block path1 はブロックデバイスファイルである > path1.type=char path1 はキャラクタデバイスファイルである > path1.type!=file path1 は通常のファイルではない > path1.type!=directory path1 はディレクトリではない > path1.type!=fifo path1 は FIFO ではない > path1.type!=socket path1 はソケットではない > path1.type!=symlink path1 はシンボリックリンクではない > path1.type!=block path1 はブロックデバイスファイルではない > path1.type!=char path1 はキャラクタデバイスファイルではない > > デバイスファイル属性指定( path1.type=block または path1.type=char に対してのみ有効) > path1.major=数値1-数値2 path1 のメジャー番号部分が「数値1〜数値2」である > path1.minor=数値1-数値2 path1 のマイナー番号部分が「数値1〜数値2」である > path1.major!=数値1-数値2 path1 のメジャー番号部分が「数値1〜数値2」ではない > path1.minor!=数値1-数値2 path1 のマイナー番号部分が「数値1〜数値2」ではない > > パーミッション指定 > path1.mode=数値1-数値2 path1 のパーミッションが「数値1〜数値2」である > path1.mode!=数値1-数値2 path1 のパーミッションが「数値1〜数値2」ではない > path1.mode=setuid path1 に関して setuid ビットが on である > path1.mode!=setuid path1 に関して setuid ビットが off である > path1.mode=setgid path1 に関して setgid ビットが on である > path1.mode!=setgid path1 に関して setgid ビットが off である > path1.mode=sticky path1 に関して sticky ビットが on である > path1.mode!=sticky path1 に関して sticky ビットが off である > path1.mode=user_read path1 に関して owner に対する read ビットが on である > path1.mode!=user_read path1 に関して owner に対する read ビットが off である > path1.mode=user_write path1 に関して owner に対する write ビットが on である > path1.mode!=user_write path1 に関して owner に対する write ビットが off である > path1.mode=user_execute path1 に関して owner に対する execute ビットが on である > path1.mode!=user_execute path1 に関して owner に対する execute ビットが off である > path1.mode=group_read path1 に関して group に対する read ビットが on である > path1.mode!=group_read path1 に関して group に対する read ビットが off である > path1.mode=group_write path1 に関して group に対する write ビットが on である > path1.mode!=group_write path1 に関して group に対する write ビットが off である > path1.mode=group_execute path1 に関して group に対する execute ビットが on である > path1.mode!=group_execute path1 に関して group に対する execute ビットが off である > path1.mode=others_read path1 に関して others に対する read ビットが on である > path1.mode!=others_read path1 に関して others に対する read ビットが off である > path1.mode=others_write path1 に関して others に対する write ビットが on である > path1.mode!=others_write path1 に関して others に対する write ビットが off である > path1.mode=others_execute path1 に関して others に対する execute ビットが on である > path1.mode!=others_execute path1 に関して others に対する execute ビットが off である > > 「-数値2」の部分は省略可能です。 > パーミッション指定では path1 だけでなく path1.parent や path2.parent も指定可能です。 > path1.parent や path2.parent は常にディレクトリであるため、 path1.parent.type や path2.parent.type という指定は無意味なのでサポートしません。 > > ここで、表記方法についてご意見募集です。 > > (1) パーミッションを表すには path1.mode と path1.perm のどちらが良いか? > > (2) owner/group/others の指定はそれぞれ(chmod での ugo を連想させる) user/group/others で良いか?それとも、 owner だから user よりも owner の方が良いか? > > (3) user_read/group_read/others_execute などは長すぎるか? ur/gr/or のような短縮形が良いか? > > (4) path1.mode=setuid などはビット演算を行っているのに = や != で結びつけるのは気になるか?気になる場合、どのような表記(例えば path1.mode=+setuid path1.mode=-setgid)が良いか? > > (5) デバイスファイルの属性( stat コマンドで Device type: 欄に表示される内容)だけでなく、ファイルの格納されているデバイスファイルの属性( stat コマンドで Device: 欄に表示される内容)も指定できる方が嬉しいか? > > (6) その他にも気になる点や要望 > > などなどです。 > > _______________________________________________ > tomoyo-dev mailing list > tomoy****@lists***** > http://lists.sourceforge.jp/mailman/listinfo/tomoyo-dev > -- 宍道 洋 hiros****@gmail*****