特殊文件权限位set_uid
众所周知的,Linux文件系统的权限组分为三组,属主,同组,其他人,实际上属主也有两种定义之分:有效用户和实际用户。实际用户是指文件的实际属主,而有效用户是指执行这个文件的账号,比方说,一个可执行程序属主是admin,但是用root身份来跑这个程序时,这时候文件的有效用户是root,实际用户是admin。内核检查一个进程是否有权限访问某个文件时,是用进程的有效用户来进行判断的。
特殊权限位set_uid是指,当有此权限的可执行程序,运行时会把属主id赋值为有效id,也就是说有此权限的可执行程序,用admin用户也可以以root身份运行root程序,例如su命令的原理。授权命令为chmod u/t/o + s xxx,此权限位仅对可执行程序有用。当然,并不是随随便便就可以给文件授这个权(要不系统多危险。。),只有以下两种情况能成功:
1、如果进程具有root权限(即文件实际用户为root),则将实际用户id,有效用户id设置为uid;
2、如果进程不具有root权限,但uid等于实际用户id,则将有效用户id设置为uid,不改变实际用户id。
应用实例:iotop命令赋set_uid权限位,这样所有账号都可以使用。
具体例子参考文章:深入理解SetUID