您的位置:首页 > 其它

用户ID,组ID 文件访问权限,文件与进程属性浅析

2009-11-01 11:09 225 查看
APUE中用户ID,组ID 文件访问权限,文件与进程属性浅析


首先列出一图表

与每个进程相关的用户ID与组ID

实际用户ID

我们实际上是谁

实际组ID

有效用户ID

用于文件访问权限检查

有效组ID

附加组ID

保存的设置用户ID

由exec函数保存

保存的设置组ID

上面这个图表书中本来就有,呆会儿在做详悉介绍

一.首先必须了解文件的访问权限,在书中是第四章的内容

同文件访问权限相关的有umask,satat,chmod

通常在shell命令中我们可以通过umask设置文件访问权限掩码,创建一个文件,如果随后需要修改文件的访问权限的话,可以接着使用chmod命令修改文件访问权限

1.什么是文件访问权限?

通俗的讲,文件访问权限规定了不同的使用者对该文件的使用程度,通常对文件的访问可以是读,写,执行(对于可执行文件),而对于该文件来讲,有三类使用者:文件的创建者,文件创建者的组成员,其他,这样的话,在shell中使用: ls -l filename 可以查看一个文件的访问权限是这样的.

例如:Ls -l woods.doc

-rw------- 1 chenlin chenlin 0 10月 29 20:22 woods.doc

表示该文件只对文件的创建者具有读写能力

2.怎样修改文件权限?

通过命令chmod可以修改文件权限

例如:chmod g+r woods.doc

查看修改结果:

[chenlin@linux Desktop]$ ls -l woods.doc

-rw-r----- 1 chenlin chenlin 0 10月 29 20:22 woods.doc

二.进一步了解文件相关ID和进程相关ID

文件ID包括:用户ID和组ID

1.什么是用户ID?

用户ID就是创建该文件的用户ID

2.什么是组ID?

组ID就是创建该文件的用户ID所在的组

现在可以结合刚开始的那张图表来分析了

进程ID包括:实际用户ID,实际组ID,有效用户ID,有效组ID,附加组ID,保存的设置用户ID,保存的设置组ID

实际用户ID和实际组ID:我们实际上是谁,也就是我们登录系统是的用户名对应的ID和组ID

有效用户ID有效组ID:用户文件访问权限检查.下面接合上面的woods.doc文件说说:

1.如果有效用户ID等于文件的创建者ID,则进程对该文件具有读写权

2.如果有效用户ID不等于文件的创建者ID,但有效组ID等于该文件的创建者组ID,则进程对该文件具有读权,如果有效组ID不等于该文件的创建者组ID,则进程对该文件没有读,写和执行权限

附加组ID:现在的操作系统中,往往一个用户不仅仅在一个组中,可以允许存在还几个组中,所以现在的操作系统中提供了附加的组ID,供文件访问检查

保存的设置用户ID和保存的设置组ID:用于exec函数保存(后介绍)

三.更改用户ID和组ID

首先现看看一张图表

ID

exec

setuid(uid)

设置用户ID
位关闭

设置用户ID
位打开

超级用户

非特权用户

实际用户ID

不变

不变

设为uid

不变

有效用户ID

不变

程序文件的用户ID

设为uid

设为uid

保存的设置用户ID

从有效用户ID复制

从有效用户ID复制

设为uid

不变

1.为什么需要改变用户ID和组ID?

改变当前用户ID的主要原因是需要得到或限制该进程对一些文件的访问控制(读,写,执行)

一般而言,在设计应用程序时,我们总是试图使用最小特权(least privilege)模型。函数setuid设置实际用户ID和有效用户ID;函数setgid设置实际组ID和有效组ID。

#include <unistd.h>

int setuid(uid_t uid);

int setgid(gid_t gid);

关于改变用户ID的规则:

如果进程具有超级用户特权,则setuid函数将实际用户ID、有效用户ID、以及保存的设置用户ID设置为uid。

如果进程没有超级用户特权,但是uid等于实际用户ID或保存的设置用户ID,则setuid只将有效用户ID设置为uid。不改变实际用户ID和保存的设置用户ID。

如果上面两个条件都不满足,则将errno设置为EPERM,并返回-1。

关于内核所维护的三个用户ID,还要注意以下几点:

1.只有超级用户进程可以更改实际用户ID。实际用户ID实是用户登录时,由login程序设置的,而且永远不会改变它。因为login是一个超级用户进程,当它调用setuid时,会设置所有三个用户ID。

2.仅仅当对程序文件设置了设置用户ID位时,exec函数才会设置有效用户ID。任何时候都可以调用setuid,将有效用户ID设置为实际用户ID或保存的设置用户ID。

3.保存的设置用户ID是由exec复制有效ID而得到的。如果设置了程序文件的设置用户ID位,则在exec根据文件的用户ID设置了进程的有效用户ID以后,就将这个副本保存起来。

最后还得说一下设置用户ID位

它同样是文件访问权限中的一个属性,如果设置了该属性,运行此程序时,可以把该程序文件的有效用户或组ID设置为预先设置好的保存的设置ID,这样就可以得到一些程序的访问权限,而不必更改当前用户ID,但是由于会受有心怀不轨的人诱骗的原因,设置该位时需要仔细考虑.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐