阅读记录——setuid特权程序

内容来自:Linux安全—Setuid特权程序(一) 和 setuid和seteuid,进行简单记录

setuid

Set user ID upon execution,即给程序的权限表上打上一个能以该程序的拥有者的权限运行的标签;
对于一个拥有setuid属性的程序,在运行时就以该程序的拥有者的权限执行。

类比

皇帝(root)比较忙,所以不可能全国各地到处巡视。于是,他派出了钦差大臣。钦差大臣本身没有掌控生杀大权,但得到了御赐的上方宝剑(setuid权限),于是他便有了皇帝的权利。

场景

passwd可以通过读写/etc/shallow文件更改用户密码,而该文件是需具有root权限才能进行读写的,但普通用户也可以用passwd程序改写自己的密码——其中的秘密就是passwd是一个具有setuid属性的程序

deeper

每个进程都有有效ID和真实ID

有效用户ID(effective UID)
进程的访问控制基于有效用户ID进行的,简单理解就是系统如何判断进程是否具有对某个文件的访问权限,是通过有效用户ID进行判定的

真实用户ID(real UID)
进程真正的拥有者,即创建该进程的用户

1、对于setuid的程序运行的进程,其有效用户ID是该程序文件的的拥有者,而真实用户ID是使用该进程的用户。
2、而非setuid的程序运行的进程,有效用户ID和真实用户ID都是使用该程序的用户。
3、在用户登录系统的时候,登录进程的有效用户ID,真实用户ID和暂存用户ID都设置成登录用户的ID。当进程调用exec函数家族执行一个程序时,与该进程相关联的用户和组ID就可能会改变。如果执行的程序是一个setuid程序,有效用户ID和暂存用户ID会被设置成为该程序的拥有者。如果该文件被标识为set-group-id标识,那么该文件的有效和暂存用户ID会被设置成为执行该程序的用户组ID。如果以上两种都不是的话,则暂存用户ID,有效用户ID都不会改变。

more

linux下有4种uid,
(1)真实uid(real user id), 表示进程的实际执行者, 只有root才能更改
(2)有效uid(effective user id),用于检测进程在执行时所获得的访问文件的权限(
(3)保存的uid(saved user id),用于保存effective uid, 以便当effective uid设置成其他id时可以再设置回来
(4)文件系统的uid.

1、setuid(uid)首先请求内核将本进程的[真实uid],[有效uid]和[被保存的uid]都设置成函数指定的uid, 若权限不够则请求只将effective uid设置成uid, 再不行则调用失败.具体而言
(1)当用户具有超级用户权限的时候,setuid 函数设置的id对三者都起效.[规则一]
(2)否则,仅当该id为real user ID 或者saved user ID时,该id对effective user ID起效.[规则二]
(3)否则,setuid函数调用失败.

2、seteuid(uid)仅请求内核将本进程的[有效uid]设置成函数指定的uid.

你可能感兴趣的:(阅读记录——setuid特权程序)