Linuxでsudoを使用して特定のコマンドを実行しているユーザーのIDを見つける方法

Linuxでsudoを使用して特定のコマンドを実行しているユーザーのIDを見つける方法

複数のユーザーがsudoアカウントを持つ共有環境で特定のスクリプトを呼び出したデフォルトのユーザーID(sudoアカウントではない)の詳細を知りたいです。ありがとうございます。

以下で試しましたが、私の要件を満たしていません。 echo $USERNAMEはsudoアカウントの詳細を提供しますが、ログインIDを探しています。

答え1

sudo環境変数をSUDO_USER実行するプロセスの実際のユーザーIDに対応するユーザー名に設定すると、ユーザー名は通常呼び出すユーザーのユーザー名になりますsudo

また、USERターゲットユーザーに環境変数を設定します。

$ id -un
chazelas
$ sudo printenv SUDO_USER USER
chazelas
root

したがって、asを呼び出すスクリプトでは、sudo the-script元のユーザー名を見つけることができます$SUDO_USER

Linuxでは、次のように特定のプロセスに関する情報を見つけることができます/proc/<pid>/environ

$ sudo sleep 3m &
[1] 97380
$ sudo grep -z '^SUDO_USER=' /proc/[1-9]*/environ | tr '\0' '\n'
/proc/97382/environ:SUDO_USER=chazelas
$ ps -fp 97382
UID          PID    PPID  C STIME TTY          TIME CMD
root       97382   97381  0 12:40 pts/8    00:00:00 sleep 3m

上記の構成を含む一部の構成では、ターゲット・コマンドがsudo同じプロセスで実行されるのではなく、子プロセスで実行および終了するのを待ちます。sudoプロセスの実際のユーザーIDに基づいて、コマンドを呼び出したユーザーを確認できます。

$ ps -o ruser= -p 97380
chazelas

答え2

可能なユーザー変更の完全なチェーンを表示します。

pstree -sul $(ps -C script.sh -o pid=)

-s 両親に見せてください。
-u UIが変更されます。

関連情報