第四章:权限测试
2013-05-30 19:53
183 查看
当用 open() 或 creat() 创建新文件时 , 新文件的 用户ID 设置为 创建文件进程的 有效用户 ID。而组ID , POSIX.1允许选择下列之一作为新文件的组ID:
1、进程的有效组ID
2、新文件所在目录的 组ID
access函数
int access(const char *pathname, int mode); 所在的头文件为 <unistd.h>
access函数以进程有效用户ID 和有效组ID为基础 , 测试 实际用户 对一个文件的访问权限\
access() 检查调用进程是否有权访问指定的文件。如果文件是一个符号链接的话,则跟随符号链接。
mode参数指定了将要进行的检查 ,可以是 F_OK, 或 由 R_OK 、W_OK 、 X_OK 或这三个标志的组合.
F_OK测试文件是否存在。 R_OK, W_OK, 和 X_OK 测试是否文件是否存在 文件是否 可写 可读 可执行 。
当对一个文件操作的时候,检查使用的是 调用进程的实际用户 UID 和 GID 而不是 其有效ID 。
这个特性允许 设置用户ID 程序 很容易的决定 调用进程 的权限
成功返回0 失败则返回 -1
umask函数
mode_t umask(mode_t cmask); 所在头文件<sys/stat.h>
该函数用于创建进程文件模式的屏蔽字,并返回先前的屏蔽字。该函数无出错返回。
当创建一个文件的时候,该文件模式访问位 会被赋给新文件。
参数 cmask 中, 为1 的位 在新文件中 会被屏蔽 , 就是说 cmask 指定的是 新创建的文件需要被屏蔽的模式位
1、进程的有效组ID
2、新文件所在目录的 组ID
access函数
int access(const char *pathname, int mode); 所在的头文件为 <unistd.h>
access函数以进程有效用户ID 和有效组ID为基础 , 测试 实际用户 对一个文件的访问权限\
access() 检查调用进程是否有权访问指定的文件。如果文件是一个符号链接的话,则跟随符号链接。
mode参数指定了将要进行的检查 ,可以是 F_OK, 或 由 R_OK 、W_OK 、 X_OK 或这三个标志的组合.
F_OK测试文件是否存在。 R_OK, W_OK, 和 X_OK 测试是否文件是否存在 文件是否 可写 可读 可执行 。
当对一个文件操作的时候,检查使用的是 调用进程的实际用户 UID 和 GID 而不是 其有效ID 。
这个特性允许 设置用户ID 程序 很容易的决定 调用进程 的权限
成功返回0 失败则返回 -1
#include<stdio.h> #include<unistd.h> /************************************ *F_OK 用于确定文件是否存在 *************************************/ int is_exist(const char* filename); int is_exist(const char* filename) { return access(filename,F_OK); } int main(int argc,char** argv) { int ret; char* p; /*测试文件是否存在*/ p = (ret=is_exist(argv[1]))?"不":""; printf("文件%s%s存在\n",argv[1],p); if(ret == 0){ /*测试文件是否可读*/ p = access(argv[1],R_OK)?"不":""; printf("文件%s可读\n",p); /*测试文件是否可写*/ p = access(argv[1],W_OK)?"不":""; printf("文件%s可写\n",p); /*测试文件是否可执行*/ p = access(argv[1],X_OK)?"不":""; printf("文件%s可执行\n",p); } return 0; }
umask函数
mode_t umask(mode_t cmask); 所在头文件<sys/stat.h>
该函数用于创建进程文件模式的屏蔽字,并返回先前的屏蔽字。该函数无出错返回。
当创建一个文件的时候,该文件模式访问位 会被赋给新文件。
参数 cmask 中, 为1 的位 在新文件中 会被屏蔽 , 就是说 cmask 指定的是 新创建的文件需要被屏蔽的模式位
#include<stdio.h> #include<unistd.h> #include<fcntl.h> #include<sys/stat.h> #define RWRR (S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH) int main(void) { int msk = umask(0); printf("umask = %.3o\n",msk); umask(msk); close(open("file_0",O_CREAT|O_WRONLY)); close(creat("file_1",RWRR)); umask(0777); close(creat("file_2",RWRR)); return 0; } 结果: ---S-w---T 1 wowk wowk 0 5月 30 19:47 file_0 -rw-r--r-- 1 wowk wowk 0 5月 30 19:47 file_1 ---------- 1 wowk wowk 0 5月 30 19:47 file_2 可见 用 open 创建文件且不是用 mode参数 时,文件的模式标志 为随机(不明白为什么,也可能不是随机) 当使用creat()创建的时候 , 先将 mode 与 屏蔽标志位 cmask 的取反值相与 mode &= ~cmask
相关文章推荐
- 创建新环境用户的时候 注意回收 unlimited tablespace权限(测试环境和生产环境的时候 用户的权限注意)
- 第四章 构建测试体系
- [Testing] 关于 权限 测试一些测试点
- 功能测试-权限管理
- sonar + jacoco + mockMvc 模拟session 用户登录 配合SpringSecurity 权限 快速测试代码覆盖率.
- access and faccessat 按照实际用户Id和实际组ID进行文件权限测试
- Spring MVC 集成 Apache Shiro权限控制-测试可行
- django guardian 权限控制测试
- 第四章 自动化测试用例初探
- 关于2007权限问题的测试报告
- 在继承中派生类成员函数的访问权限测试
- Web测试 - 权限管理测试,兼容性测试
- cdh5.7权限测试示例
- lunix:进入root进入非root用户的shell bash环境[用于权限测试]
- 文件服务器迁移测试(NTFS和Share权限)
- 4.7 access函数-文件权限测试
- [Nmap渗透测试指南]第四章(指纹识别与探测)
- CORS跨域、Cookie传递SessionID实现单点登录后的权限认证的移动端兼容性测试报告
- mongodb authentication 设置权限之后,新建个管理账户和一般数据库用户,在win 7 64bit 环境下测试使用实例
- 系统权限相关测试影响因素