ステイスとポルキット

ステイスとポルキット

ルートとして実行することを拒否するプログラムがあります。彼は「本当のユーザー」がこのプログラムを実行することを望んでいますが、実行中にいくつかの保護されたパスを変更するために特権の昇格を望んでいます。

strace引数を使用して呼び出さない限り、これはうまく機能します-fが、必要に応じてpolkitウィンドウが表示されず、プログラムに権限がないと文句を言って終了します。


setUIDが何であるかはわかりませんが、コマンドは次のようになります。$ strace -f script.bash

答え1

ストレス用途プロセスのシステムコールを追跡します。

セキュリティ上の理由から権限を持つプログラム(pkexecなど)ユーザーIDの設定プロセスを追跡するプロセスがルートでない場合(またはLinuxではルートがSYS_PTRACEない場合、またはSYS_ADMIN 能力.)

を実行すると、strace script.bashstraceはスクリプトを実行しているシェルを正常に追跡し(追加の権限はありません)、シェルスクリプトによって実行されるプログラムは追跡しません。したがって、スクリプトが実行されると、pkexecpkexecはすべての権限で実行されます。

ただし、strace -f script.bashスクリプトを実行するシェルは追跡されます。そしてスクリプトが実行されるすべてのプログラム。スクリプトが実行されると、pkexecpkexec には setuid 権限がなく、文句を言って終了します。

pkexecとpkexecが実行しているすべてを追跡する1つの方法は、straceをrootとして実行することです。

sudo strace -f script.bashただし、スクリプト(およびpkexec)がrootとして実行されるため、実行したくありません。

代わりに、一般ユーザーとして起動してスクリプトにstraceを追加してください。次のようにスクリプトを修正してください。

#!/bin/bash
echo please run sudo strace -f -p $$ while this script is doing its read
read -n 1 -r -s reply
if [[ $reply == [Yy] ]]; then
    pkexec "$NAME_INST" "$@"
fi

関連情報