グループにユーザー名を追加した後、グループとグループUSERNAMEの出力が異なります。

グループにユーザー名を追加した後、グループとグループUSERNAMEの出力が異なります。

今日は奇妙な行動を見つけました。新しいグループにユーザーを追加すると、次のようになります。

# gpasswd -a test myuser

groupsその後、新しいbashセッションに接続すると、結果は次のようになりますgroups myuser

myuser@mycomputer$ groups
wheel myuser
myuser@mycomputer$ groups myuser
wheel myuser test

再起動時にのみ出力はgroups同じに表示されますが、groups myuserグループが必ずしも同じ順序で表示されるわけではありません。

だから私の質問は簡単です。なぜですか?

答え1

新しいグループが開始されるまで、グループメンバーシップの変更は適用されないためです。ログインシェル。新しい非ログインインタラクティブシェルセッション(新しい端末を開いたときに取得されるセッション)を開始することは関係ありません。

したがって、を実行すると、groupsユーザーが現在属しているグループが印刷されます。ただし、これらのグループはユーザーが初めてログインしたときに設定され、再度ログインするまで変更できません。したがって、groups新しいグループは含まれません。

一方、システムは実行時にgroups myuser検索しません。現在のユーザーは以下に属します今は、ユーザーが属するグループを見つけますmyuser。これは/etc/group設定ファイルを読んで得たものです(おそらく)。ユーザーが新しいグループに属するように設定されているため、/etc/groupsこのコマンドはユーザーがグループに属していなくてもその内容も表示します。もう一度ログインしていないため、すでにこのグループに属しています。

答え2

  • 引数なしで実行すると、groups現在のグループのリストが表示されます。プロセス。通常、リストは単に親プロセスから継承されますが、同様に変更されloginますnewgrp

  • 引数を使用して実行すると、指定されたgroupsグループにリストされている(ユーザーデータベースに)グループが表示されます。ユーザーlogin次回このユーザーなどに対して実行時に設定されるグループのリストです。

これがユーザー/グループデータベースの更新が影響を与える理由です。未来ログインセッション - すでに実行中のプロセスが変更されるとは思わないでください。

関連情報