web-dev-qa-db-ja.com

Sudo -u $ userでユーザー環境を使用するにはどうすればよいですか?

Rootの環境がまだ使用されているようにSudo -u $userを使用してSudoingダウンしたようです。 Sudoでユーザー環境を使用するにはどうすればよいですか?特別な注意として、これを使用するすべてのユーザーがログインシェルを持っているわけではありません。

19
xenoterracide

Sudo -i -u $userをお試しください

gerald@book:~$ env |grep HOME
HOME=/home/gerald
gerald@book:~$ Sudo -u ubuntu env |grep HOME
HOME=/home/gerald
gerald@book:~$ Sudo -i -u ubuntu env |grep HOME
HOME=/home/ubuntu
21

Debianのman sudoersは、別の可能性について言及しています。どちらの方法がいいかわからないが、env_reset/etc/sudoersオプションを使用したいという質問のように聞こえます。逆は基本的にenv_keepリストです。適切なHOMEを設定するには、-HオプションをSudoに直接使用するか、sudoersalways_set_homeオプションを使用します。

または、env_fileを使用して、渡すexact環境を指定することもできます。ただし、env_*がすべてを制御するため、man sudoers/etc/sudoersオプションを確認することをお勧めします。

sudoersファイル内でenv_resetを使用するコンテキストの一部を次に示します。

Defaults        !lecture
Defaults        env_reset
Defaults        syslog=auth
Defaults        log_year
4
0xC0000022L

Sudoing環境変数が保存されない場合。

私の場合、私は here-document を使用します。

my_script.shなどのアクションをここのドキュメント内に配置します。

su -u some_user <<EOF
./my_script.sh
EOF

変数は現在のユーザーから解釈されるため、ここに直接入力しないでください。

su -u some_user <<EOF
./my_script.sh $MY_VAR
EOF

スクリプトを実行するユーザーに$MY_VARが設定されていない場合、設定されません。

変数はスクリプト内で呼び出すか、\でエスケープする必要があります。

例えば。

su -u some_user <<EOF
./my_script.sh \$MY_VAR
EOF

ここで、$MY_VARにはsome_userのコンテキスト値があります。

1
Juaniyyoo