GID、現在、基本、補足、有効、実グループID?

GID、現在、基本、補足、有効、実グループID?

次のリンクでは、これらの概念をさまざまな文脈で説明します。私は彼らの定義を読みましたが、それでも彼らがどのように関連しているのか、それらのいくつかが同じかどうかはわかりません。

私の混乱の原因の例は次のとおりです。

~によるとman id、私が入力すると、id彼らが言う内容を得ることができます効果的なそして本物グループID。

id uid=501(joe) gid=501(joe) groups=501(joe), 100(users)

しかし、ウィキペディアid区別するために出力を示します。基本的なそして再充填する身分証明書。また、ウィキペディアは以下を区別します。基本的なそして再充填するそして効果的なそして本物グループID。これらの概念は互いにどのように関連していますか?

また、これは本当ですか?基本的なグループID =グループID=現在のグループID?

答え1

ここでは、2つの異なる違いを混ぜています。

  1. 〜サイ本物そして効果的なグループID
  2. 〜サイ基本的なそして再充填するユーザーグループ

最初の違いは次のとおりです。プロセスの仕組み。通常、コマンド/プログラムを実行すると、ユーザーの権限で実行されます。持っている本物グループIDは、ユーザーのデフォルトグループと同じです。これは、他の特殊グループのメンバーとして特定のタスクを実行するプロセスによって変更される可能性があります。この目的のために、プログラムはsetgid自分のプロパティを変更する機能を使用します。効果的なグループID。

2番目の違いは次のとおりです。ユーザー。各ユーザーはメイングループ。ユーザーごとに1つだけ呼び出されます。ジドコマンドの出力からid。さらに、各ユーザーは複数のグループに属することができます。補足グループ- この列は出力の末尾にありますid

[編集する]:

私はidここのマンページがやや誤解を招くことに同意します。これは、情報文書によって提供される説明が圧縮されたバージョンであるためです。より明確にするには、info coreutils "id invocation"マニュアルの最後に提案されているとおりに実行してくださいid

答え2

カーネルを見る

概念的には、プロセスは3つのグループに属します。各グループは、次のグループのサブセットです。

  1. プロセスによって生成されたファイルが属するプロセスの基本グループとして機能する単一のグループ。
  2. グループがファイルを開くために権限が必要なときにチェックされるグループのセット。
  3. 追加の権限で実行されるプロセスで利用できるグループのセットです。

歴史的な理由から、これらのセットは次のとおりです。

  1. これ有効グループID(良い);
  2. 有効グループIDプラス補助グループID;
  3. 上記のすべてのプラス実際のグループIDそして保存されたコレクショングループID

通常、プログラムにはユーザーIDがあります。実行可能ファイルがある場合設定値モードビットがセットされると、プログラムは2つのユーザIDを有する。有効ユーザーIDは、ファイル権限、ユーザー固有の制限、プロセスがrootとして実行されているかどうかを判断することなどに関連しています。プロセスに常に追加の権限が必要ない場合、またはルート以外の2人のユーザーを切り替える必要がある場合は、有効なユーザーIDと実際のユーザーIDを切り替えることができます。

グループにも同じメカニズムがあります。システムを設計するときに存在しなかったグループに追加機能があります。プロセスは複数のグループのメンバーになることができます。これは補助グループIDです。

ユーザーデータベースの表示

ユーザーが認証されると、ユーザーのシェル(またはユーザーが要求するプログラム)を開始する前に、ログインプロセスがそのユーザーに切り替えられます。目的のユーザーに切り替えてroot権限を失う直前に、ログインプロセスが目的のグループに切り替えられます。

以前のバージョンのUNIXでは、プロセスは1つのグループにしか存在できませんでした。グループは、ユーザーデータベース(通常は/etc/passwd)に保存されているユーザーのデフォルトのグループIDです。このグループは、ログインプロセスによって開始されたシェルまたは他のプログラムの実際的で効果的なグループIDになります。

最近では、プロセスは複数のグループに属することができるため、ユーザーも複数のグループに属することができます。グループデータベース(通常/etc/group)には、各グループのユーザーのリストが含まれています。これらのグループは、ログインプロセスによって開始されたプログラムの補足グループIDになります。

答え3

ここには他の素晴らしい答えがたくさんありますが、私のようにまだ混乱している場合は、別のアプローチがあります。 私はこの分野の修士号ではなく学生に過ぎないことに注意してください。したがって、この回答は進行中の作業であり、少なくともまだ信頼できる回答とは見なされません。この答えv0.2を考えてみましょう。

グループは単純でも複雑でもかまいません。

IDキーは以下のように使用されます。

KEY  Full name --------  Description---------------------------------------------

 u   User                 uID = User  ID (a unique # associated with each user)
 g   Group                gID = Group ID (a unique # associated with each group)
                            While each /etc/passwd entry has one uID and one gID,
                            additional gIDs can be associated with a users via
                            /etc/group.


 L   Login          IDs - uID and gID produced from the Login process.  
                            ('L' is not exactly standard Linux terminology, but
                            useful for explanations below.)

 F   File           IDs - uID and gID retrieved from a file's ownership.
                            ('F' is not exactly standard Linux terminology, but
                            useful for explanations below.)


 R   Real           IDs - Who actually                      runs a process 
 E   Effective      IDs - Who spoofed via setuid or setgid, runs a process
 O   Original Eff.  IDs - Place to save the original Effective ID when changing 
                          it (e.g. temporarily downgrading it) so can later 
                          restore it.  Also called "Saved ID"; (but 'S' was not 
                          used for here to help avoid confusion with the 'S' in  
                          'SetUserID' & SetGroupID.)
 +   Supplimentary gIDs - Optional, additional groups (none or more) running 
                          this process which can be used to test for permissions.

ユーザーとグループIDの名前:

Category          USER  GROUP  Notes  
----------------- ----  -----  -------------------------------------------  
 From login:      LuID  LgID   From /etc/passwd lookup

 From files:      FuID  FgID   Each file has these. Set by creator process.


 For each running process:

            Real  RuID  RgID   Actual   user starting the program
       Effective  EuID  EgID   Assigned user starting the program*
           Saved  OuID  OgID   Saves original effective ID.
   Supplementary        +gID1  (optional, additional groups)
                        +gID2     
                         ...  

プロセスがIDを取得する方法:

1)ログインユーザー名を確認してから返しLuIDます。LgID/etc/passwd

2)最初のプロセスEffective=real=login に設定します。つまり、

EuID=RuID=LuID 
EgID=RgID=LgID

三)二股に分かれた子RuID、、、、(&は保存してサポートできます)を継承しEuIDますが、 RgIDEgID

  • もしあなた実行する新しいプログラムのファイルにIDビットを設定し、ファイルに有効なビットを設定します。

    EuID=FuID

  • もしG実行する新しいプログラムのファイルにIDビットを設定し、ファイルに有効なビットを設定します。

    EgID=FgID

注:基本ファイルシステムスエイドそしてノスイドインストールオプションも適用されます。

4a)の場合あなたIDが使用されましたEuIDその後、設定をEuID一時的に変更できます(たとえば、ルートからダウングレード)、元の値は後で必要に応じてOuID復元できるように最初に保存されます。

4b)の場合GIDが使用されましたEgIDその後、設定をEgID一時的に変更できます(たとえば、ルートからダウングレード)、元の値は後で必要に応じてOgID復元できるように最初に保存されます。


ファイルを生成したい場合:

File's new id's are set from effective id's: FuID=EuID and FgID=EgID
(Permissions are set from umask.)

読み取り可能:

If FuID = EuID  and  user-read bit is set, or  
If FgID = EgID  and group-read bit is set, or  
If FgID = +gID1 and group-read bit is set, or  
If FgID = +gID2 and group-read bit is set, ...  
then allow reading.

書き込み用に開いている:

(Same as above but write bit set to allow writing.)

公開実行:

(Same as above but execute bit set to allow execution.)

メッセージを送信する必要がある場合:

Use RuID and RgID.  (Not EuID or EgID). *(Not sure where I read this.)*

引用:男性ギフト券

追加:以下は/ etc / groupファイルをきれいに印刷するユーティリティです:

cat /etc/group | sort -t: -k3n | awk  -F ':' \
  'BEGIN{printf "\n%-20s %-3s %-8s %s", \
           "Group name","pw", "Group ID ", "User list"}\
   BEGIN{printf "\n%-20s %-3s %-8s %s\n", \
           "----------","--", "---------", "---------"} \
        { printf "%-20s %-3s %8d %s\n", $1, $2, $3, $4 }'

関連情報