免费注册 查看新帖 |

Chinaunix

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

系统如何验证文件的读写权  关闭 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-08-22 20:21 |只看该作者 |倒序浏览
有一进程需要读取一文件,系统到底用什么东西来验证此进程是否具有该文件的读写权,怎么验证的啊 高手指点哈

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2004-08-22 22:37 |只看该作者

系统如何验证文件的读写权

man test, 看看 -r, -w, -x 等用法?

论坛徽章:
0
3 [报告]
发表于 2004-08-23 00:06 |只看该作者

系统如何验证文件的读写权

-r filename
如果 filename 可读,则为真
例:
if [ -r /var/log/syslog ]
then
  echo "r"
fi

论坛徽章:
0
4 [报告]
发表于 2004-08-23 00:10 |只看该作者

系统如何验证文件的读写权

系统是不是根据进程的有效用户id与要访问的文件属主是否一致从而来判断
该进程对该文件的访问权限,如果是的话,那么到底是谁来进行验证的?

论坛徽章:
0
5 [报告]
发表于 2004-08-23 00:18 |只看该作者

系统如何验证文件的读写权

是根据这个来判断的吧!
  1. -rw-r--r--    1 uid      gid           size  date  time file
复制代码

论坛徽章:
0
6 [报告]
发表于 2004-08-23 00:23 |只看该作者

系统如何验证文件的读写权

楼上说的没错,是根据这个来判断的
但是谁是裁判阿 不可能是进程自己吧

论坛徽章:
0
7 [报告]
发表于 2004-08-23 00:26 |只看该作者

系统如何验证文件的读写权

shell

论坛徽章:
0
8 [报告]
发表于 2004-08-23 00:33 |只看该作者

系统如何验证文件的读写权

谢谢北京女孩?的回答,不过这个问题我还是没有搞明白,明天再继续请教哈
3QYou!

论坛徽章:
0
9 [报告]
发表于 2004-08-23 07:37 |只看该作者

系统如何验证文件的读写权

我觉得不太可能是shell判断的
就拿more这个命令来说吧
more file1
shell最多只能去检查当前用户是否具有more这个二进制文件的执行权,不可能检查用户是否对file1具有读的权限,原因在于shell根本不知道more这个命令是干什么用的,也就是不能知道其后的参数是一个文件名

论坛徽章:
0
10 [报告]
发表于 2004-08-23 12:10 |只看该作者

系统如何验证文件的读写权

原帖由 "mhmdanger" 发表:
系统是不是根据进程的有效用户id与要访问的文件属主是否一致从而来判断
该进程对该文件的访问权限,如果是的话,那么到底是谁来进行验证的?

[code
为什么不能是进程本身呢?我们简化的看一下这个问题,假定我们只看读权限问题
而且,不考虑对于全路径的前缀各级目录的执行权,事实上,这个可以通过封装一
个函数来实现。unix下,cat,more,pg,less,sort等,都需要读取文件(这里是
广义的文件,unix下打开设备,或者其他特殊文件都是和普通文件一样)第一个动作
就是open,在此,我们可以在open这个动作里面判定权限是否可以实现

#include    <sys/stat.h>
#include    <unistd.h>

/*  是否具有读权限  */
/*  0  - 没有权限
    1  - 有权限
    -1 - 出错   */

int
hv_rd_prmsn(...)
{
    uid_t   euid = geteuid();
    uid_t   egid = getegid();

    struct  stat buf;

    /*  读取inode的内容 */
    if (stat(filename, buf) < 0)
        return  printf("cannot stat %$1s : %$2s\n", filename, strerror(errno)),
- 1;

    /*  是否具有读权限  */
    if (! (euid == buf.st_uid
            && S_IRUSR(buf.st_mode))
        && ! (egid == buf.st_gid
            && S_IRGRP(buf.st_mode))
        && ! S_IROTH(buf.st_mode))
        return  printf("permission denied open %$1s : %$2s\n", filename, strerro
r(errno)), 0;

    /*  读权限满足,继续后续处理    */
    ...

    return  1;
}

在open这个函数里,就可以调用hv_rd_prmsn(const char *)这个函数来判定
[/code]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP