
グループの作成方法を検索するたびに、例は常に8章(つまりシェル)コマンドを指しています。一般的なシステムコールのリストを見ると(例:ウィキペディアページ)、グループIDを設定してインポートするコマンドが表示されますが、生成方法の詳細はありません。
このファイルからファイルシステムロックを取得しているように見えるいくつかのコードが見つかりましたが、/etc/groups
一部のシステム(Androidなど)にはこのファイルがありません。
オペレーティングシステムは、グループが何であるかをどうやって知ることができますか?ファイルとプロセスエントリの純粋にメタデータですか?
答え1
カーネルはグループが何であるかわかりません。グループIDのみを知っています。カーネルのグループを「作成」する必要はなく、グループIDのみを割り当てるだけです(これらはすべてユーザーにも適用されます)。
これで、オペレーティングシステム全体(カーネル外)はグループとユーザーを管理します。通常、名前(グループ、ログイン)とIDを検索して相互に変換できますが、/etc/group
最終的にライブラリ呼び出し(システム呼び出しではない)(および他のgetpw *)、および(にリストされているように/etc/passwd
)他のオプションも使用できます。および getgr*) 資格情報ソースで構成されたすべての項目を介して変換します。/etc/nssswitch.conf
getpwent
getgrent
そのため、ユーザーとグループを生成するシェルコマンドだけがそのように実行されるため、これを見つけることができます。カーネルがこの情報を追跡しないため、システムコールはありません。
(技術的にはGUIインタフェースを使用して作成できますが、シェルコマンドと変わりません。)
Linuxカーネル(Android)の一部の使用は、ユーザーとグループを動的に作成します。繰り返しますが、これはカーネルではなくユーザーモードのAndroid監視システムによって管理されます。
答え2
ファイルとプロセスエントリの純粋にメタデータですか?
はい、カーネルはどのユーザーやグループが存在するのか、その名前が何であるかを知ったり気にしません。ただし、プロセスが属するユーザーとグループには興味があります。プロセスは通常、1 つのユーザー ID に関連付けられますが、場合によっては複数のユーザー ID に関連付けることもできます。プロセスは、プライマリグループとセカンダリグループのリストにも関連付けられます。
ログインすると、ログインシステムは、システムが使用する認証データソースに基づいて、ユーザーIDと関連グループをプロセスに割り当てます。一般的なスタンドアロンシステムでは/etc/passwdファイルと/etc/groupファイルですが、管理対象システムでは異なるデータソースを設定できます。
最新の(Androidではない)Linuxシステムでは、このプロセスは通常PAM(プラグイン認証モジュール)と呼ばれるメカニズムによって制御されます。
そのため、新しいグループに追加した後は、ログアウトして再度ログインするか、「newgrp」などのツールを使用する必要があります。