sudoの前のユーザー名


8

sudoを必要とするスクリプトを取得しましたが、スクリプトは次のような元のユーザーに応じてパラメーターを設定する必要があります。

chown "${USER}:${USER}" dir

sudoで設定するとchmod root:root、結局はで終わりますが、これは役に立ちません。

では、sudoの前にユーザー名を取得するにはどうすればよいですか?

回答:


11

環境変数SUDO_USERは、USERの代わりとして機能する必要があります。

所有権をUSER:USERに設定しているので、ユーザーと同じ名前のグループが常に存在すると思いますか?それ以外の場合、より厳密な解決策は、SUDO_UIDおよびSUDO_GIDを使用することです。

その場合、2つの可能な解決策は次のとおりです。

chown "${SUDO_USER}:${SUDO_USER}" dir

または

chown "${SUDO_UID}:${SUDO_GID}" dir

素敵なanwser、ソリューションといくつかの追加情報。
e-satis

同じユーザー名で複数のUIDを持つことが可能であるため、UID / GIDを使用することが最善のソリューションです。
duffbeer703

4

次のSUDO_USER変数を使用できます。

sudo bash -c 'echo $SUDO_USER'

以下からのsudoの manページ:

sudoは次の環境変数を利用します。セキュリティポリシーは、コマンドの環境の実際の内容を制御します。[...]

SUDO_UID sudoを呼び出したユーザーのユーザーIDに設定します。

SUDO_USER sudoを呼び出したユーザーのログイン名に設定します。


しかし、なぜsudo echo $SUDO_USER何も出力しないのですか?
ロバート

1

SUDO_USERはユーザーが上書きできます。

 $ SUDO_USER='lala' sudo SUDO_USER='test' printenv | grep USER
 USER=root
 SUDO_USER=test
 USERNAME=root

「who am i」または「logname」を使用して元のユーザー名を取得する必要があります

toto:~$ SUDO_USER='lala' sudo SUDO_USER='test' logname             
toto
toto:~$ SUDO_USER='lala' sudo SUDO_USER='test' who am i
toto   pts/4        Jan 23 15:13 (:0.0)

/programming/4598001/how-do-you-find-the-original-user-through-multiple-sudo-and-su-commandsから


「sudo su-」を実行した後、環境変数は使用できなくなりますがlognamewho am i機能します。
RickMeasham 2015

そうです、環境変数に依存することはできません。
cladmi、2015年

SUDO_USERを上書きできない一部のホストで検出されました: sudo: sorry, you are not allowed to set the following environment variables: SUDO_USER まだ安全である可能性があるため、これを確認する必要があります。
cladmi 2016

それは、私のコマンドが「NOPASSWD」に設定されているためです。そのため、「NOSETENV」を介したsudoersの構成に依存します。
cladmi 2016
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.