与进程相关的几个ID,set-user-ID和set-group-ID

程序文件是一个二进制文件。在Unix中,二进制文件和文本文件都叫普通文件。不同文件的不同解释,这就靠应用程序来解释了。

与jin进程相关的ID有以下三种:实际用户ID(real user ID), 有效用户ID(effective user ID)和 保存的设置用户ID(saved set-user-ID)。


正常情况下,一个程序文件,被用户之行起来,那么这个进程的有效用户ID就是实际用户ID,两者相等。实际用户ID就是执行这个进行的用户的用户ID。

现在,假若,这个程序文件的stat结构体中的st_mode成员的set-user-ID,被设置为有效,那么,程序被运行起来了以后,有效用户ID(effective user ID)就不等于实际用户ID了,它等于进程要打开的文件的拥有者的用户ID了。

进程操作文件时,看有没有权限操作这个文件,比较的是进程的有效用户ID和要操作的文件的拥有者ID两者之间的关系。

举个例子:

passwd 命令,需要读写/etc/passwd ,  -rw-r--r--. 1 root root 2133 10月 23 2014 /etc/passwd, 但是/etc/passwd的拥有者是root,只有root用户才可以读写。

-rwsr-xr-x. 1 root root 30768 2月  22 2012 /usr/bin/passwd 命令拥有者是root,其他用户拥有执行的权利。

如果passwd被普通用户执行,那么怎么会更改/etc/passwd里面的内容呢 ?问题来了。。。。

是这样的,passwd命令程序文件是被置了set-user-ID标志的,那么程序文件被运行起来变成进程后,进程的实际用户ID就是执行该程序的用户的ID,***高潮来了***进程的有效用户ID是/etc/passwd 的实际拥有者用户ID了,就是root的ID了,这样,该进程对这个文件就临时有了root权限了。


你可能感兴趣的:(操作系统)