luanx 发表于 2012-09-03 17:17

关于access和open函数奇怪的问题

我有这样一段代码:

#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 world75009月3 16:57 check
-rw-------1 hello lhello   69月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。谢谢大家:)



lovelycheep 发表于 2012-09-04 11:17

太深奥了,学习中...

luanx 发表于 2012-09-04 15:27

解决了。。。suid的程序不能用gdb。。。除非是root
页: [1]
查看完整版本: 关于access和open函数奇怪的问题