不能欺骗sudo;报告说有效的uid是非零的

时间:2015-12-15 01:32:58

标签: linux sudo

命令:

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% 

2 个答案:

答案 0 :(得分:8)

出于安全原因,setuid位和ptrace(用于在调试器下运行二进制文件)不能同时被尊重。过去未能执行此限制导致CVE-2001-1384。

因此,任何设计用于安全性的操作系统都将停止在setuid二进制文件的exec上表示ptrace,或者在使用ptrace时不遵守setuid位。

在Linux上,请考虑使用Sysdig - 只能查看但不能修改行为,不会运行相同的风险。

答案 1 :(得分:1)

如何跟踪sudo

$ sudo  strace -u <username>  sudo -k <command>
  1. sudo以root用户身份运行strace
  2. strace作为sudo的{​​{1}}通过<username>选项传递。
  3. -u使用sudo选项从先前的sudo删除缓存的凭据(用于再次询问密码)并运行-k

第二个<command>是Tracee(正在跟踪的进程)。

要自动将当前用户放在sudo的位置,请使用<username>

为什么sudo不能与strace一起使用

除了查尔斯的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中对此发表了评论。