【问题标题】:Where are the ACL permissions being checked when a file is about to be opened in EXT2?将要在 EXT2 中打开文件时检查的 ACL 权限在哪里?
【发布时间】:2012-05-06 17:51:16
【问题描述】:

EXT2 file.c 中,打开文件操作(.open) 被指向dquot_file_open,它又指向generic_file_open,它存在于fs/open.c 中。

generic_file_open 看起来只有以下代码

int generic_file_open(struct inode * inode, struct file * filp)
{
    if (!(filp->f_flags & O_LARGEFILE) && i_size_read(inode) > MAX_NON_LFS)
        return -EOVERFLOW;
    return 0;
}

即将打开文件时检查的 ACL 权限在哪里?

我什么时候用谷歌搜索并使用 LXR 浏览了代码,我找到了以下路径。

do_sys_open -> do_filp_open -> path_openat -> do_last -> may_open -> inode_permission -> do_inode_permission -> generic_permission -> acl_permission_check -> check_acl -> posix_acl_permission

但我不明白 EXT2 的 .open 是如何链接到 do_sys_open 的。

如果有任何帮助让我知道在文件打开期间检查 acl 权限的路径,我们将不胜感激。

【问题讨论】:

    标签: linux filesystems acl ext2


    【解决方案1】:

    你看错了:do_sys_open 之类的名称是系统调用入口点,最终将通过 VFS 层找到 ext2 open 例程验证之后权限。

    【讨论】:

    • 非常感谢@geeosaur .. 我的印象是,一旦调用 open 系统调用,就会调用 ext2 open 例程。你的帖子很有帮助..我知道最初会调用do_sys_open,然后在从do_sys_open调用一系列例程后调用ext2open
    【解决方案2】:

    我认为您被 ACL 代码迷惑了;一旦获得许可,请关注nameidata_to_filp__dentry_open

    __dentry_open()内:

        f->f_op = fops_get(inode->i_fop);
        /* ... */
        if (!open && f->f_op)
                open = f->f_op->open;
        if (open) {
                error = open(inode, f);
                if (error)
                        goto cleanup_all;
        }
    

    这会将inode->i_fop->open 函数指针保存到自动变量open,然后继续在inodef 上调用它。

    【讨论】:

    • 感谢@sarnold 的回复.. 是的,我有点偏离轨道,因为我的目标是找到权限检查的完成位置.. 对我来说,注意@987654329 函数也很重要权限检查完成后,@从do_last 调用。 ext2 open 是从 __dentry_open() 调用的。非常感谢您提供的信息。
    猜你喜欢
    • 2020-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-24
    • 1970-01-01
    • 2019-01-16
    • 2011-01-02
    • 1970-01-01
    相关资源
    最近更新 更多