Rootの環境がまだ使用されているようにSudo -u $user
を使用してSudo
ingダウンしたようです。 Sudo
でユーザー環境を使用するにはどうすればよいですか?特別な注意として、これを使用するすべてのユーザーがログインシェルを持っているわけではありません。
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
Debianのman sudoers
は、別の可能性について言及しています。どちらの方法がいいかわからないが、env_reset
の/etc/sudoers
オプションを使用したいという質問のように聞こえます。逆は基本的にenv_keep
リストです。適切なHOME
を設定するには、-H
オプションをSudo
に直接使用するか、sudoers
でalways_set_home
オプションを使用します。
または、env_file
を使用して、渡すexact環境を指定することもできます。ただし、env_*
がすべてを制御するため、man sudoers
の/etc/sudoers
オプションを確認することをお勧めします。
sudoers
ファイル内でenv_reset
を使用するコンテキストの一部を次に示します。
Defaults !lecture
Defaults env_reset
Defaults syslog=auth
Defaults log_year
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
のコンテキスト値があります。