1.与进程关联的用户ID和组ID

与一个进程关联的ID有一下几个:
实际用户ID和实际组ID标识我们究竟是谁。通常在一个会话间值是不会改变的,但是超级用户进程有方法改变
他们,在以后的进程控制中会进行说明。
有效用户ID,有效组ID以及附加组ID决定了我们的文件访问权限。
保存的设置用户ID(setuid)和保存的设置组ID(setgid)在执行一个程序时包含了有效用户ID和有效组ID的
副本。
 
通常,有效用户ID等于实际用户ID,有效组ID等于实际组ID。
每个文件都有一个所有者和组所有者,所有者由stat结构中的st_uid成员表示,组所有者由st_gid成员表示。
当执行一个程序文件时,进程有效用户ID通常就是实际用户ID,有效组ID通常是实际组ID,但是可以设置文件
的设置用户ID(set-user-ID)位和设置组ID(set-group-ID )位,如果设置了设置用户ID位,则进程在执行该
程序时就具有该程序所有者的权限(进程的有效用户ID设置为程序所有者用户ID),如果设置了设置组ID位,
则进程在执行该程序时就具有该程序的组所有组 的权限 (进程的有效组ID设置为程序组所有者ID) 。
设置用户ID位和设置组ID位都包含在st_mode值中。可以使用宏S_ISUID和S_ISGUID测试。

2.文件的访问权限

每个文件都有9个访问权限位,可将它们分成3类,如下图:


它们都包含在<sys/stat.h>文件中。

下面说明一些文件访问权限的一些规则:
1.如果我们要访问一个文件,必须要对该文件绝对路径中包含的所有目录都具有执行权限。
实践如下:
yan@yan-vm:/home$ ll

total 16

drwxr-xr-x  4 root       root        4096 Jun  4 13:03 ./

drwxr-xr-x 23 root       root        4096 Apr 12 20:43 ../

drwx------  3 normaluser normalgroup 4096 Jun 12 11:23 normaluser/

drwx------ 25 yan        yan         4096 Jun 12 11:27 yan/

yan@yan-vm:/home$ cat /home/yan/test

123

yan@yan-vm:/home$ chmod u-x yan/

yan@yan-vm:/home$ cat /home/yan/test

cat: /home/yan/test: Permission denied

yan@yan-vm:/home$

上面的yan目录被去掉x权限后,yan目录的用户yan也无法访问目录里面的文件。

2.为了在一个目录中创建新文件,必须要对目录具有写权限和执行权限。
实践如下:

yan@yan-vm:/home$ ll

total 16

drwxr-xr-x  4 root       root        4096 Jun  4 13:03 ./

drwxr-xr-x 23 root       root        4096 Apr 12 20:43 ../

drwx------  3 normaluser normalgroup 4096 Jun 12 11:23 normaluser/

d--------- 25 yan        yan         4096 Jun 12 11:27 yan/     (目录没有任何权限)

yan@yan-vm:/home$ chmod u+w yan/

yan@yan-vm:/home$ ll

total 16

drwxr-xr-x  4 root       root        4096 Jun  4 13:03 ./

drwxr-xr-x 23 root       root        4096 Apr 12 20:43 ../

drwx------  3 normaluser normalgroup 4096 Jun 12 11:23 normaluser/

d-w------- 25 yan        yan         4096 Jun 12 11:27 yan/   (增加w权限)

yan@yan-vm:/home$ touch yan/a.txt

touch: cannot touch `yan/a.txt': Permission denied     (生成文件失败)

yan@yan-vm:/home$ chmod u+x yan/

yan@yan-vm:/home$ ll

total 16

drwxr-xr-x  4 root       root        4096 Jun  4 13:03 ./

drwxr-xr-x 23 root       root        4096 Apr 12 20:43 ../

drwx------  3 normaluser normalgroup 4096 Jun 12 11:23 normaluser/

d-wx------ 25 yan        yan         4096 Jun 12 11:27 yan/   (增加执行权限权限)

yan@yan-vm:/home$ touch yan/a.txt     (成功生成文件)

yan@yan-vm:/home$


3.为了在一个目录中删除现有的文件,必须对包含该文件的目录具有写权限和执行权限。

4.如果用6个exec函数中的任何一个执行某个文件,都必须对该文件具有执行权限,该文件还必须是一个普通文件。

进程每次打开、创建和删除一个文件时,内核要进行文件访问权限测试:
1.若进程的有效用户ID是0(超级用户),则允许访问。
2.若进程的有效用户ID等于文件的所有者ID(也就是该进程拥有此文件),那么:若所有者的适当访问权限位(读,
写,执行)

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

3.新文件、目录的所有权

新文件、目录的用户ID设置为进程的有效用户ID,关于组ID,POSIX.1允许实现选择下列之一作为新文件的组ID:
1.新文件的组ID可以是进程的有效组ID。(在ubuntu中使用这种实现)
2.新文件的组ID可以是它所在的目录的组ID。

《UNIX环境高级编程》笔记--文件访问权限和新文件、目录所有权的更多相关文章

  1. UNIX环境高级编程笔记之文件I/O

    一.总结 在写之前,先唠几句,<UNIX环境高级编程>,简称APUE,这本书简直是本神书,像我这种小白,基本上每看完一章都是“哇”这种很吃惊的表情.其实大概三年前,那会大三,我就买了这本书 ...

  2. UNIX环境高级编程笔记 目录

    每一章的重点会使用加粗字体 第一章:UNIX基础知识:UNIX体系结构:文件和目录:输入和输出:程序和进程:出错处理:信号:时间值:系统调用和库函数 第三章:文件I/O:文件描述符:文件操作函数:文件 ...

  3. UNIX环境高级编程笔记之高级I/O

    本章说明了很多高级I/O功能: 非阻塞I/O——发一个I/O操作,不使其阻塞,记录锁,STREAMS机制 I/O多路转接——select和poll函数 readv和writev函数,以及存储映射I/O ...

  4. UNIX环境高级编程笔记之标准I/O库

    一.总结 文件I/O一章讲了不带缓冲的I/O,本章讲的是带缓冲的I/O.不带缓冲针对的是内核的系统调用,而带缓冲针对的是用户空间的标准库函数,是基于带缓冲的I/O实现的.不带缓冲的I/O通过文件描述符 ...

  5. UNIX环境高级编程笔记之线程

    本章涉及到线程的一些基本知识点,讨论了现有的创建线程和销毁线程的POSIX.1原语,此外,重点介绍了线程同步问题,讨论了三种基本的同步机制:互斥量.读写锁.条件变量.

  6. UNIX环境高级编程笔记之进程控制

    本章重点介绍了进程控制的几个函数:fork.exec族._exit.wait和waitpid等,主要需要掌握的是父进程和子进程之间的运行机制,怎么处理进程的正常和异常终止.以及怎么让进程执行不同的程序 ...

  7. UNIX环境高级编程笔记之进程环境

    本章讲的都是一些非常基础的知识,目的是为了下一章讲进程控制做铺垫,所以,本章就不做过多的总结了,直接看图吧.

  8. Unix环境高级编程——守护进程记录总结(从基础到实现)

    一.概念及其特征 守护进程是系统中生存期较长的一种进程,常常在系统引导装入时启动,在系统关闭时终止,没有控制终端,在后台运行.守护进程脱离于终端是为了避免进程在执行过程中的信息在任何终端上显示并且进程 ...

  9. [置顶] 文件和目录(二)--unix环境高级编程读书笔记

    在linux中,文件的相关信息都记录在stat这个结构体中,文件长度是记录在stat的st_size成员中.对于普通文件,其长度可以为0,目录的长度一般为1024的倍数,这与linux文件系统中blo ...

随机推荐

  1. google地图marker文字label添加js lib

    google的地图marker需要使用js开发库,文件并允许使用js库 在JSP页面中需要添加地图引用如: <script src="http://maps.googleapis.co ...

  2. vs2010中看不见类视图和资源视图的解决方法

    vs2010工程中,因为删除了“vcxproj.filter”文件,所以导致资源视图看不见了. 解决方法是:先关掉工程,将工程对应的扩展名为.suo和.sdf删除,重新打开解决方案,问题解决.

  3. 深入了解 Flexbox 伸缩盒模型

    Flexbox(伸缩布局盒) 是 CSS3 中一个新的布局模式,为了现代网络中更为复杂的网页需求而设计.本文将介绍 Flexbox 语法的技术细节.浏览器的支持越来越快,所以当 Flexbox 被广泛 ...

  4. 网站服务管理系统wdcp简介及功能特性

    WDCP是WDlinux Control Panel的简称,是一套用PHP开发的Linux服务器管理系统以及虚拟主机管理系统,,旨在易于使用Linux系统做为我们的网站服务器,以及平时对Linux服务 ...

  5. 11.2.0.3.7 PSU补丁升级

    说明:这是新上线主机,还没有建库的.如果库已经存在,那么最后还要进行刷库操作呢! 环境:SUSE Linux Enterprise Server 11 sp1 (x86_64) 要求将数据库从11.2 ...

  6. ISG2015

    一天的成果. Re300 是男人就下一百层 一个64位的程序,放到IDA里的话,IDA就会分析不动,这样就把人给下着了.objdump –d re300 > output,这样拿到汇编代码,大概 ...

  7. 超级强大的SVG SMIL animation动画详解

    本文花费精力惊人,具有先驱前瞻性,转载规则以及申明见文末,当心予以追究.本文地址:http://www.zhangxinxu.com/wordpress/?p=4333 //zxx: 本文的SVG在有 ...

  8. 详解Activity的四种启动模式

    在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作.在Android中Activity的启动模式决定了Activity的启动运行方式. Ac ...

  9. JQuery弹出层,点击按钮后弹出遮罩层,有关闭按钮

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <t ...

  10. 【noip2012提高组】国王游戏

    恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右 手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排 成一排,国王站在队伍的最前面. ...