web-dev-qa-db-ja.com

sudoによって呼び出されるBashスクリプトでユーザーを識別する

スクリプトを作成する場合/root/bin/whoami.sh次を含む:

#!/bin/bash
whoami

このスクリプトは、適切に構成されたSudoを持つユーザーによって呼び出されます。

root

スクリプトで実際のユーザーをすばやく取得する方法はありますか、またはこのユーザー名に沿って渡すパラメーターに頼らなければなりませんか?

94
quadmore

Sudo su -を使用している場合、$ Sudo_USERは機能しません。
複数のチェックも必要です-$USER == 'root'の場合は$Sudo_USERを取得します。

コマンドwhoamiの代わりにwho am iを使用します。これにより、現在のセッションに対してフィルター処理されたwhoコマンドが実行されます。必要以上の情報を提供します。したがって、ユーザーだけを取得するにはこれを実行します。

who am i | awk '{print $1}'

代わりに(そしてより簡単に)lognameを使用できます。上記のステートメントと同じことを行います。

これにより、セッションにログインしたユーザー名が得られます。

これらは、SudoまたはSudo su [whatever]に関係なく機能します。また、suおよびSudoが何回呼び出されても機能します。

120
evan

$ Sudo_USER が有効だと思います。

#!/bin/bash
echo $Sudo_USER
whoami
49
Brandon Horsley

Sudoかどうかに関係なく、スクリプトを呼び出した人のユーザー名を取得する方法は次のとおりです。

if [ $Sudo_USER ]; then user=$Sudo_USER; else user=`whoami`; fi

またはより短いバージョン

[ $Sudo_USER ] && user=$Sudo_USER || user=`whoami`
12
Alexei Tenitski

who am i | awk '{print $1}'私にはうまくいきませんでしたが、who|awk '{print $1}'は仕事をする

2
Srinivas

奇妙なことに、システムは 実際のUIDと有効なUID を区別しますが、これをシェルレベルでエクスポートするプログラムは見つかりません。

1
msw

whoamiwho am iwhoid、または$Sudo_USERの使用は適切ではありません。

実際、whoは、ログインしたユーザーのみをリストするため、質問に対する解決策になることはありません。

私の目には、唯一の価値ある答えはlognameの使用です。

お役に立てれば

ロブ

0
Rob