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. angular 入门教程1

    使用angularjs也有一年之久了.从初识angularjs时的激动和兴奋到现在淡定的使用,这其中也是有不少的心酸(刚用的时候和各种js插件的配合使用快把我弄疯了). 细想起来.用MVVM的这种js ...

  2. android的edittext输入长度

    http://blog.csdn.net/uyu2yiyi/article/details/6329738 http://flysnow.iteye.com/blog/828415/ http://s ...

  3. QTDesigner的QVBoxLayout自动随窗口拉伸

    在MainWindow的构造函数中添加如下代码://设置Uiui.setupUi(this); //使Ui可自适应父窗口大小QVBoxLayout* mainLayout = new QVBoxLay ...

  4. flex——将Sprite控件添加到FLEX UI中

    在Flex的帮助文档里,有很多例子都是扩展Sprite类的.如果想把这些实例添加到你的s:Application中,如:addChild(DisplayObject ),肯定会出错.错误的大致意思是: ...

  5. 改变DM6467的内存划分

    上次改过bbxm的http://blog.csdn.net/godofdsp/article/details/9377515,这次搞6467又遇到同样的问题了.按照bbxm的方法修改了内存划分,运行时 ...

  6. 24点游戏&&速算24点(dfs)

    24点游戏 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit Sta ...

  7. phonegap开发app中踩过的那些坑

    把遇到的问题列出来,假设有解决方式的,偶也会写下来.假设大家有更好解决方法的.欢迎留言噢 phonegap 2.9无法触发deviceready事件 亲们能够看下控制台有木有报错.假设有提示cordo ...

  8. Codeforces 551C GukiZ hates Boxes 二分答案

    题目链接 题意:  一共同拥有n个空地(是一个数轴,从x=1 到 x=n),每一个空地上有a[i]块石头  有m个学生  目标是删除全部石头  一開始全部学生都站在 x=0的地方  每秒钟每一个学生都 ...

  9. 聚类算法初探(五)DBSCAN

    最近由于工作需要,对聚类算法做了一些相关的调研.现将搜集到的资料和自己对算法的一些理解整理如下,供大家参考. 另外在算法代码方面,我也做了一些实现(包括串行和并行),欢迎感兴趣的朋友探讨和交流. 第一 ...

  10. 3.数据库操作相关术语,Oracle认证,insert into,批量插入,update tablename set,delete和truncate的差别,sql文件导入

     1相关术语 语句 含义 操作 DML语句 (Data Manipulation Language) 数据库操作语言 insert update delete select DDL语言 (Date ...