文件和目录之设置用户ID和设置组ID
与一个进程相关联的ID有6个或更多,它们如表4-4所示:
表4-4 与每个进程相关联的用户ID和组ID
实际用户ID 我们实际上是谁 实际组ID |
有效用户ID 用于文件访问权限检查 有效组ID 附加组ID |
保存的设置用户ID 由exec函数保存 保存的设置组ID |
- 实际用户ID和实际组ID标识我们究竟是谁(执行这个程序的用户和组)。这两个字段在登录时取自口令文件中的登录项。通常,在一个登录会话间这些值并不改变,但是超级用户进程有方法改变它们。
- 有效用户ID,有效组ID以及附加组ID决定了我们的文件访问权限。
- 保存设置用户ID和保存设置组ID在执行一个程序时包含了有效用户ID和有效组ID的副本。
在POSIX.1 2001版中,需要这些保存的ID。在早期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_uid)”。与此相类似,在文件模式字中可以设置另一位,它使得将执行此文件的进程的有效组ID设置为文件的组所有者ID(st_gid)。在文件模式字中的这两位被称为设置用户ID(set-user-ID)位和设置组ID(set-group-ID)位。
例如,若文件所有者是超级用户,而且设置了该文件的设置用户ID位,然后当该程序由一个进程执行时,则该进程具有超级用户特权。不管执行此文件的进程的实际用户ID是什么,都进行这种处理。例如,UNIX程序passwd(1)允许任一用户改变其口令,该程序是一个设置用户ID程序。因为该程序应能将用户的新口令写入口令文件(一般是/etc/passwd或/etc/shadow)中,而只有超级用户才具有对该文件的写权限,所有需要使用设置用户ID特征。因为运行设置用户ID程序的进程通常得到额外的权限,所以编写这种程序时要特别谨慎。
设置用户ID及设置组ID位都包含在st_mode值中。这两位可用常量S_ISUID和S_ISGID测试。
本篇博文内容摘自《UNIX环境高级编程》(第二版),仅作个人学习记录所用。关于本书可参考:http://www.apuebook.com/。
最新文章
- Redis系列-好玩的用法
- win7挂载NFS
- [c++] Iterators
- MTNET 自用ios网络库开源
- 最长公共子序列模板(LCS)和LICS模板
- C++统计一段文字中各单词出现的频率
- jvm之xms、xmx等参数分析
- 解决android sdk manage打开闪退的解决方法
- Universal-Image-Loader(UIL)使用方法&;流程图&;源码分析 ----- 未完
- 你应该了解的 7个Linux ls 命令技巧
- js学习笔记第一课(js基础知识)
- NSTimer定时器
- 掌握NIO,程序人生
- centos 6.3安装ssh
- 随机四则运算的出题程序java
- <;图文教程>;VMware 14上Ubuntu 16.04 desktop版的安装
- 学习Spring Boot:(二十七)Spring Boot 2.0 中使用 Actuator
- 【tomcat】sessionId学习(未完待续)
- 2018.10.04 NOIP模拟 排队(组合数学)
- 【转】Bri&#39;s改装笔记