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


1

这与这个问题有关

我有一个脚本(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也是如此。这是我在发现的某种heureustic魔术行为吗?

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

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

Answers:


4

Linux 在类似程序下运行进程时会忽略setuidstrace

  • Linux-Kernel邮件列表,Re:2.4.16 + strace 4.4 + setuid程序

    来自:Manfred Spraul
    日期:2001年12月6日星期四 - 美国东部时间12:25:53

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

    不,即使那是不可能的。如果一个进程被ptraced,现在总是忽略setuid,即使root是ptracing - 这是最新的ptrace root exploit(2.4.1x)的修复。

这可能是在谈论:


好的,总结如此:setuid有这么多的安全漏洞,我不应该期望它能够工作,并且永远使用它是一个非常糟糕的主意?
詹姆斯

@Autopulated:不。我的帖子只描述了2003年的一个漏洞,而不是“很多”。并且不小心使用 setuid,而不是功能本身,导致安全漏洞。精心编写的程序工作正常。但是,最好避免使用setuid,特别是在“Gmail密码”情况下(我建议使用不同的解决方案)。
grawity 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.