次のリンクは、これらの概念をさまざまなコンテキストで説明しています。私はそれらの定義を読みましたが、それらがどのように関連しているか、またはそれらのいくつかがまったく同じであるかどうかはまだわかりません。
による - man id
、id
と入力すると、effectiveおよびrealグループID。
id uid=501(joe) gid=501(joe) groups=501(joe), 100(users)
ただし、 Wikipedia はid
の出力を参照して、primaryと補足ID。さらに、ウィキペディアはprimary対supplementaryと実効vs実数グループID。これらの概念はどのように相互に関連していますか?
また、primarygroup ID =group ID=currentグループID?
ここでは2つの異なる区別を混ぜます。
最初の違いは、プロセスの実行方法を示します。通常、コマンド/プログラムを実行すると、ユーザーの権限で実行されます。これには、ユーザーのプライマリグループと同じrealグループIDがあります。これは、別の特別なグループのメンバーとしていくつかのタスクを実行するために、プロセスによって変更できます。これを行うために、プログラムは実効グループIDを変更するsetgid
関数を使用します。
2番目の区別はusersを指します。各ユーザーは自分のプライマリグループを持っています。ユーザーごとに1つだけあり、id
コマンドの出力ではgidと呼ばれます。それとは別に、各ユーザーはいくつかの補足グループに属することができ、これらはid
出力の最後にリストされます。
[編集]:
id
のマンページがここでは誤解を招く可能性があることに同意します。それはおそらくそれがinfoドキュメントによって提供された説明の簡略版であるからです。より明確に表示するには、info coreutils "id invocation"
を実行します(id
マニュアルの最後で推奨されています)。
概念的には、プロセスがメンバーであるグループの3つのセットがあります。各セットは、次のセットのサブセットです。
歴史的な理由により、これらのセットはそれぞれ次のとおりです。
通常、プログラムには単一のユーザーIDがあります。実行可能ファイルに setuid モードビットが設定されている場合、プログラムには2つのユーザーIDがあります。その実効ユーザーIDは、ファイルのアクセス許可、ユーザーごとの制限に関係するもので、プロセスが次のように実行されているかどうかを判断しますルートなど。プロセスは、常に追加の特権を必要としない場合、または2人の非rootユーザーを切り替える必要がある場合、実効ユーザーIDと実際のユーザーIDを切り替えることができます。
同じメカニズムがグループにも存在します。グループの場合、システムの設計時に存在しなかった追加機能があります。プロセスは、任意の数のグループのメンバーになることができます。これらは補足グループIDです。
ユーザーが認証されると、ユーザーのシェル(またはユーザーが要求したプログラム)を起動する直前に、ログインプロセスがそのユーザーに切り替わります。目的のユーザーに切り替える(およびroot権限を失う)直前に、ログインプロセスが目的のグループに切り替わります。
UNIXの初期のバージョンでは、プロセスは単一のグループにしか存在できませんでした。このグループは、ユーザーのプライマリグループIDであり、ユーザーデータベースに保存されます(通常は/etc/passwd
)。このグループは、ログインプロセスによって起動されるシェルまたは他のプログラムの実際の有効なグループIDになります。
現在、プロセスは複数のグループに属することができるため、ユーザーも複数のグループに属することができます。グループデータベース(通常は/etc/group
)には、各グループのユーザーのリストが含まれています。これらのグループは、ログインプロセスによって起動されたプログラムの補足グループIDになります。
他にも多くの優れた答えがありますが、私と同じようにまだ混乱している場合は、ここに別の方法があります。 私はこのものの学生であり、マスターではないことに注意してくださいので、この回答は進行中の作業であり、しっかりしたものとは見なされません答えは、少なくともまだです。この回答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)Loginはユーザー名を認証し、/etc/passwd
からLuID
およびLgID
を返します。
2)最初のプロセスはeffective = real = loginを設定します。
EuID=RuID=LuID
EgID=RgID=LgID
3)フォークされた子は、RuID
、EuID
、RgID
、およびEgID
を継承します(ただし、おそらく保存され、サポートされます)。
実行する新しいプログラムのファイルにsuidビットが設定されている場合は、ファイルから有効に設定します。
EuID = FuID
実行する新しいプログラムのファイルにsgidビット(s)が設定されている場合は、ファイルから有効に設定します。
EgID = FgID
注:基礎となるファイルシステムのsuidおよびnosuidマウントオプションも適用されます。
4a)suidを使用した場合EuID
を設定し、次にEuID
一時的に変更できます(ルートからダウングレードするなど)が、最初に元の値がOuID
に保存されるため、必要に応じて後で復元できます。
4b)sgidを使用した場合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.)*
参考資料: man credentials
Extra:/ 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 }'