Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1740593
  • 博文数量: 438
  • 博客积分: 9799
  • 博客等级: 中将
  • 技术积分: 6092
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-25 17:25
文章分类

全部博文(438)

文章存档

2019年(1)

2013年(8)

2012年(429)

分类: 系统运维

2012-03-28 13:13:40

每个进程都有相关的6个或更多的ID,如下表所示:

每个进程相关的用户ID和组ID
真实用户ID(real user ID)
真实组ID(real group ID)
我们真实的身份
有效用户ID(effective user ID)
有效组ID(effective group ID)
补充组ID(supplementary group ID)
用于文件权限核查
保存的 set-user-ID(saved set-user-ID)
保存的 set-group-ID(saved set-group-ID)
由exec函数保存

1、真实用户ID和真实组ID标识了我们真实的身份。这两个域在我们登录时从password文件里的我们的记录里得到。通常,这些值在一个登录会话期里不会改变;

2、有效用户ID、有效组ID和补充组ID决定了我们文件的访问权限,正如我们在下一节会讲述的一样。(我们在1.8节定义过补充组ID。)

3、保存的set-user-ID和保存的set-group-ID在程序执行时,包含了有效用户ID和有效组ID的复制。我们在8.11节讨论 setuid函数时讨论这两个保存的值的函数。这些保存的ID被POSIX.1的2001版所需要。它们在POSIX的早期版本上经常是可选的。一个程序 可以在编译期测试_POSIX_SAVED_IDS常量或者在运行期用_SC_SAVED_IDS参数调用sysconf函数,来看实现是否支持这个特 性。


通常,用效用户ID和真实用户ID相等,而有效组ID和真实组ID相等。


每个文件都有一个属主和一个所属组。属主由stat结构的st_uid成员指定,而所属组由st_gid成员指定。


当我们执行一个程序文件,进程的有效用户ID常常是真实用户ID,而有效组ID常是真实组ID。然而我们可以为文件模式(st_mode)设置一个特殊的 标志,表示“这个文件执行时,把进程的有效用户ID设置为文件的属主”。类似的,文件模式的另一位可以设置以便有效组ID成为文件的所属组 (st_gid)。在文件模式字的这两个位称为set-user-ID位和set-group-ID位。


举个例子,如果文件的属组是超级用户,而如果文件的set-user-ID被设置,则当程序文件当作一个进程运行时,它便有了超级用户的权限,而不管执行 这个文件的进程的真实用户ID。例如,允许任何人改变他或她的密码的UNIX系统程序passwd,就是一个set-user-ID程序。这是必需的,以 便程序可以把新的密码写入密码文件,通常是/etc/passwd或/etc/shadow,而这些文件只应该对超级用户可写。因为一个运行set- user-ID的进程通常得到额外的权限,所以它必须小心地写。我们会在第8章更深入地讨论这种类型的程序。


回到stat函数,set-user-ID位和set-group-ID位包含在文件的st_mode值里。我们可以用常量S_ISUID和S_ISGID来测试这两个位。

阅读(1096) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~