与用户ID有关的一些知识总结

对《unix高级环境编程》书里面提到的关于用户ID的内容进行了一下总结,同时在文章后面画了一个图,便于自己记忆。

1、与每个进程相关联的用户ID和组ID

 

实际用户ID

实际组ID

我们实际上是谁

有效用户ID

有效组ID

附加组ID

用于文件访问权限检查

保存的设置用户ID

保存的设置组ID

由exec函数保存

 

(1)实际用户ID和实际组ID标识我们究竟是谁。这两个字段在登录时取自口令文件中的登录项。

(2)有效用户ID,有效组ID以及附加组ID决定了我们的文件访问权限。

(3)保存的设置用户ID和保存的设置组ID在执行一个程序时包含了有效用户ID和有效组ID的副本。

 

2、   口令文件/etc/passwd的pw_uid和pw_gid字段,这两个值是系统管理员在确定一个用户的登录名的同时确定的,用户不能更改其用户ID,通过每个用户有一个唯一的用户ID。组ID的设立允许同一个组内的成员之间共享资源。

root用户的实际用户ID和实际组ID是0,非系统用户的ID从500开始

 

3、附加组ID:附加组ID是指一个用户属于的另外的组

 

4、文件访问权限:进程每次打开、创建或删除一个文件时,内核就进行文件访问权限测试,而这种测试可能涉及文件的所有者(st_uid和st_gid)、进程的有效ID(有效用户ID和有效组ID)以及进程的附加组ID(若支持的话)。两个所有者ID是文件的性质,而两个有效ID和附加组ID则是进程的性质。内核进行测试的步骤如下:依次查看

进程的有效用户ID是0(超级用户)->进程的有效用户ID等于文件的所有者ID(进程拥有此文件)->进程的有效组ID或进程的附加组ID之一等于文件的组ID->其他用户适当的访问权限位被设置

新文件的用户ID设置为进程的有效用户ID。组ID分两种:

(1)      新文件的组ID可以是进程的有效组ID

(2)      新文件的组ID可以是它所在的目录的组ID

 

5、获取口令文件信息的函数:

struct passwd *getpwuid(uid)和函数structpasswd *getpwnam(const char*name)分别通过uid和用户登录名获取口令文件的信息。其中,在键入登录名时,getpwnam函数由login程序使用。

 

6、 更改用户ID和组ID

当执行一个程序文件时,进程的有效用户ID通常就是实际用户ID,有效组ID通常是实际组ID。但是可以在文件模式字(st_mode)中设置一个特殊标志,其含义是“当执行此文件时,将进程的的有效用户ID设置为文件所有者的用户ID(st_uid)”。(passwd命令)可以调用函数setuid(uid)进行修改用户ID

 

注意:如果一个进程正以特殊的权限(设置用户ID或设置组ID)运行,它又想生出另一个进程执行另一个程序,则它应该直接使用fork和exec,而且在fork之后,exec之前要改回到普通权限。设置用户ID或者设置组ID程序决不应调用system函数。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值