![現在の(シェル)プロセス内で自分のグループに追加できますか? [コピー]](https://linux33.com/image/28216/%E7%8F%BE%E5%9C%A8%E3%81%AE%EF%BC%88%E3%82%B7%E3%82%A7%E3%83%AB%EF%BC%89%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E5%86%85%E3%81%A7%E8%87%AA%E5%88%86%E3%81%AE%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97%E3%81%AB%E8%BF%BD%E5%8A%A0%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%81%8B%EF%BC%9F%20%5B%E3%82%B3%E3%83%94%E3%83%BC%5D.png)
グループに自分を追加すると、新しく起動したプロセスにのみ適用されます。実際にはそれよりも制限的です。新しいログインでのみ動作するようです。正確なメカニズムが何であるかはわかりませんが、それは私の質問ではありません(私もそれについて疑問に思っていますが)。
私の質問は:私のグループメンバーシップを更新できますか?現在のシェルプロセスで?
私は答えが「いいえ」だと思います。
はい(直接コピーして貼り付けるものではありません):
$ groups ; groups kst
kst oldgroup1 oldgroup2
kst : kst oldgroup1 oldgroup2
$ sudo adduser kst newgroup
[sudo] password for kst:
Adding user `kst' to group `newgroup' ...
Adding user kst to group newgroup
Done.
$ groups ; groups kst
kst oldgroup1 oldgroup2
kst : kst oldgroup1 oldgroup2 newgroup
$
その後、adduser
私のアカウントはのメンバーですが、newgroup
現在のシェルプロセスにはそのメンバーシップは反映されません。
最も明確な解決策はログアウトしてから再度ログインすることですが、これは不便です。
答え1
これはプロセス自体の外では不可能です。バラよりこのスーパーユーザーの質問デバッガを使用してプロセスに接続して実行する方法に関する追加の議論と回答setgid()
内部から。
新しいグループメンバーシップの取得を完了するために新しいログインが必要なのは、rootとして実行されているか、プロセスUIDとGIDをシェルプロセスに設定する必要があるためです。login
これはsshd
すでにsetuid
およびを呼び出していることを意味しますsetgid
。