スーパーユーザープロセスは、プロセスの実際のユーザーIDとグループIDを変更できますが、パスワードファイルのIDと一致しませんか?


11

APUEから

プロセスの実際のユーザーIDと実際のグループIDは、実際のユーザーを識別します。これらの2つのフィールドは、ログイン時にパスワードファイルのエントリから取得されます。通常、これらの値は、ログインセッション中に変更されませんが、スーパーユーザープロセスで変更する方法は あります

スーパーユーザープロセスは、プロセスの実ユーザーIDと実グループIDを変更して、実ユーザーIDと実グループIDの関係がパスワードファイルの関係と一致しないようにできますか?ユーザは、たとえば、Timグループのメンバーではないoceanパスワードファイルあたり、スーパーユーザープロセスがあることを実ユーザIDとプロセスの実グループIDを変更することができますTimし、oceanそれぞれ?


5
ここで重要な明確化点の1つは、スーパーユーザー特権で実行されているプロセスには、別のプロセスのUIDとGIDではなく、自身の UIDとGID を変更する機能があることです。
filbranden


ユーザー情報データベースは純粋にユーザーランドです。カーネルはユーザーとグループのデータベースではなく、UIDとGIDのみを扱います。
爆発鱼芋条德里克

回答:


15

はい。スーパーユーザープロセスは、実際のユーザーIDと実際のグループIDを必要な値に変更できます。/etc/passwdおよびの値/etc/shadowは、設定する値の構成ですが、可能な値の制限ではありません。

編集#1

これは、プログラムloginがファイルから値を読み取ることを意味するため、ファイルは構成ファイルまたは入力ファイルです。プログラムができることの制約ではありません。スーパーユーザープロセスは任意の値をカーネルに渡すことができ、カーネルはファイルをチェックしません。

プログラムは呼び出すことができます

setgid (54321);
setuid (12345);

また、どのファイルにもIDが記載されていない場合でも機能します。


9

パスワードファイルとグループファイルは読み取られません。実際のユーザーIDと実際のグループIDを設定するために、ログインプロセスによってのみ読み取られます。

これらのファイルについて言及しているカーネルには何もありません。ログインは、ファイルを開いて処理し、2つのIDを設定する必要があります。別の場所からこれらのIDを取得するように別の方法で書くこともできます。たとえば、ネットワーク化されたデータベースから。

機能CAP_SETUIDを持つプロセスは、これらのIDを設定できます。ルートにはこの機能があります。

Unixのセキュリティモデルは、一部はカーネルに実装され、一部は高度な機能(たとえば、rootとして)で実行されるプロセスに実装されます。


/etc/passwdと、およびユーザー/グループ名をユーザー/グループIDとの間で変換する必要があるその他のプログラム/etc/groupによっても読み取られることに注意してください。(これらの詳細を保存する代替方法について知っているよりも、ライブラリを介してこれを行うことができます。)lsps


1
これらの(/etc/passwd/etc/groups)は、内部の数値IDの代わりにユーザー名を表示または処理するプロセスによっても読み取られます(例:psおよび)ls
ジョナスシェーファー

3

特にの目的は/etc/passwd、ユーザーの名前をユーザーのUIDに変換することです。bobのUIDが気にならない場合は、そのファイルは必要ありません。任意のUID / GIDに変更するだけの場合は、関連するsyscallsを使用します。

int setuid(uid_t uid);
int setgid(gid_t gid);

CAP_SETUIDとのCAP_SETGID 機能を持つ特権プロセス(ルートプロセスが通常持っている)は、自身のUIDとGIDのみを変更でき、別の実行中のプロセスのUIDとGIDは変更できないことに注意してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.