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

发布于 2021-11-17 17:56:00 字数 1368 浏览 834 评论 2

我有这样一段代码:

#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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

筱果果 2021-11-20 04:58:16

就是说:access调用失败了,返回的-1,但我通过调试强行改成了返回0,然后改变程序的执行流程,让open函数去打开那个文件,但是打开失败。如果不用access检查,就可以成功打开。为啥呢?

野心澎湃 2021-11-19 23:49:31

没看明白你的描述....

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文