1) lids_security_alert メッセージへの表示に、親のpid を追加しました 2) lids_set_flags を lids_set_acls へ変更: より分かりやすくなりました 3) fork() されている間の copy_lids_sys_acl の変更と、do_exec() されて いる間の lids_set_acls の変更。 現在は、program が始めてfork() すると、その親と同じACL を持つ ことになります。 execve() をしたときには、継承がチェックされ、いくつかの継承さ れないACL と権限が削除されます。このチェックはexecve が複数動 作しているときは、一回だけ行われます。 その後、ACL に対して、現在実行されているプログラムのACL と 権限をマージします。 現在は、プログラムが内部で何回fork されたかを気にする必要は無く、その 子プロセスは親と同じ特権を持つことになります。これは、execute() される まで、続きます。。 sshd では、以下のようにします # lidsadm -A -s /usr/sbin/sshd -o /etc/shadow -i 0 -j READ /* the -i 0 は、数字が0 の時は無視されます*/ スクリプトに関する継承では、最初に"bash" をfork してから、スクリプト内 のコマンドを実行していきます。したがって、コマンドに権限を継承させる 必要がある場合には、少なくとも1 TTL が必要です。 例えば、下記のスクリプトでは、 -------test.sh---- #!/bin/sh ifconfig eth0 down ifup eth0 ------test.sh-------- 仮に、 # lidsadm -A -s test.sh -o CAP_NET_ADMIN -i 1 -j GRANT とすると、最初のコマンドはうまく実行できます。しかし、二番目のコマンド は、"ifup eth0" がCAP_NET_ADMIN の権限を得たとしても、それを "ifup eth0" の中で使う"ifconfig eth0 up" に継承することが出来ないため、 二番目のコマンドは失敗してしまいます。したがって、このときは継承レベル (TTL) は2 に設定しておく必要があります。