Linux:グループとグループのユーザー名


12

Linuxコマンドがなぜなのか誰か知っていますか

    groups 

とは異なる出力を示します

    groups username 

ログインしたユーザーは、パラメーターのユーザー名と同じです。例:

    thorsten@ubuntu:~/tmp$ groups
    thorsten adm dialout cdrom plugdev lpadmin admin sambashare
    thorsten@ubuntu:~/tmp$ groups thorsten
    thorsten : thorsten adm dialout cdrom plugdev nogroup lpadmin admin sambashare

1
この質問の多くの重複があり、どこから始めればよいかさえわかりません。
user1686 2012

回答:


12

あなたが実行すると、それは見上げ1を与えられたユーザでと(それがLDAP、NISまたは何か他のものであってもよい2)やショーあなたのすべてのグループが見つかりました。groups username/etc/passwd/etc/group

一方、groups引数を指定せずにコマンドを実行すると、コマンド自体3に属するすべてのグループが一覧表示されます。これは、の一覧と必ずしも同じではありません/etc/group。(説明については、以下を参照してください。)実際に行われる検索は、GIDをグループ名に変換するためだけ/etc/groupです。


各プロセスには、「本当のグループID」(プライマリGID)、「実効グループID」(EGID)、および「補足グループ」ID(セカンダリGID)のリストを含む資格情報のセットがあります。デフォルトでは、プロセスは親から資格を継承します。ただし、root(UID 0)として実行されている、またはそのCAP_SETUID機能を持つプロセスは、任意の資格情報を設定できます。

特に、(tty、X11、またはSSHを介して)Linuxにログインすると、ログインプロセス(/ bin / login、gdm、sshd)がユーザー名を検索して、UID、プライマリGID、セカンダリGIDを決定します。個人のマシンでは、これはファイルpasswdgroupファイル(またはNIS、LDAPなど)から適切な行を読み取ることを意味します。

次に、ログインプロセスは、セッションを開始する前にこれらの資格情報に4を切り替えます。これから起動するすべてのプロセスは、まったく同じUIDとGIDを持ちます。システムはチェックを行わ/etc/groupなくなり5、行われた変更を取得しません。

このように、/usr/bin/groupsプロセスは、ログインしときと同じグループに属します。データベースは、自分がいると言っているグループはありません。

注:上記の説明は、ほとんどすべてのUnixにも当てはまります。Windows NTの家族に(UIDとGIDは、すべて「のSID」と呼ばれている以外、資格情報は「プロセストークン」と呼ばれていない「プライマリグループ」が存在しない、とCAP_SETUIDあるSeCreateTokenPrivilegeまたはSeTcbPrivilege); そして他のほとんどのマルチユーザーオペレーティングシステムにありそうです。


1 getpwuid()およびgetgrouplist()は、ユーザーのグループを検索するために使用されます。

2 Linuxでは、glibcはこの情報を探す場所/etc/nsswitch.conf決定するため使用します。

3 groupsは、getgid()、getegid()、およびgetgroups()を使用して、独自の資格情報を取得します。

4 setuid()、setgid()、initgroups()および関連。

5アン例外は、当然のことながら、上昇(RUN様々なツールであるのsetuidなど)susudosgnewgrppkexec、など。これはsu $USER、更新されたグループリストでシェルを生成することを意味します。


3

groups単独では、プロセスの所有者の現在のグループメンバーシップを提供します。これはgroups <username>、プロセスの開始以降にgroupdbが変更された場合、またはプロセスの所有者が変更された場合とは異なる場合があります。


groups現在のメンバーシップを提供しませんが、ログインプロセス(/ sbin / login、gdm、sshd)がを呼び出したときに「現在」であったメンバーシップを提供しますinitgroups()
user1686 2012

1

コンピュータを再起動するだけで、グループとグループユーザーの両方が同じ結果を得るはずです。

それらが異なる理由は、コンピューターを起動したときにメンバーではなかった新しいグループに自分を追加したためです。


システム全体を再起動する必要はありません。新しいログインセッションを開始するだけです(つまり、新しい仮想コンソールで、を使用してsu、現在のセッションを再度開いて閉じます)。を使用newgrpして、新しいグループを含めたプロセスを開始することもできます。
pabouk 2013年

1
私は毎回機能する簡単なクイックフィックスソリューションを提供することだけを意図しました。この質問にすでに詳細に回答している他の回答はたくさんあります。私の場合のように、人々が望むものは、いくつかのステップを経なくても機能する単純なソリューションである場合があります。
Alex

0

を実行しupdatedb、変更がないか確認します。

groupdbが変更されていない場合、私のOSXマシンでも同じです。

albert-hotspot:~ sami$ groups sami
staff com.apple.access_screensharing com.apple.sharepoint.group.2 everyone _appstore localaccounts _appserverusr admin _appserveradm _lpadmin _lpoperator _developer
albert-hotspot:~ sami$ groups
staff com.apple.access_screensharing com.apple.sharepoint.group.2 everyone _appstore localaccounts _appserverusr admin _appserveradm _lpadmin _lpoperator _developer
albert-hotspot:~ sami$ 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.