- 论坛徽章:
- 0
|
我有这样一段代码:
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
int main(void)
{
printf("uid:%d\n",getuid());
printf("euid:%d\n",geteuid());
if(access("xx",R_OK) == 0)
{
printf("%d\n",open("xx",O_RDONLY));
else
printf("don't access!\n");
return 0;
}
这段程序打开目录下的xx文件,xx文件和这段代码编译后(check)的权限如下:
-rwsr-x--- 1 hello world 7500 9月 3 16:57 check
-rw------- 1 hello lhello 6 9月 3 14:22 xx
我当前的用户是world,针对check这个文件,我有可执行权限,我如果执行它,首先程序用了access检查当前用户对这个文件的权限,access检查的是uid,uid是world这个用户的uid,所以,这里应该就执行不到后面的open函数了,而是直接显示”don't access"。但是我用gdb调试check,在判断access返回值那里断点了下,把eax里的返回值从-1改成了0,然后让程序继续执行,就可以直接执行到open函数了,但执行到open函数后,返回的确是-1,不是open函数是看的euid的权限么,这是的euid应该是hello这个用户的uid值,hello对xx是可以读取的,但是为啥用了access函数后,就无法打开这个文件了呢?不用access做检查就不会返回-1。谢谢大家:)
|
|