複数のユーザーが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が変更されます。