GNU/Linux >> Linux の 問題 >  >> Linux

保存されたユーザー ID に関する質問

<ブロック引用>

プログラムの開始時に有効なユーザー ID を変数に保存すると、保存されたユーザー ID は不要になりますか?

これは、ユーザー空間プログラムが何を覚えているかの問題ではなく、カーネルが使用できる権限は何かという問題です。ユーザー間の分離が機能するためには、プロセスが使用できるユーザー ID を制御するシステムが必要です。そうしないと、どのプロセスも root になることを要求する可能性があります。

<ブロック引用>

C プログラムで保存されたユーザー ID を取得するにはどうすればよいですか?それを行う関数を見つけることができませんでした.

標準関数ではできません (getuid() しかありません と geteuid() )。少なくとも Linux には getresuid() があります ただし、3 つのユーザー ID すべてを返します。

とにかく、通常は読む必要はありません。これは、setuid プログラムの場合に実ユーザー ID と有効ユーザー ID の間の切り替えを可能にするために存在するため、有効ユーザー ID のコピーとして開始されます。

setuid プログラムでは、実際のユーザー ID はそれを実行しているユーザーの ID であり、有効で保存されたユーザー ID はプログラムを所有するユーザーの ID です。有効なユーザー ID は権限チェックに重要な ID であるため、プロセスが一時的に権限を削除したい場合、実際のユーザー ID と保存されたユーザー ID の間で有効なユーザー ID を変更します。

<ブロック引用>

プロセスがそのユーザー ID を変更できるかどうかを確認するために、カーネルは保存されたユーザー ID をどのように使用しますか?これは、プロセスが有効なユーザー ID を変更しようとすると、カーネルが保存されたユーザー ID をチェックして、プロセスが変更を許可されていることを確認するということですか?

はい。 setuid() の Linux man ページ これについて言及していますが、多少隠されています:

ERRORS     
EPERM  The user is not privileged and uid does not match the real
       UID or saved set-user-ID of the calling process.

つまり、(有効な) ユーザー ID を実際の ID または保存された ID のいずれかにのみ設定できます。

setreuid() の man ページ

Unprivileged processes may only set the effective user ID to the real
user ID, the effective user ID, or the saved set-user-ID.

Linux
  1. Linux – Useraddコマンドでのオプション-oの使用?

  2. Debian –「debian- +」ユーザー?

  3. Windowsで管理者ユーザーを無効にする

  1. SELinuxのシステム管理者ガイド:大きな質問に対する42の回答

  2. ユーザーグループルートの機能??

  3. Unix / Linuxのマルウェアに関する理論?

  1. 「mysql.sys@localhost」ユーザーの目的は何ですか

  2. Apache ユーザーの umask の設定

  3. putenv() と setenv() に関する質問