文章目录
- 1.用户和组ID
- 2.文件权限:读,写,执行
- 3.目录权限:读,写,执行
- 4.文件权限检查
- 5.新文件和新目录的所有权
- 6.access函数
- 7.chmod、 fchmod函数
- 8.更改文件所有者
- 9.link函数
- 10.unlink和remove函数
- 11.更改文件和目录
- 12.文件的时间
- 13.utime函数
- 14.mkdir函数
- 15.rmdir函数
1.用户和组ID
- Linux系统通过进程的有效用户ID和有效用户组ID来决定进程对系统资源的访问权限
- 与一个进程相关联的用户ID和用户组ID有如下几种
- 通常情况下, 有效用户ID等于实际用户ID, 有效组ID等于实际组ID;
- 可执行文件的权限中有一个特殊标志, 定义为“当执行此文件时,将进程的有效用户ID设置为文件的所有者” , 与此类似, 组ID也有类似的情况。 这两个标志位称为: “设置用户ID” 和 “ 设 置 组 ID” , 这 两 位 都 包 含 在 stat 信 息 中 的 st_mode 中 , 可 用S_ISUID,S_ISGID测试。
S_ISUID:有效用户id等于文件所有者的uiD,而不是实际用户ID
S_ISGID:有效用户组id等于文件所有者的gid,而不是用户组gid
2.文件权限:读,写,执行
- 对于一个文件的读权限决定了我们是否能够打开该文件进行读操作
- 对一个文件的写权限决定了我们是否能够打开该文件进行写操作
- 为了在open函数中对一个文件指定O_TRUNC标志(会将文件内容的长度清0,要与O_READ结合使用), 必须对该文件具有写权限
- 执行某个可执行文件, 都必须对该文件具有执行权限
3.目录权限:读,写,执行
- 目录文件的执行权限也表示可以进入该目录
- 通过文件名打开一个任意类型的文件时, 对该文件路径名中包含的每一个目录都应具有执行权限
- 为了在一个目录中创建一个新文件, 必须对该目录具有写权限和执行权限
- 为了删除一个文件, 必须对包含该文件的目录具有写权限和执行权限,对该文件本身则不需要有读、 写权限
4.文件权限检查
- 进程访问文件时, 内核就进行文件权限检查。 这种检查涉及到文件的所有者、 文件的所有者所在组、 进程有效用户、 进程的有效组及进程的附加组。
两个所有者是文件的性质,而有效用户与有效组是进程的性质 - 当进程对某个文件进行操作时, 内核按顺序执行下列4步来检查文件权限
1、 若进程的有效用户为root(ID等于0) , 则允许任何操作;
2、 若进程的有效用户等于文件的所有者(ID相同) (即该进程拥有文件) ,按照文件所有者具有的权限判定操作是否合法
3、 若进程的有效组或进程的附加组之一等于文件所有者所在组,按照文件所有者所在组具有的权限判定操作是否合法
4、 按照其他用户具有权限判定操作是否合法 - 一般情况下
➢ 若进程有效用户拥有此文件, 则按用户权限批准或拒绝该进程对文件的操作;
➢ 若进程有效用户并不拥有该文件, 但进程有效用户属于某个适当的组, 则按组权限批准或拒绝该进程对文件的操作
➢ 若进程有效用户并不拥有该文件, 也不属于某个适当的组, 则按照其他其他用户权限批准或拒绝该进程对文件的操作
5.新文件和新目录的所有权
- 新文件的所有者设置为进程的有效用户
- 新文件所有者所在的组, POSIX允许选择下列之一:
➢ 新文件所有者所在的组可以是进程的有效组
➢ 新文件所有者所在的组可以是它所在目录的组 - 新文件所有者所在的组取决于它所在目录的设置组ID位是否设置, 若设置, 则为目录组, 否则则为进程有效组
- BSD总是用目录组作为新文件所有者所在组
6.access函数
- mode可以取
7.chmod、 fchmod函数
- 文件存取许可权mode
- Chmode函数出错信息
- fchmode函数出错信息
8.更改文件所有者
9.link函数
10.unlink和remove函数
11.更改文件和目录
- 空目录指的是:只有.和…这两项
12.文件的时间
- 每个文件有三个时间字段
- 对文件进行一次读操作, 它的访问时间就会改变
- 修改时间是文件内容最后一次被修改的时间
- 状态时间是该文件索引节点最后一次被修改的时间, 影响索引节点的操作:
➢ 更改文件访问权限
➢ 更改文件用户ID
➢ 更改文件链接数
13.utime函数
14.mkdir函数
15.rmdir函数