奇怪的 strace 和 setuid 行为:在 strace 下权限被拒绝,但无法正常运行

奇怪的 strace 和 setuid 行为:在 strace 下权限被拒绝,但无法正常运行

这与这个问题

我有一个脚本(fix-permissions.sh),可以修复一些文件权限:

#! /bin/bash 
sudo chown -R person:group /path/
sudo chmod -R g+rw /path/

还有一个小型 C 程序来运行它,它是setuid

#include "sys/types.h"
#include "unistd.h"
int main(){
    setuid(geteuid());
    return system("/path/fix-permissions.sh");
}

目录:

-rwsr-xr-x  1 root  root  7228 Feb 19 17:33 fix-permissions
-rwx--x--x  1 root  root   112 Feb 19 13:38 fix-permissions.sh

如果我这样做,一切似乎都很好,并且权限也得到了正确修复:

       james $ sudo su someone-else
someone-else $ ./fix-permissions

但如果我使用 strace,我会得到:

someone-else $ strace ./fix-permissions
/bin/bash: /path/fix-permissions.sh: Permission denied

有趣的是,我得到了同样的权限被拒绝错误完全相同的设置(权限,c 程序),但即使不使用 strace,脚本也不同。这是我发现的 setuid 中的某种启发式魔法行为吗?

我该怎么知道发生了什么事?

系统是 Ubuntu 10.04.2 LTS,Linux 2.6.32.26-kvm-i386-20101122 #1 SMP

答案1

Linux 忽略设置用户标识strace在或类似程序下运行进程时位。

  • Linux 内核邮件列表,回复:2.4.16 + strace 4.4 + setuid 程序

    发件人:Manfred Spraul
    日期:2001 年 12 月 6 日星期四 - 12:25:53 EST

    如果您想要 strace setuid 事物并让 setuid 位得到尊重,您必须以 root 身份运行 strace 并使用 -u 选项。

    不,那也不再可能了。如果一个进程被 ptrace,setuid 现在总是被忽略,即使 root 正在 ptrace - 这是最新的 ptrace root 漏洞(2.4.1x)的修复。

可能是在说:

相关内容