ルートとして実行することを拒否するプログラムがあります。彼は「本当のユーザー」がこのプログラムを実行することを望んでいますが、実行中にいくつかの保護されたパスを変更するために特権の昇格を望んでいます。
strace
引数を使用して呼び出さない限り、これはうまく機能します-f
が、必要に応じてpolkitウィンドウが表示されず、プログラムに権限がないと文句を言って終了します。
setUIDが何であるかはわかりませんが、コマンドは次のようになります。$ strace -f script.bash
答え1
ストレス用途道プロセスのシステムコールを追跡します。
セキュリティ上の理由から権限を持つプログラム(pkexecなど)ユーザーIDの設定プロセスを追跡するプロセスがルートでない場合(またはLinuxではルートがSYS_PTRACE
ない場合、またはSYS_ADMIN
能力.)
を実行すると、strace script.bash
straceはスクリプトを実行しているシェルを正常に追跡し(追加の権限はありません)、シェルスクリプトによって実行されるプログラムは追跡しません。したがって、スクリプトが実行されると、pkexec
pkexecはすべての権限で実行されます。
ただし、strace -f script.bash
スクリプトを実行するシェルは追跡されます。そしてスクリプトが実行されるすべてのプログラム。スクリプトが実行されると、pkexec
pkexec には 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