より高い権限を取得するには、ユーザー名とパスワードで認証してください。

より高い権限を取得するには、ユーザー名とパスワードで認証してください。

プロセスの権限を向上させる方法はありますか?たとえば、次のようになります。プログラムAがユーザモード権限だけでCにコンパイルされたとする。今、このプログラムがroot権限を取得しようとしていますが、rootユーザー名とパスワードが必要だとします。したがって、マクロまたはライブラリを呼び出して、ユーザー名とパスワードを要求します。ユーザー名またはパスワードが正しくない場合はエラーが返されますが、ユーザー名とパスワードが正しい場合は、プロセスにroot権限が付与されます。

答え1

これは不可能です。これはCに機能がないため、Unixセキュリティモデルがこれを禁止するためです。

Unixセキュリティモデルでは、プログラムは権限を減らすことができ、権限を増やすことはできません。プロセスは一時的に効果的な特権を与えられ、後で元の「本当の」特権を取り戻しますが、開始された場所よりももはや進むことはできません。

ユーザーがログインするプロセスは、root権限で開始する必要があります。つまり、ユーザーにはすべての操作を実行する権限があります。ユーザーが名前とパスワードを入力し、ログインプログラムがこれを確認すると、プロセスは希望するユーザーに永久に変更されます。次の2つの方法でroot権限を取得できます。

  • ルートとして実行される他のプロセスによって開始できます。これがコンソールログインとSSHログインがどのように機能するかです。
  • することができます設定値ルートに属する実行可能ファイルです。これがsuうまくいく方法ですsudo

ここでは状況を少し単純化していますが、プログラムが権限を増やすことができないという基本原則は常に真実です。プロセスが権限を取得する方法は1つだけです。実装するsetuid1 実行可能ファイル。

プログラムがより高い権限でいくつかのタスクを実行する必要がある場合、それ自体はそのタスクを実行できません。これを行うには、より高い権限を持つプロセスでなければなりません。必要な権限ですでに実行されているサーバーに接続するか、setuid実行可能ファイルを実行してこれを実行できます。 setuid実行可能ファイルは、特別な権限なしで実行可能ファイルを実行するsuか、または同様のものですが、特権の昇格がある場合はチェーンにsetuid実行可能ファイルが必要です。sudo

またはsetgid、setpcap ...

関連情報