新しいグループメンバーシップを表示するには、新しいログイン(またはsu
によって開始された新しいログインシェル)が必要なのはなぜですか?newgrp
bash(または他のシェル)の他のインスタンスを実行するだけでは--login
機能しませんが、suやnewgrpなどのsuidルートエントリは機能します。
親シェルから継承されたエントリがあるか、新しいグループメンバーシップを隠すキャッシュがありますか?
ベストアンサー1
子プロセスが作成されると、プロセスユーザーIDとグループIDは親プロセスから継承されます。
したがって、ユーザーグループを変更すると(実際にディスクの構成ファイルを変更した場合)、プロセスは自動的にそれを認識せずにグループIDを変更します(ルート以外のプロセスには権限がありません)。
bashを起動すると…まあ、ちょうどbashを起動すると特別なことは起こりません。親グループID(グラフィックシェルまたは他のbash)を継承するだけです。
しかし、suを実行またはログインすると、すべての魔法が起こります。彼らはすべての子プロセスがこれらのIDを継承するようにログインし、ユーザーIDとグループIDを変更できることを確認します(有効なルートIDを必要とするシステムコールを使用してsuidビットを設定します)。