Unix 设置用户ID和文件访问权限

简介: Unix 设置用户ID和文件访问权限

设置用户ID


为了说明问题,我们首先创建一个可执行程序,名字为setuid,其文件信息如下:


-rwxrwxr-x 1 lhl lhl 7265  4月  6 21:20 setuid*


通过finger命令可以知道系统当前的登录信息:


Login     Name       Tty      Idle  Login Time   Office     Office Phone
lhl       lhl       *:0             Apr  6 20:53 (:0)
lhl       lhl        pts/2           Apr  6 21:02 (:0)


下面介绍一下Unix系统中与进程相关的各个ID的详细信息。Unix系统中与一个进程相关的ID有6或更多,如下表所示:


网络异常,图片无法展示
|


注:


  1. 实际用户ID和实际组ID一般在登录时取自口令文件中的登录项(保存于/etc/passwd文件中)。通常,在一个登录会话期间这些值并不改变,但是超级用户进程可以改变它们(8.10节参加exec系函数)。


  1. 有效用户ID、有效组ID以及附加组ID决定了我们的文件访问权限。


  1. 保存的设置用户ID和保存的设置组ID在执行一个程序时包含了有效用户ID和有效阻ID的副本(8.11节说明setuid函数时,将说明它们的作用)


  1. 4.通常,一个进程执行期间,其有效用户ID即为实际用户ID,有效组ID即为实际组ID。例如,系统当前的登录用户为lhl,即实际用户ID为1000,(用户lhl所对应的UID),实际用户组ID为1000(用户组lhl所对应的GID)。当执行setuid可执行程序时,该进程的有效用户ID和有效组ID即为1000。但是,进程在运行时如果需要具有文件所有者才能有的权限时,其有效用户ID就必须为文件所有者ID。要达到这一效果,可以通过修改文件的访问权限为set-user-ID位(设置用户ID位),这样在执行此程序时,进程的有效用户ID即为文件的所有者ID。同样,也可以设置set-group-ID(设置用户组ID位),可以是进程的有效组ID为文件的所有者ID。举个使用set-user-ID的例子,修改过Linux系统用户登录密码的人都知道passwd命令,该命令需要修改/etc/passwd和/etc/shadow文件,但是这两文件的所有者都是toot用户,如何使普通用户也可以通过passwd命令修改上述两个文件,可以通过设置passwd的set-user-ID位,这样普通用户就在passwd运行期间就可以拥有root用户已到达修改登录密码的功能。但是,由于set-user-ID赋予了进程额外的权限,所以在系统中使用时需谨慎。


文件访问权限


说完了,设置用户ID和设置用户组ID,接下来该说一下文件的访问权限问题。Unix系统的所有类型的文件都具有相应的文件访问权限。每个文件拥有9个权限位,从左到右三个为一组,共分为三组,其分别代表所有者权限,所有者组权限以及其他用户权限。9个权限位分为三类权限分别为读(r)、写(w)、执行(x)。 对于文件的权限的使用应注意以下几个规则:


  1. 当需用文件的名字打开一个文件时,对于改名字中包含的每一级目录都应该具有可执行权限。所以对于目录,其执行权限通常被称为搜索位。例如,但需要打开/usr/include/stdio.h文件时,需要对/ /usr /user/include具有执行权限,最后需要对要打开的文件具有适当的权限。


对于目录文件其读权限和执行权限的意义不同。读权限允许度目录,获取该目录中所有文件名的列表,注意不能访问目录中文件的详细信息。当一个目录是我们要访问文件的路径中一部分时,对该目录的执行权限使我们可通过该目录访问到该文件。 如果PATH环境变量制定了一个我们不具有执行权限的目录,那么shell决不会在该目录下找到可执行文件。


2. 为了在一个目录中创建(或者删除)一个文件,必须对该目录具有写权限和执行权限。

进程每次打开、创建、删除一个文件时,内核就进行文件的访问权限的测试,这个过程涉及文件的所有者(st_uid和st_gid)、进程的有效ID(有效用户ID和有效组ID)以及附加组ID(若支持的话)。其中,两个所有者ID为文件的性质,而两个有效ID和附加组ID为进程的性质。内核进行的测试为:


  1. 若进程的有效用户ID为0(即超级用户),则允许其一切访问。所以超级用户对于整个文件系统具有至高无上的权限。


  1. 若进程的有效用户ID为该文件的所有者ID,那么:若所有者适当的访问权限位被设置,则允许访问,否则拒绝访问。适当的访问权限为,若进程为读而打开文件,则所有者读位为1,写和执行权限位类似。


  1. 若进程的有效组ID或进程的附加组ID之一等于文件的组ID,那么:若组适当访问权限位被设置,则允许访问,否则拒绝访问。


  1. 若其他用户适当的访问权限位被设置,则允许访问,否则拒绝访问。


注意按照顺序执行以上四步,如果进程符合第2步,则其不会验证3、4步;如果进程符合第3步,则其不会验证第4步。


相关文章
|
8月前
|
Unix 程序员 Linux
【OSTEP】动态内存开辟 | 内存API常见错误 | UNIX: brk/sbrk 系统调用 | mmap创建匿名映射区域 | mmap创建以文件为基础的映射区域
【OSTEP】动态内存开辟 | 内存API常见错误 | UNIX: brk/sbrk 系统调用 | mmap创建匿名映射区域 | mmap创建以文件为基础的映射区域
199 0
|
2月前
|
Unix Linux Shell
在Unix/Linux系统中,文件和目录的权限管理
在Unix/Linux系统中,文件和目录的权限管理
46 3
|
安全 Unix Shell
Unix进程相关用户ID、用户组ID详解
我们在使用类UNIX系统时,经常会涉及到各种ID,比如,文件属性相关的用户ID、组ID,进程运行时相关的6个ID:实际ID、实际组ID、有效ID、有效组ID、保存的用户设置ID、保存的设置组ID。
409 0
|
移动开发 Unix Linux
一文搞清UNIX/Linux与Windows文件换行符格式差异
一文搞清UNIX/Linux与Windows文件换行符格式差异
343 0
一文搞清UNIX/Linux与Windows文件换行符格式差异
|
网络协议 Unix Linux
【Unix/Linux 系统管理】iptables 防火墙设置
【Unix/Linux 系统管理】iptables 防火墙设置
243 0
|
Unix 机器人 Linux
Unix权限这点事
Unix/Linux的权限管理还是比较复杂的,别人说看高级环境编程得看2,3遍。我想这应该是在Linux有了一定基础上。我看的过程中觉得需要反复推敲,有些地方得翻来覆去看上5,6遍甚至更多,下面是自己的一些对Unix权限的理解,尽量翻译成了大白话。
955 0
UNIX文件I/O
第一次用markdown语法写博客,写出来的还比较整齐,感觉博客园对序号的支持不是很好,调了一会才有了比较满意的效果,还有有哪位知道使用markdown如何插入frame? 这边博客主要说了APUE中文件I/O的主要知识点,并且尝试写了一些代码,都列在了博客中。
979 0
|
安全 Unix Linux
UNIX/LINUX 平台可执行文件格式分析
本文讨论了 UNIX/LINUX 平台下三种主要的可执行文件格式:a.out(assembler and link editor output 汇编器和链接编辑器的输出)、COFF(Common Object File Format 通用对象文件格式)、ELF(Executable and Linking Format 可执行和链接格式)。
934 0