我有一个拒绝以root用户身份运行的程序,他希望“真正的用户”运行它,但他希望在执行过程中权限升级以修改一些受保护的路径。
使用strace,只要我不调用-f参数,就可以了,但是当我需要它时,polkit窗口就不会出现,程序会抱怨没有特权,只是结束了
我不知道什么是setUID,但是命令是$ strace -f script.bash
发布于 2020-12-02 17:42:29
Strace使用帕斯莱系统调用来跟踪进程。
出于安全原因,使用塞图德机制的特权程序(如pkexec )不能使用那些特权,如果进程跟踪它不是根(或者在Linux上没有SYS_PTRACE或SYS_ADMIN 能力)。
当您运行strace script.bash时,strace将成功地跟踪运行脚本的shell (它没有任何额外的特权),并且不会跟踪shell脚本运行的任何程序。因此,当脚本运行pkexec时,pkexec以所有特权运行。
但是strace -f script.bash将跟踪运行脚本的shell和脚本运行的每个程序。当脚本运行pkexec时,pkexec将不具有setuid特权,它会发出抱怨并退出。
跟踪pkexec及其运行的一切的一种方法是将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" "$@"
fihttps://unix.stackexchange.com/questions/621804
复制相似问题