文件类型、文件用户ID组ID、文件访问许可
来源:互联网 发布:金税三期软件操作手册 编辑:程序博客网 时间:2024/05/11 06:00
1.文件类型
1.文件类型分类
a.普通文件:最常见的文件类型,该类文件中包含一个类型的数据。对于UNIX内核来说数据是文本还是二进制文件并没有区别。
所有的普通文件内容的解释都留给应用程序去操作这个文件。
一个最大的例外是二进制可执行文件。为了执行一个程序,内核必须知道它的类型。所有的二进制可执行文件遵从一个形式允许
内核识别去哪里装在程序的文本和数据。
b.目录:包含其它文件名和指向这些文件信息的指针的文件。任何有读目录权限的进程能够入去目录的内容,但是只有内核能够直
接写目录文件。进程必须使用函数来更改目录内容。
c.块特殊文件:提供缓冲I/O类型的文件访问设备固定大小的单元,比如磁盘驱动。
d.字符设备特殊文件:能够访问变化的大小的设备的并且提供非缓冲的I/O的类型文件。
注:所有的设备不是块设备就是字符设备
e.FIFO:进程间通信使用的文件类型。有时候又叫pipe。
f.socket:进程间网络通信使用的文件类型。进程间的非网络通信如果仅有一个主机也可以使用socket。
g.符号链接:指向另一个文件的文件类型。
2.文件类型操作
stat结构体中的st_mode成员指明了文件类型。我们能够根据宏操作来判断文件类型。
宏操作的参数是stat结构体里面的st_mode成员。
POSIX.1允许应用将IPC看作文件,比如消息队列,信号量。而且同样是宏操作但是参数是指向stat结构体的指针。
另外在UNIX系统中,普通文件类型占了大多数。下面的图片显示了各种文件类型所占比例。
2.设置用户ID和用户组ID
每个程序有六个或者更多的ID和它相关。
a.real user ID和real group ID证明我们是谁。这两项是从我们登陆时的密码文件里面获取的。通常,这些值不会改变在登陆
过程中,虽然超级用户的进程有方式改变它们。
b.effective user ID,effective group ID,和supplementary group ID决定我们的访问权限。
c.save set-user-ID和saved set-group-ID是在程序执行时由effective user ID和effective group ID拷贝的。
通常,effective user ID等于real user ID,并且effective group ID等于real group ID。
每个文件都有自己的所有者(an owner)和组所有者(a group owner)。所有者定义在stat结构体里面的st_uid成员中,
组所有者定义在st_gid成员中。
当我们执行一个程序文件时,程序effective user ID通常是real user ID,effective group ID是real group ID。但是我们也能够设置
一个特殊标志在文件模式(st_mode)中。当改标志被设置了之后,当文件被执行时,effective user ID时文件所有者(st_uid)。同样的
我们也可以设置另一个位是的effective group ID等于文件组所有者(st_gid)。这两位叫做set-user-ID 位和set-group-ID位。这两位能
够被单独检测通过常量S_ISUID和S_ISGID,从而判断标志是否被置位。
3.文件访问权限
stat结构体中的st_mode参数也包含了文件的访问权限。
每个文件都有九种访问权限,分为三类。如图
前三行user项是指文件所有者。chmod命令通常改变的就是这九个权限位,允许我们定义u为用户(user),g为组(group),o为 其它(other)。
文件访问权限测试内核执行打开,创建或者删除文件时依赖于文件所有者(st_uid,st_gid),有效用户ID(effective user ID,
effective group ID),和其它组ID。两个所有者ID时文件属性,两个有效ID是进程述属性。
1.如果有效用户ID是0(超级用户),访问被允许。整个文件系统都可以被访问。
2.如果有效用户ID等于文件所有者ID,如果有效位被设置了,访问是被允许的。不然是不允许的。比如程序打开文件读取数据,
那么user-read bit必须设置。
3.如果有效组ID或者额外组ID等于文件组ID,如果有效位被设置了,访问是被允许的。
4.如果其它访问权限被设置了,访问是被允许的。
上面四个步骤按顺序尝试。
4.新文件和目录的所有者
新文件的userID被设置为进程的有效用户ID。POSIX.1允许应用选择group ID通过两种方式:
1.文件group ID被设置为进程的有效用户组ID
2.文件group ID和文件被创建时所在目录的组ID相同
5.access和faccessat函数
1.函数原型
#include<unistd.h>
int access(const char* pathname, int mode);
int faccessat(int fd, const char* pathname, int mode, int flag);
返回值:成功返回0,失败返回-1。
2.参数介绍
mode能够是F_OK来检测文件是否存在,或者与 下面图片中的位与运算来判断。
faccessat函数当pathname是绝对路径或者fd参数设置了AT_FDCWD的时候并且路径是相对路径的时候,能够喝access一样操作。
不然,faccessat计算pathname相对于fd指向的打开目录计算。
flag参数能够控制faccessat函数的动作。如果AT_EACCESS标志被设置了,权限检查用的是进程有效用户和有效组ID来进行判断
而不是之前的真实用户和组ID。
0 0
- 文件类型、文件用户ID组ID、文件访问许可
- 用户ID与文件访问权限
- 用户ID,组ID 文件访问权限,文件与进程属性浅析
- Linux进程的用户id,有效用户id与文件对应的所有者id,组id
- 进程与文件访问权限 几个关联的用户ID
- 关于Linux文件访问权限与设置用户id位
- 实际用户ID,有效用户ID,保存-设置-用户ID,文件的所有者ID
- 用户ID组ID
- 实际用户ID和有效用户ID、设置用户ID,新文件、目录的所有权
- 关于unix下实际用户ID、有效用户ID、设置用户ID、文件所有者ID的一点理解
- 关于unix下实际用户ID、有效用户ID、设置用户ID、文件所有者ID的一点理解
- 关于unix下实际用户ID、有效用户ID、设置用户ID、文件所有者ID的一点理解
- 文件的设置用户ID位
- 通过用户id输出头像文件流
- access and faccessat 按照实际用户Id和实际组ID进行文件权限测试
- Linux文件权限之设置用户ID和设置组ID(即SUID和SGID)
- 修改文件的组id
- 讨论unix进程的设置用户ID,有效用户ID,保存设置ID,文件的设置位
- cookie的生命周期
- Java专业书籍
- Android面试题目总结
- web框架
- nyoj 106背包问题
- 文件类型、文件用户ID组ID、文件访问许可
- codeforces 366D Dima and Trap Graph 题解(搜索+剪枝or二分+枚举)
- 排序问题(正解
- 将Centos的yum源更换为国内的阿里云源
- 【VS开发】IP地址格式转换(htonl、ntohl;inet_addr、inet_ntoa)
- 虚拟机重启不加载/etc/sysconf/network-script/ifcfg-*
- [LeetCode]393. UTF-8 Validation
- UNIX Domain Socket IPC (sockaddr_un )
- CentOS 6.5 安装 Redis 执行 make #error "Newer version of jemalloc required"