wintree的专栏

专注于Linux系统编程,网络编程,高性能服务器技术,c/c++技术学习

unix环境高级编程-系统是如何设置文件权限的

4.4 设置用户ID和设置组ID

与一个进程相关联的ID有6个或更多,如下表所示: 

 

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

实际用户ID

实际组ID

我们实际上是谁,这两个字段在登录时取自口令文件中的登录项,通常在登录会话期间这些值不会改变,但root进程可改变他们。

有效用户ID

有效组ID

附加组ID

规定其文件访问权限,用户文件访问权限检查。

保存的设置用户ID

保存的设置组ID

 

  • 实际用户ID ,实际组ID标示我们是谁。这两个字段在登录时候曲子口令文件的登录项。通常 在登录话间这些值并不改变。但是超级用户进程有方法改变他。
  • 有效用户ID,有效组ID,,附加组ID决定我们的文件访问权限。
  • 保存设置用户ID ,保存的设置组ID在执行一个程序时候包含了有效用户ID,he和有效组ID的副本。

通常有效用户ID,等于实际用户ID。有效组ID等于实际组ID.

每个文件都有一个所有者和组所有者。所有者由stat结构忠的st_uid成员表示。组所有者则有st_gid表示。

但是 可以在文件模式字的中设置一个特殊标志。其含义是“当执行此文件时候,将进程的有效用户ID设置为文件所有者的用户ID.”

再返回到stat函数,设置用户ID位级设置组ID位都包含在st_mode忠。这两位可用常量S_ISUID和S_ISGID测试。

 

4.5文件访问权限。

 

在使用linux的时候,我们对chmod的命令可能已经很熟悉,其中有u(user)表示所有者。g(group)表示组,用o(other)表示其他。

比如我们执行chmod u+x xxx文件,表示对xxx文件加上可执行的权限。

 

每个文件有9个访问权限位,St_mode值也包含了针对文件的访问权限位,所有文件类型都有访问权限。每个文件有9个访问权限位,如下表所示:

 

       文件的9个访问权限位

St_mode屏蔽

意义

S_IRUSR

S_IWUSR

S_IXUSR

用户-读

用户-写

用户-执行

S_IRUSR

S_IWUSR

S_IXGRP

组-读

组-写

组-执行

S_IROTH

S_IWOTH

S_IXOTH

其他-读

其他-写

其他-执行

 

第一个规则:我们用名字打开任一个类型的文件时候,对改名字包含的每个目录,包括他可能隐含的当前工作目录都已,都应该具有执行权限。这就是为什么对于目录执行权限位常被称为搜索位的原因。

举个例子:为了打开/usr/include/stdio.h文件,我们就要对目录/ ,/user   /usr/include具有打开执行权限。然后需要具有对该文件本身适当的权限。这取决于何种模式打开他。

  • 对于一个文件的读权限决定了我们能否打开该文件进行读操作。这与open函数的O_RDONLY ,O_RDWR标志有关系。
  • 对于一个文件的写权限决定了我们是否能够打开该文件进行写操作。这与open函数的O_WRONLY,O_RDWR标志有关系。
  • 为了在open函数中对一个文件制定O_TRUNC标志,必须对该文件进行具有写权限。
  • 为了在该目录下创建一个新文件,必须对这个目录具有写权限和执行权限。
  • 为了删除一个文件,必须对包含该文件的目录具有写权限和执行权限,对该文件本身不需要读写权限。
  • 如果用6个exec函数中的任何一个执行某个文件,都必须对该文件具有执行全新啊。该文件必须是一个普通文件。

进程每次打开,创建和删除一个文件的时候,内核就进行文访问权限测试,而这种测试可能涉及到文件按的所有者。进程的有效id,以及进程的附加组ID,两个所有者ID,是文件的性质,二两个有效ID和附加组id,则是进程的性质。。

内核进行测试是:

(1)若进程的有效用户ID,是0(超级用户),则如许访问。这就给予了超级用户对整个文件系统进行处理掉最充分的自由。

(2)若进程的有效用户ID,等于文件的所有者id,也就是该进程拥有此文件。那么:若所有着适当的访问权限被设置。则允许访问。否则被拒绝。适当的访问权限位指的是,若进程为读而打开该文件。则用户读位应为1,若进程为写而打开该文件,则用户写位应该为1.做进程将执行该文件,则用户的执行位应为1.

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

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

按着四部执行。

4.6 新文件和目录的所有权

新文件的用户id设置为进程的有效用户ID,,

(1)新文件的组ID,可以是进程的有效组ID。

(2)新文件的组ID,可以使他所在目录的组id。

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wallwind/article/details/6888830
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭