命令:
bigxu@bigxu-ThinkPad-T410 ~/work/lean $ sudo ls
content_shell.pak leanote libgcrypt.so.11 libnotify.so.4 __MACOSX resources
icudtl.dat leanote.png libnode.so locales natives_blob.bin snapshot_blob.bin
大部分时间都是对的。但有时它很慢。 所以我说它。
命令:
bigxu@bigxu-ThinkPad-T410 ~/work/lean $ strace sudo ls
execve("/usr/bin/sudo", ["sudo", "ls"], [/* 66 vars */]) = 0
brk(0) = 0x7f2b3c423000
fcntl(0, F_GETFD) = 0
fcntl(1, F_GETFD) = 0
fcntl(2, F_GETFD) = 0
......
......
......
write(2, "sudo: effective uid is not 0, is"..., 140sudo: effective uid is not 0, is /usr/bin/sudo on a file system with the 'nosuid' option set or an NFS file system without root privileges?
) = 140
exit_group(1) = ?
+++ exited with 1 +++
其他信息:
bigxu-ThinkPad-T410 lean # ls /etc/sudoers -alht
-r--r----- 1 root root 745 2月 11 2014 /etc/sudoers
bigxu-ThinkPad-T410 lean # ls /usr/bin/sudo -alht
-rwsr-xr-x 1 root root 152K 12月 14 21:13 /usr/bin/sudo
bigxu-ThinkPad-T410 lean # df `which sudo`
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sdb1 67153528 7502092 56217148 12%
答案 0 :(得分:8)
出于安全原因,setuid位和ptrace(用于在调试器下运行二进制文件)不能同时被尊重。过去未能执行此限制导致CVE-2001-1384。
因此,任何设计用于安全性的操作系统都将停止在setuid二进制文件的exec上表示ptrace,或者在使用ptrace时不遵守setuid位。
在Linux上,请考虑使用Sysdig - 只能查看但不能修改行为,不会运行相同的风险。
答案 1 :(得分:1)
$ sudo strace -u <username> sudo -k <command>
sudo
以root用户身份运行strace
。strace
作为sudo
的{{1}}通过<username>
选项传递。-u
使用sudo
选项从先前的sudo
删除缓存的凭据(用于再次询问密码)并运行-k
。第二个<command>
是Tracee(正在跟踪的进程)。
要自动将当前用户放在sudo
的位置,请使用<username>
。
除了查尔斯的this answer之外,execve()
manual page所说的是:
如果在路径名所引用的程序文件上设置了“设置用户ID”位,则调用过程的有效用户ID将更改为程序文件所有者的有效用户ID。同样,当设置了程序文件的set-group-ID位时,将调用过程的有效组ID设置为程序文件的组。
如果满足以下任一条件,则不会执行上述有效ID的转换(即,忽略设置用户ID和设置组ID位):
- 为调用线程设置了no_new_privs属性(请参阅prctl(2));
- 底层文件系统已被nosuid挂载(mount(2)的MS_NOSUID标志);或
- 正在跟踪调用过程。
如果以上任何一项为真,程序文件的功能(请参阅功能(7))也将被忽略。
在ptrace(2) manual page的 NOTES 部分的 Ptrace访问模式检查小节中描述了跟踪进程,检查或修改其内存的权限。我在this answer中对此发表了评论。