Imが現在ユーザーとしてログインしている場合、「groups」からの出力が「groups user」と異なるのはなぜですか?


21

次の出力が異なる理由がわかりません。私の理解では、ユーザーを指定しないグループは、現在ログインしているユーザーがメンバーであるすべてのグループを与えます。

jacob@box:~$ groups
jacob adm lp dialout cdrom plugdev lpadmin sambashare

jacob@box:~$ groups jacob
jacob : jacob

また、「現在のプロセスのグループ」とはどういう意味ですか(グループのマニュアルページから)。どこに設置されていますか?

注:私のディストリビューションはUbuntuです。


@ジェイクログアウトしてからもう一度試してください

1
私は逆にこの問題を抱えています。「groups myname」は/ etc / groupsファイルにあるすべてのグループを提供しますが、「groups」だけを実行すると、プライマリグループのみが表示されます。そして実際、特定の補助グループに所属する必要があるコマンドは、権限がないために失敗します。確かに私はこれが何を引き起こしているのか知っていたならいいのに。
トッドウォルトン

回答:


11

次のいずれかです。

  • バグかもしれません(疑わしいですが)
  • ログアウトして再度ログインする必要がある場合があります

グループはに設定されます/etc/group


8

すべてのプロセスに現在の実際の有効なユーザーIDと実際の有効なグループIDがあるように、補助グループのリストもあります。これらはすべてカーネルによって維持される番号(名前ではない)です。ユーザーIDと同様に、ログインプロセス(またはディスプレイマネージャー)によってログに記録されます。ユーザーIDと同様に、サブプロセスに継承されます。

groups引数なしで実行すると、最終的にgetgroups()を呼び出して、カーネルから補足グループリストを取得します。(私のLinuxシステムでは、/ usr / bin / groupsは「id -Gn」を実行するシェルスクリプトであり、getgroups()を呼び出します。)

を実行するgroups usernameと、コマンドは、ユーザーがログインしたときに補助グループが何であるかを「推測」する必要があります。通常は、/ etc / groupを読み取るか、NISに話しかけるか、nscdに話しかけます。それが機能する多くの方法。

観察していることは、現在の実際のユーザーIDと/ etc / passwdのエントリに一貫性がないことを発見することに似ています。これは、システムの構成について少し奇妙なものがあることを意味しますが、それ以上の調査をせずに何を言うのは難しいです。


3

(注:このgroupsコマンドは、まだ便利ですが、ほとんどはidコマンドに置き換えられています。)

ユーザーには、ログインに使用するファイル/etc/passwdファイルで従来から定義されているプラ​​イマリグループがあります が、現在は他のソースがある場合があります。彼はまた、ファイル/etc/groupsで伝統的に指定されているセカンダリグループまたは補足グループとして知られる追加グループのメンバーである場合がありますが、現在は追加ソース(NIS、LDAP、SAMBAなど)から来たり、暗示されることもあります。

プライマリおよび補足グループは、ログイン時に定義され、現在のままです。ただし、ユーザー はコマンドを使用して、現在のアクティブなプライマリグループをいつでも変更できnewgrpます。

ログインプロセスにより、プライマリグループと補足グループが設定されます。後者の場合、通常はlibc関数initgroupsを呼び出します。これは、補助グループデータのリストをコンパイルし、それをsetgroups関数に渡し ます 。setgroups関数は、プロセスのコンテキストでそれを確立します。

情報のソースinitgroupsは次のとおりです。

GNU Cライブラリおよびその他の特定のアプリケーションで使用され、さまざまなカテゴリのネームサービス情報を取得するソースとその順序を決定します。情報の各カテゴリは、データベース名で識別されます。

このgroupsコマンドは、ユーザーに現在適用さいるグループを表示します。リストは、現在のプライマリグループから始まり、ログイン時から補足グループが続きます。ログイン時刻以降のデータのソースへの変更は、表示されたリストには反映されません。

groups usernameコマンドがするのLinuxを求めて計算し、それは主にファイル使用して行うであろう、そのユーザーのグループを/etc/password して/etc/groups、その後、追加のソースを。これはシステムファイルの現在の状況を反映し、ログイン時からまだ有効な現在のグループとは異なる場合があります。

このgroups usernameコマンドは、ログインプロセスが補足グループの計算に使用したすべてのソースを使用しない場合、異なる結果になる場合があります。これらのソースは、ログインからアクセスできない場合や、コマンドによって参照されない場合があります。

このid usernameコマンドを使用すると、より良い結果が得られる場合がありますが、ログインプロセスの場合ほど完全であるとは限りません。このidコマンドは、古いgroupsコマンドよりも新しいものであり、古いコマンドよりも正確であることを目的としていました。

このgroupsコマンドは正確で正しい結果を提供しますがgroups username、同じことを行うためにコマンドに依存できないことを十分に実証しています。

groupsコマンドのソースコードを調べることなくgroups username、Linuxディストリビューション分析でのコマンドの実装は、/etc/groupsあなたの場合は何も含まれていないが/etc/nsswitch.conf、を使用していないため、すべての補助グループから来たと思います。したがって、プライマリグループ名のみが表示され jacobます。

詳細については、以下を参照してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.