免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1600 | 回复: 2
打印 上一主题 下一主题

[Linux] 关于access和open函数奇怪的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-09-03 17:17 |只看该作者 |倒序浏览
我有这样一段代码:

#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。谢谢大家:)



论坛徽章:
0
2 [报告]
发表于 2012-09-04 11:17 |只看该作者
太深奥了,学习中...

论坛徽章:
0
3 [报告]
发表于 2012-09-04 15:27 |只看该作者
解决了。。。suid的程序不能用gdb。。。除非是root
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP