我试图用来strace
观察某个进程在哪里搜索文件。此过程搜索的位置将根据用户及其独特的环境变量而有所不同。但是,strace
需要 root 权限才能运行,当我运行时:
sudo strace mycommand
mycommand
似乎在 root 用户的上下文中执行,并且搜索到的位置不适用于当前用户。
以下使 mycommand 在用户(名为“user”)上下文中执行的尝试未成功:
sudo strace su user -c "mycommand"
sudo strace su -u user mycommand
如何使用strace
以特定的非 root 用户身份执行的命令?
答案1
无需修改 strace/ptrace 权限。
sudo strace -u someuser -E HOME=/home/someuser [any extra args] [traced command]
通过https://man7.org/linux/man-pages/man1/strace.1.html,
-u username
--user=username
Run command with the user ID, group ID, and supplementary
groups of username. This option is only useful when
running as root and enables the correct execution of
setuid and/or setgid binaries. Unless this option is used
setuid and setgid programs are executed without effective
privileges.
-E var=val
--env=var=val
Run command with var=val in its list of environment
variables.
更改HOME
环境变量并不是绝对必要的,但我试图跟踪的进程在尝试使用 的root
HOME 时被拒绝。
答案2
您只需要设置一个非 root 用户,然后设置 strace 和命令,如下所示:
sudo -u <no-root user> strace <command>
前任:
sudo -u noroot strace ls
-u – 以用户身份运行命令