子プロセスの他のユーザーエクスペリエンス

子プロセスの他のユーザーエクスペリエンス

「root」ユーザーとして実行される親プロセスがあります。fork()execl()およびそれ以降、setuid()/setgid()子プロセスは別のオペレーティングシステムユーザー(例:user1)で始まります。

環境を印刷すると、user1でログインしたのとは異なり、ルート環境と同じであることがわかります(ルートとしてログインしたかのように)。なぜ?

子プロセスでuser1の環境を読み取る方法はありますか?

ベストアンサー1

すべてのプロセスに親環境からコピーされた独自の環境。親がシェルなら概念がありますエクスポートできる変数この点を考慮する必要がありますが、直接取引する場合は適用されませんexec()。このLOGNAME変数は通常ログインシェルによって設定され、リセットされていない残りの値のみが表示されます。だからあなたははい子供の環境を見てください。一部のシステムでは親(または他のプロセス)環境に簡単にアクセスできませんが、Linuxではアクセスできます(制限の制限によって異なります)。渡す/proc)

suを試してみている効果を再現できますsu -。後者はシェルログイン環境を初期化して(ほぼ確実に)リセットされ、LOGNAME前者は何よりも変更されていません。

envコマンドを使用することは、コマンドラインから新しいプロセスを開始するときにクリーンな環境を得るための1つの方法であり、execle()同様の操作を実行する方法を知るには、システムのマニュアルを確認する必要があります。

おすすめ記事