Linux (FUSE)文件系统何时检查访问权限?
“Unix世界”文件系统(如ext4)在inode中为每个文件存储3种类型的可用用户所有者、组和其他的权限/访问权限列表。 我想知道什么时候进行“身份验证”我的意思是: 假设我们有一个文件Linux (FUSE)文件系统何时检查访问权限?,linux,unix,linux-kernel,filesystems,fuse,Linux,Unix,Linux Kernel,Filesystems,Fuse,“Unix世界”文件系统(如ext4)在inode中为每个文件存储3种类型的可用用户所有者、组和其他的权限/访问权限列表。 我想知道什么时候进行“身份验证”我的意思是: 假设我们有一个文件 file.txt rwx rw- --- st_uid=54 st_gid=99 owner group others 用户tim拥有uid=100,gid=99 在终端中运行cat file.txt,请求到达文件系统,该文
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
实际上是一种读取,因此用户可以接收内容
此场景在哪个系统功能中执行?我可以通过实现自定义文件系统来修改它吗?
更新:
我的文件系统的唯一目的是对权限进行更多的修改,并作为概念的证明(这是一个研究项目),因此,如果您有任何关于我应该从哪里开始的想法,我将不胜感激。提前谢谢 对于FUSE文件系统,解决方案是直截了当的: FUSE实现为向文件系统发出的每个用户请求提供一个上下文 工作流如下所示:
ls
)使用shell命令
strace cat file.txt
,您会发现如果出现EACCES错误,这是由于文件open()系统调用导致的。就内核架构而言,如果fs模块必须自己进行(实现)权限检查,我会感到惊讶。它们可能会将“模式位”返回到内核中的公共fs例程。如果您想定制,请查看ACL。我正在创建一个定制的fuse文件系统,我可以轻松更改open/readdir/chmod的行为。。;我唯一的问题是,尽管我知道文件的所有细节,但我不知道如何找出是哪个用户提出了请求;有什么想法吗?@sawduststrace
似乎是一个很好的起点;我不知道它的存在;)但是文件系统真的需要知道哪个用户正在访问该文件吗?让内核处理所有权限检查。FUSE文件系统应该只返回文件系统中存储的数据。