私の Ubuntu 22.04 システムには、Alice と Sally という 2 人のユーザーがいます。Alice は .profile ファイルで環境変数を設定しており、それらは正常に動作しています。しかし、Alice がコマンド sudo -s -u sally を使用してユーザー Sally に切り替えると、Alice の .profile の環境設定が Sally に反映されません。
alice@dev7 192 0 % echo $appuser
alice
alice@dev7 193 0 % env | grep appuser
appuser=alice
alice@dev7 194 0 % sudo -s -u sally
sally@dev7 196 0 % echo $appuser
sally@dev7 197 0 %
.profile ファイルが Sally のホーム ディレクトリに存在し、必要な構成になっていることを確認しました。Alice が sudo -s -u sally を使用して自分のユーザーに切り替えたときに、環境変数が Sally に適用されない理由を理解したいと思います。この方法でユーザーを切り替えるときに環境設定が引き継がれるようにするには、追加の手順や構成が必要ですか?
答え1
~/.profile
は、ユーザー ログイン時にソース化されます...したがって、次のように、ターゲット ユーザーのパスワード データベース エントリで指定されたシェルをログイン シェルとして実行するには、sudo -u user
を使用する必要があります。-i, --login
sudo -i -u sally
知らせ-i
:とオプションの両方を指定することはできません-s
。
ただし、現在のユーザーのシェルの選択を保持したい場合は、sudo su ...
次のように使用できます。
sudo su - sally --shell "$SHELL"
または、次のようにシェルの選択を指定します/bin/bash
。
sudo su - sally --shell /bin/bash
対象ユーザーのパスワード データベース エントリで指定されたシェルに関係なく。