プロセスを元のユーザーまで追跡するには?

プロセスを元のユーザーまで追跡するには?

Solarisサーバーにuser1ログインし、別のユーザー(sruserIDを使用)に切り替えてsu -から、idプロセスを開始するとしますX。その後、他のユーザーがuser2ログインしてsruser同じモードに入り、そのIDのプロセスを開始しますY。 (複数のユーザーが同時にログインして切り替えることができますsruser。)

XY上記のシナリオで、IDと実際のユーザーの進捗状況を追跡する方法はありますかuser1user2

プロセスを元のユーザーまでどのように追跡しますか?

答え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セキュリティ・モデルとは離れています。

関連情報