Set-UID
Set-UID是Unix系统中一个重要的安全机制。当一个Set-UID程序运行的时候,它被假设为具有拥有者的权限。例如,如果程序的拥有者是root,那么任何人运行这个程序时都会获得程序拥有者的权限。
从上面可以看出,将passwd拷贝后,权限发生变化,在原来目录下suid位被设置,复件没有了修改密码的权限。
对于su sudo命令也同样不再具有root权限。
可以看出/bin/bash有某种内在的保护机制可以阻止Set-UID机制的滥用。
system(const char * cmd)
系统调用函数被内嵌到一个程序中执行一个命令,system()调用/bin/sh来执行shell程序,然后shell程序去执行cmd命令。但是在一个Set-UID程序中system()函数调用shell是非常危险的,这是因为shell程序的行为可以被环境变量影响,比如PATH;而这些环境变量可以在用户的控制当中。通过控制这些变量,可以控制Set-UID程序的行为。