【发布时间】:2014-08-04 10:36:57
【问题描述】:
“Unix 世界”文件系统(如 ext4)在 inode 中为每个文件存储 3 种可用用户 owner、group、other 的权限/访问权限列表。 我想知道“身份验证”何时发生;我的意思是:
假设我们有一个文件
file.txt rwx rw- --- st_uid=54 st_gid=99
owner group others
用户tim拥有uid=100,gid=99
在终端运行cat file.txt,请求到达文件系统,该文件系统将tim与文件的权限进行比较;
tim不是所有者:他的uid=100与文件的uid=54不一样;
但他的gid与文件相同(99),所以他得到的响应是rw-
cat实际上是一个读取,所以用户收到内容
这个场景是在哪个系统函数中执行的?我可以通过实现自定义文件系统来修改它吗?
更新: 我的文件系统的唯一目的是稍微弄乱权限并成为概念证明(这是一个研究项目),所以任何关于我应该从哪里开始的想法都会受到高度赞赏。提前致谢!!
【问题讨论】:
-
使用 shell 命令
strace cat file.txt,您会发现如果出现 EACCES 错误,它是由文件 open() 系统调用引起的。 -
就内核架构而言,如果 fs 模块必须自己进行(实施)权限检查,我会感到惊讶。它们可能会将“模式位”返回给内核中的常见 fs 例程。如果您希望自定义,请查看 ACL。
-
我正在创建一个自定义 fuse 文件系统,我可以轻松更改 open/readdir/chmod.. 的行为;我唯一的问题是,即使我知道有关文件的所有详细信息,我也不知道如何找出提出请求的用户;有什么想法吗?
-
@sawdust
strace似乎是一个非常好的起点;我不知道它的存在;) -
但是文件系统真的需要知道哪个用户正在访问文件吗?让内核处理所有的权限检查。您的 FUSE 文件系统应该只返回存储在文件系统中的数据。
标签: linux unix linux-kernel filesystems fuse