他人に権限を与えるのではなく setuid を設定する理由

他人に権限を与えるのではなく setuid を設定する理由

一般ユーザーが自分のパスワードを更新しようとしているとします/etc/passwd

のようなことを行う方が良い理由は、-rws------他のユーザーが-rwx---rwx

私が概念を実際に理解していない可能性があるので、誰かが私に説明してほしいので、私が間違っている場合は訂正してください。

答え1

setuidビット(sin -rws------)は、プログラムが実行されるたびに生成されたプロセスが次を使用することを意味します。プログラムファイルを所有するユーザーadminファイルを所有して実行すると、john結果プロセスはadminの有効なユーザーIDで実行されます。 (ただし、「john実際の」ユーザーIDは引き続き渡されます。)です。adminjohn

上記の権限を使用すると、所有者以外は誰もプログラムを実行できないため、setuidビットは意味がありません。

権限があれば、-rwx---rwxファイルグループのメンバーでない人は誰でもファイルを実行できますが、自分のユーザーIDで実行します。彼らはプログラムを通じて追加の権利を受けません。

答え2

ここで重要なのは、これが/etc/passwd保護されたファイルであることです。管理者以外は誰も編集できません。私のDebianでは、-rw-r--r--SUIDが何に関連しているのかは明らかではありません。これはあなたには理解できません/etc/passwd。これは変更される可能性があるプログラムにのみ意味があります/etc/passwd。しかし、今-rws------ikkachuが前述したように、このプログラムファイルにはあま​​り意味がありません。-rws---r-x通常のユーザーがおそらく実行するので、これは意味があります。ただし、このファイルは/etc/passwd保護されたファイルであるため、変更が必要な実行可能ファイルを作成するときは、これらの保護を考慮する必要があります。ちなみに、固定ビットはセキュリティ上の理由からスクリプト言語では動作しません。

答え3

自分のパスワードを変更するには、ユーザーは何らかの方法で新しいパスワードハッシュを作成する必要があります/etc/shadow(または/etc/passwdシャドウパスワードの実装がないレガシーシステムの場合)。

ユーザーがファイルへの書き込みアクセスを許可されている場合、ユーザーはファイル内のすべてのエントリを変更できます。誰でもパスワードを入力してすべてのユーザーを偽装することで、簡単にrootアクセス権を取得できます。これは明らかに受け入れられないことです。

ソリューションは、ユーザーが実行する能力を備えた「ゲートキーパー」です。特定の行為ルートレベルのアクセス権があります。つまり、自分自身を変更できます。私自身パスワードのみ。

この/bin/passwdプログラムはまさにゲートキーパープログラムです。ユーザーがルート(または場合によっては適切な追加権限を持っている場合)ではなく、ユーザー自身のパスワードのみを変更できるように、非常に慎重に作成されました。ゲートキーパープログラムが準備されると、ユーザーはプログラムを実行できますが、プログラムの内容を変更することはできません。それからsetuid ルートプログラムに権限が追加されます。特定のプログラムを実行するすべてのプロセスにrootアクセス権が付与されます。特定プロセスの進行中のみ

場合によっては、setuid root プログラムの権限が 4111 に設定されているか、---s--x--xroot 以外のユーザーがプログラムを実行でき、他の方法ではその内容を読み取れないように設定されます。

オペレーティングシステムには、setuidプログラムに対するいくつかの保護機能が組み込まれています。たとえば、root ユーザーでない限り、setuid root プログラムを実行するプロセスにデバッガを接続することはできません。一般ユーザーがsetuidプログラムを読み取ることができ、ユーザーがプログラムのコピーを作成しようとすると、コピーは通常そうでない場合でもsetuid権限ビットを失います。コピーを作成したユーザーによって作成されるため、コピーではありません。setuid ルートしかし、setuid [ユーザー名]と、とにかくそのことができない可能性が高いです。

関連情報