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