4.4 设置用户ID和设置组ID

与一个进程相关联的ID有6个活更多,如图4-5所示。

实际用户ID            我们实际上是谁        

实际组  ID

有效用户ID

有效组ID                用于文件访问权限检查

附属组ID                

保存的设置用户ID

保存的设置组            由exec函数保存

  • 实际用户ID和实际组ID标识我们究竟是谁。这两个字段在登录时取自口令文件中的登录项。通常,在一个登录会话期间这些值并不改变,但是超级用户进程有方法改变它们,8.11节将说明这些方法。
  • 有效用户ID、有效组ID以及附属组ID决定了我们的文件访问权限,下一节将对此进行说明。
  • 保存的设置用户ID和保存的设置组ID在执行一个程序时包含了有效用户ID和有效组ID的副本,在8.11节中说明setuid函数时,将说明这两个保存值的作用。

        通常,有效用户ID等于实际用户ID,有效组ID等于实际组ID。

        每个文件有一个所有者和组所有者,所有者由stat结构中的st_uid指定,组所有者则由st_gid指定。

        当执行一个程序时,进程的有效用户ID通常就是实际用户ID,有效组ID通常是实际组ID。但是可以在文件模式字(st_mode)中设置一个特殊标志,其含义是“当执行此文件时,将进程的有效用户ID设置为文件所有者的用户ID(st_uid)”。于此相类似,在文件模式字中可以设置另一位,它将执行此文件的进程的有效组ID设置为文件的组所有者ID(st_gid)。在文件模式字中的这两位被称为设置用户ID(set-user-ID)位和设置组ID(set-group-ID)位。

        例如,若文件所有者是超级用户,而且设置了该文件的设置用户ID位,那么当该程序文件由一个进程执行时,该进程具有超级用户权限。不管执行此文件的进程的实际用户ID是什么,都会是这样。例如,UNIX系统程序passwd允许任一用户改变其口令,该程序是一个设置用户ID程序。因为该程序应能将用户的新口令写入口令文件中(一般是/etc/passwd或/etc/shadow),而只有超级才具有对该文件的写权限,所以需要使用设置用户ID功能。因为运行设置用户ID程序的进程通常都会得到额外的权限,所以编写这种程序时特别谨慎。第8章将更详细地讨论这种类型的程序。

        再回到stat函数,设置用户ID位以及设置组ID位都包含在文件的st_mode值中。这两位可分别用常量S_ISUID和S_ISGID测试。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值