Solarisサーバーにuser1
ログインし、別のユーザー(sruser
IDを使用)に切り替えてsu -
から、idプロセスを開始するとしますX
。その後、他のユーザーがuser2
ログインしてsruser
同じモードに入り、そのIDのプロセスを開始しますY
。 (複数のユーザーが同時にログインして切り替えることができますsruser
。)
X
Y
上記のシナリオで、IDと実際のユーザーの進捗状況を追跡する方法はありますかuser1
?user2
プロセスを元のユーザーまでどのように追跡しますか?
答え1
プロセスツリーを生成するコマンドがあります。 'ps' は 'fu' オプションを使用します。 Sunにはptreeがあるようです。
答え2
標準的な方法はなく、私が知っている限り、Solarisには方法がありません。 「祖先」ユーザーを見つけるための信頼できる方法がある場合、ルートがすべてを行うことができる一般的なUNIXセキュリティモデルは維持されなくなります。
各プロセスの親プロセスを再帰的に確認できます。 (警告、テストされていないスクリプトです。)
pid=$1 pids=$pid user=
while pid=$(ps -o ppid= $pid); do
user=$(ps -o ruser= $pid)
case $user in
0|root) :;;
*) break;;
esac
done
echo $user
しかし、これが何らかの結果を保証するわけではありません。おそらく、親プロセスの親プロセスが終了した可能性があります。
プロセスが実行されている端末を確認しps -o tty= $pid
()、その端末に最後にログインした人が誰であるかを確認できます(who
、、last
)。しかし、これは単に暗黙的です。ルートはすべての端末でプロセスを開始できます。
user1が実行されたら何を見ることができますかsu user2 -c 'su user1 -c …'
?オペレーティング・システムがプロセスに関連するカーネル・データ構造内で継続的な認証チェーンを追跡していると考えることができますが、これは一般的なUNIXセキュリティ・モデルとは離れています。