关于linux的access和open函数奇怪的问题
我有这样一段代码:
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
int main(void)
{
printf("uid:%dn",getuid());
printf("euid:%dn",geteuid());
if(access("xx",R_OK) == 0)
{
printf("%dn",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。谢谢大家:)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
就是说:access调用失败了,返回的-1,但我通过调试强行改成了返回0,然后改变程序的执行流程,让open函数去打开那个文件,但是打开失败。如果不用access检查,就可以成功打开。为啥呢?
没看明白你的描述....