strace 和 polkit

strace 和 polkit

我有一个程序拒绝以root身份运行,他希望“真正的用户”运行它,但他希望在执行过程中进行权限升级以修改一些受保护的路径

只要strace我不调用参数就可以了-f,但是当我需要它时,polkit 窗口不会出现,程序会抱怨没有权限,然后就结束了


我真的不知道什么是 setUID 但命令是$ strace -f script.bash

答案1

斯特雷斯使用跟踪跟踪进程的系统调用。

出于安全原因,特权程序(例如 pkexec)使用设置用户标识机制,如果跟踪它的进程不是 root (或者,在 Linux 上,没有SYS_PTRACESYS_ADMIN 能力.)

当您运行时strace script.bash,strace 将成功跟踪运行该脚本的 shell(它没有任何额外的权限),并且不会跟踪该 shell 脚本运行的任何程序。因此,当脚本运行时pkexec,pkexec 以所有权限运行。

strace -f script.bash会跟踪运行脚本的 shell以及脚本运行的每个程序。当脚本运行时pkexec,pkexec将没有setuid权限,并且它会抱怨并退出。

跟踪 pkexec 及其运行的所有内容的一种方法是以 root 身份运行 strace。

但您不想运行sudo strace -f script.bash,因为这将以 root 身份运行脚本(和 pkexec)。

相反,在以普通用户身份启动脚本后,将 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

相关内容