掌握Linux之实际用户ID 有效的用户ID 保存的设置用户ID
Linux通过进程的 实际用户ID/实际组ID,有效用户ID/有效组ID/附加组ID,保存的设置用户ID/保存的设置组ID 来控制进程对资源的访问。 其中,实际用户ID/实际组ID标识进程究竟是谁(即是进程在系统的唯一标识) 有效用户ID/有效组ID/附加组ID决定了进程的访问权限 保存的设置用户ID/保存的设置组ID在执行一个程序时包含了有效用户ID和
·
Linux通过进程的 实际用户ID/实际组ID,有效用户ID/有效组ID/ 附加组ID,保存的设置用户ID/保存的设置组ID
来控制进程对资源的访问。
其中,实际用户ID/实际组ID标识进程究竟是谁( 即是进程在系统的唯一标识)
有效用户ID/有效组ID/附加组ID决定了进程的访问权限
保存的设置用户ID/ 保存的设置组ID在执行一个程序时包含了有效用户ID和有效组I D的副本
通常,有效用户ID等于实际用户ID,有效组ID等于实际组ID
但是可以在文件模式字(st_mode)中设置一个特殊标志( 如S_ISUID,S_ISGID)来实现" 当执行该程序文件时,将进
程的有效用户ID设置为程序文件所有者的用户ID(s_uid) "(组也一样)
在文件模式字s_mode中这两位S_ISUID,S_ ISGID被称为设置用户ID位和设置组ID位
当程序需要增加特权以访问当前不允许访问的资源时, 我们需要更换程序的用户ID或组ID,使新ID具有合适的特权
或者访问权限。
Linux系统提供了setuid/setgid( unistd.h)来设置用户ID.这种设置必须遵循一下规则:
1.若进程具有超级用户权限,则setuid(uid) 将实际用户ID,有效用户ID, 以及保存的设置用户ID设置为uid
2.若进程没有超级用户特权, 但是uid等于实际用户ID或保存的设置用户ID, 则setuid(uid)将有效的用户ID设置为
uid
3.如果以上两个条件都不满足, 则将errno设置为EPERM,并返回-1
关于内核所维护的三个用户ID,还需注意一下几点:
1.只有超级用户进程可以改变实际用户ID。 实际的用户ID通常在登陆时由login程序设置
2.仅当对程序文件设置了设置用户ID位时, exec函数才会设置有效用户ID, 如果设置用户ID位没有设置,则exec函
数不会改变有效用户ID,而将其维持为原先值。 任何时候都可以调用setuid(uid) 将有效用户ID设置为实际用户
ID或者保存的设置用户ID。 但不能将有效的用户ID设置为任意值(前面的规则约束)
来控制进程对资源的访问。
其中,实际用户ID/实际组ID标识进程究竟是谁(
有效用户ID/有效组ID/附加组ID决定了进程的访问权限
保存的设置用户ID/
通常,有效用户ID等于实际用户ID,有效组ID等于实际组ID
但是可以在文件模式字(st_mode)中设置一个特殊标志(
程的有效用户ID设置为程序文件所有者的用户ID(s_uid)
在文件模式字s_mode中这两位S_ISUID,S_
当程序需要增加特权以访问当前不允许访问的资源时,
或者访问权限。
Linux系统提供了setuid/setgid(
1.若进程具有超级用户权限,则setuid(uid)
2.若进程没有超级用户特权,
uid
3.如果以上两个条件都不满足,
关于内核所维护的三个用户ID,还需注意一下几点:
1.只有超级用户进程可以改变实际用户ID。
2.仅当对程序文件设置了设置用户ID位时,
数不会改变有效用户ID,而将其维持为原先值。
ID或者保存的设置用户ID。
3.保存的设置用户ID是由exec复制有效用户ID而得来的
未完待续,分析一个实际例子
更多推荐
已为社区贡献1条内容
所有评论(0)