【问题标题】:Linux File Attribute CheckLinux 文件属性检查
【发布时间】:2012-03-24 19:41:04
【问题描述】:

我想知道 Linux 内核在哪个阶段检查文件的属性。我的意思的一个例子是,如果我尝试编辑具有不可变属性的文件,则会创建。内核在什么时候返回错误,指示文件无法更改。如果我想更改属性的工作方式,完成此过程的最佳方式是什么。我在想一个内核模块,它将读/写/附加函数重定向到我自己的一系列函数。

谢谢

编辑:

我真正感兴趣的是通过内核模块添加新的文件属性。

【问题讨论】:

  • 我相信它是在open() 进行相应的系统调用的地方。如果您没有足够的权限,调用将失败。
  • @Kerrek SB,是的,我正计划编写一个内核模块,将 open() 函数重定向到我允许我自己检查属性/权限。

标签: c linux file-io filesystems


【解决方案1】:

它检查 open() 的权限;带有不可变标志,例如,即使还请求读取,也无法打开文件进行写入。例如:

$ python
>>> f = file('/tmp/11', 'r+')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IOError: [Errno 13] Permission denied: '/tmp/11'
>>> f = file('/tmp/11', 'r')
>>> print f
<open file '/tmp/11', mode 'r' at 0x7f87b9ba1660>

要根据打开操作检查文件属性,请参阅 fs/namei.c 中的 inode_permission()。

【讨论】:

  • 嗯,我真正感兴趣的是捕获一个特定的属性检查并返回一个不同的错误。我的例子是,如果设置了不可变,root 仍然可以附加到文件中,但就是这样。我意识到这不是最好的主意,因为不可变标志有一个非常特定的目的,但我希望你明白我的意思。
【解决方案2】:

当您访问(读、写..等)一个文件时,操作系统要做的第一件事就是检查是否允许与用户/进程关联的权限使用fstat64 完成的必要权限,它返回包含有关inode、UID、GID 等信息的统计结构。如果权限足够,则访问inode 数据结构以执行所请求的任何操作。对 fstat64 的调用是免费的,即进程(调用 fstat64)无需特殊权限即可访问有关文件的元数据。

【讨论】:

    猜你喜欢
    • 2012-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-02
    • 2015-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多