「root」ユーザーとして実行される親プロセスがあります。fork()
、execl()
およびそれ以降、setuid()/setgid()
子プロセスは別のオペレーティングシステムユーザー(例:user1)で始まります。
環境を印刷すると、user1でログインしたのとは異なり、ルート環境と同じであることがわかります(ルートとしてログインしたかのように)。なぜ?
子プロセスでuser1の環境を読み取る方法はありますか?
ベストアンサー1
すべてのプロセスに親環境からコピーされた独自の環境。親がシェルなら概念がありますエクスポートできる変数この点を考慮する必要がありますが、直接取引する場合は適用されませんexec()
。このLOGNAME
変数は通常ログインシェルによって設定され、リセットされていない残りの値のみが表示されます。だからあなたははい子供の環境を見てください。一部のシステムでは親(または他のプロセス)環境に簡単にアクセスできませんが、Linuxではアクセスできます(制限の制限によって異なります)。渡す/proc
)
su
を試してみている効果を再現できますsu -
。後者はシェルログイン環境を初期化して(ほぼ確実に)リセットされ、LOGNAME
前者は何よりも変更されていません。
env
コマンドを使用することは、コマンドラインから新しいプロセスを開始するときにクリーンな環境を得るための1つの方法であり、execle()
同様の操作を実行する方法を知るには、システムのマニュアルを確認する必要があります。