9

sudoフロントエンド(gksudoなど)を使用して、現在のプロセスの特権を昇格させることは可能ですか?私は次のことができることを知っています:

sudo cat /etc/passwd-

しかし、私はこれを行うことに興味があります:

sudo-become-root # magic function/command
cat /etc/passwd-

私はPythonで書いています。私のユースケースは、ユーザーとして実行されるプログラムがありますが、rootが所有する読み取り/書き込み用のファイルに遭遇する可能性があることです。パスワードの入力を求め、root権限を取得し、必要なことを実行してから、オプションで権限を再度削除したいと思います。

管理ロジックと非管理ロジックを別々のプロセスに分離し、管理プロセスをrootとして実行するだけでよいことはわかっています(ある程度の通信があれば、policykit / dbusがここに適しています)。しかし、私はもっと単純な(確かにもっと危険な)解決策を望んでいました。

Solarisのpprivをsudoで実行してから、現在のプロセスの特権を変更するようなものを考えています。これは、ハッキーですが実行可能な往復のようです。しかし、私が知る限り、Linuxはpprivを提供していません。

(これがまだ明らかではないことに驚いています。これは珍しいことではないようであり、新しいプロセスのエスカレーションよりも進行中のエスカレーションを可能にするセキュリティホールではないようです。)

4

8 に答える 8

3

Aptitudeには「ルートになる」オプションがあります。著者がそこで何をしたかを見たいと思うかもしれません。

于 2009-12-28T17:01:26.290 に答える
1

プログラム内の管理者権限をきちんと処理したい場合は、プログラムを実行する予定のOSによっては、sudoではなくPolicyKitを使用することをお勧めします。

PolicyKit for Pythonについては、python-slipを参照してください。

それ以外の場合、sudoを呼び出してrootになる方法は2つあります。

sudo -s

あなたを根付かせ、あなたの現在の環境を維持します(と同等sudo su

sudo -i

ルートになり、ルートの環境も提供します(と同等sudo su -

この問題に対処するもう1つの方法は、必要な権限があることを考慮し、プログラムのユーザーがプログラムに権限を付与する方法を選択できるようにすることです(sudo / setuid / unixgroupsなどを使用)。

同じテーマのServerFaultに関するこの質問も参照してください。

于 2009-12-28T17:00:12.700 に答える
1

残念ながら、私はあなたがやりたいことをきれいに行う方法を知りません。私はあなたの最善の策は、プログラムをsetuidにして(またはsudoで実行して)、ダーティな作業を行ってパーミッションを削除するか、fork()して1つのプロセスからパーミッションを削除し、他のプロセスを維持してルート作業を行うことだと思います。

探しているのはsetuid(2)/ setreuid(2)/ setregid(2)/ setgroups(2)呼び出しですが、これらはすべて、呼び出しの途中で特権を取得できないように配線されています。私の知る限り、これらを使用して特権を「与える」ことしかできません。

于 2009-12-28T18:45:27.250 に答える
0

あなたの魔法の機能/コマンド

sudo su
于 2009-12-28T16:51:55.273 に答える
0
echo 'echo tee; echo hee'|sudo -s

出力は次のとおりです。

tee
hee
于 2009-12-28T16:55:21.117 に答える
0

特権の低いプロセスからrootとして任意のコマンドを実行できるという考えは好きではありません。ただし、必要なため、頭に浮かぶアイデアの1つは、許可したいコマンドのみを実行できるsetuid 制限付きシェルを保持することです。次に、subprocess.Popen関数を使用して、昇格された特権でコマンドを実行するこの制限付きシェルを使用してコマンドを実行できます。

于 2009-12-28T17:03:16.537 に答える
0

これがうまくいくかどうか疑問に思います:

システムに別のグループを追加し、スクリプトをルートプログラムとしてインストールし、sudoersファイルにこのグループでスクリプトを実行できるようにする行を含めます。最後に、スクリプトを実行する必要があるアカウントのリストにグループを追加します。

その場合、スクリプトは、最初にアカウントパスワードを指定した後、rootまたはグループ内に特別なグループが設定されているアカウントでのみ実行できます。

その他のオプションについては、 Sudoマニュアルを参照してください。

于 2009-12-28T17:52:39.010 に答える
0

PAMで認証したい。ここに例があります。

于 2009-12-28T21:27:08.743 に答える