Linuxプログラミングインターフェイスから、/etc/passwd
について:
同じユーザーIDのパスワードファイルに複数のレコードが存在する可能性があります(ただし、珍しい)複数のログイン名同じユーザーIDを許可します。これにより、複数のユーザーが異なるパスワードを使用して同じリソース(ファイルなど)にアクセスできます。 異なるログイン名を異なるグループIDのセットに関連付けることができます。
グループID(GID)フィールドは、このユーザーがメンバーである最初のグループの数値IDです。このユーザーのその他のグループメンバーシップは、システムグループファイルで定義されます。
/etc/group
について:
ユーザーリストフィールドは、このグループのメンバーであるユーザー名のカンマ区切りのリストです。 (このリストはユーザーIDではなくユーザー名で構成されています。これは、前述のように、ユーザーIDがパスワードファイル内で一意である必要がないためです。)
/etc/passwd
では、
グループIDフィールドはユーザー名またはユーザーIDに依存しますか?
言い換えれば、同じユーザーIDの異なるユーザー名が異なるグループIDを持つことができますか、または同じユーザーIDのすべてのユーザー名が同じグループIDを持つ必要がありますか?
ありがとう。
ユーザーデータベースのキー、/etc/passwd
または何か他のものは、ログイン名です。ログイン時に自分を識別するために提供するのはこれだけです。そのキーから、プログラムはユーザーデータベースに保存されている他のすべての情報を取得できます。これは、同じユーザーIDを持つ他のユーザーであっても、ユーザーデータベース内の他のユーザーに関係なく発生します。 (通常、これは getpwnam
またはgetpwnam_r
、直接またはviaPAMのいずれか。)
したがって、ログイン名は、保存されているパスワード、ユーザーID、(プライマリ)グループID、GECOS情報、ホームディレクトリ、シェルにつながります。つまり、2人のユーザーが同じユーザーIDを共有できるにもかかわらず、ホームディレクトリとシェルが異なるということです。 (これは、ルートに静的にリンクされたフォールバックシェルを提供するために過去に一般的に使用されていました。ID0の通常のroot
ユーザーとシェル/bin/bash
または何でも、そして別のユーザー、例えばsashroot
で、IDが0でシェルが異なります。)
したがって、答えは
グループIDフィールドはユーザー名またはユーザーIDに依存しますか?
それはユーザー名だけに依存するということです。
グループデータベースのキーは、グループ名でもあります。そのキーから、プログラムはグループデータベースに格納されている他のすべての情報を取得できます。これも、グループデータベース内の他のグループを考慮せずに発生します。 (ユーザーのセカンダリグループを決定する場合、プロセスはユーザーデータベースを読み取るよりも複雑です。特定のユーザーが属するグループを一覧表示する機能はないため、通常これは getgrent
およびendgrent
。)
したがって、グループ名は、グループパスワード、グループID、およびユーザー名のリストであるグループメンバーのリストにつながります。ユーザーのセカンダリグループのセットを作成するために、すべてのグループが列挙され、ユーザーのログイン名がグループのメンバーと照合されます。そのため、同じユーザーIDを持つ2人の異なるユーザーが異なるプライマリグループを持つだけでなく、異なるセカンダリグループのセットに属することができます。
したがって、答えは
言い換えれば、同じユーザーIDの異なるユーザー名が異なるグループIDを持つことができますか、または同じユーザーIDのすべてのユーザー名が同じグループIDを持つ必要がありますか?
ユーザーのグループはユーザー名にのみ依存し、ユーザー名が異なるとユーザーIDを共有できますが、プライマリグループとセカンダリグループは異なります。
グループIDフィールドは、ユーザー名またはユーザーIDに依存しますか?
いいえ。各アカウントエントリには、/ etc/passwdエントリ行に、ユーザ名、UID(userid)、およびGID(グループID)の必須フィールドがあります。しかし、GIDは何にも「依存」していません。 addgroupコマンドを使用して、独自のカスタムグループを/etc/group
に追加できます。
つまり、同じユーザーIDの異なるユーザー名が異なるグループIDを持つことができますか、または同じユーザーIDのすべてのユーザー名が同じグループIDを持つ必要がありますか?
はい、それがあなたが疑問に思っていることなら、UIDとGIDの間に「依存関係」はありません。 /etc/passwd
エントリのGIDはユーザーのデフォルトのグループIDを示しますが、usermod
コマンドを使用して、/etc/group
で必要な数のグループにユーザーを割り当てることができます。
Sudo usermod -a -G groupname username
デフォルトのGIDを好きなように変更することもできます。デフォルトでは、ユーザーと同じ名前でGIDを作成しますが、これは難しい要件ではありません。変更できます。