OpenSUSE 带有几个预定义的权限设置。Paranoid 是最严格的。虽然我理解它为什么会阻止非 root 用户的虚拟化或 tty 广播之类的东西,但我不太明白它为什么也会阻止fuse
。fuse 在共享服务器上是否会引入任何真正的安全问题?
答案1
安全问题
编写和使用 FUSE 文件系统可能会带来一些 Metrodome 大小的安全问题,这些问题可能很明显,也可能不明显,但值得一提。在本节中,我将讨论权限提升,提供一些检查访问权限的说明,并提及竞争条件。
权限提升
需要说明的要点是,文件系统本身以运行它的进程的访问权限执行,而不是使用文件系统的进程的访问权限。以下是这在一些典型场景中的表现:
常见情况:用户运行文件系统时没有
allow_other
选择这是正常情况;文件系统以运行它的用户的权限运行,并且只有该用户才能访问文件系统。在这种情况下,FUSE 不会引发任何特定的安全问题。
用户使用 allow_other 选项运行文件系统
在这种情况下,文件系统以调用它的用户的权限运行,而不是碰巧使用文件系统的任何用户的权限。挂载文件系统的用户有责任确保不向其他用户授予不适当的访问权限。一般来说,用户这样做只会伤害自己,因为他们只能授予自己已经拥有的权限。
值得注意的是,
user_allow_other
必须设置选项/etc/fuse.conf
才能启用此选项。Root 运行文件系统
这实际上与前两种情况相同(取决于是否
allow_other
设置了选项),但 root 是一个足够特殊的情况,值得一提。在这种情况下,任何使用文件系统的用户都拥有该文件系统的 root 权限!如果进程可以访问实际的文件系统,则可以轻松利用这一点获得几乎无限制的访问权限。下一小节将稍微讨论一下检查访问权限,但最简单的方法是不允许 root 挂载文件系统。[…]
检查访问权限
一般而言,可能使用该
allow_other
标志执行的文件系统将需要采取措施确保其自身的安全。fuse.h
文档中指出,需要使用几个调用来检查所请求的访问是否被允许;除此之外,还有其他几个也需要访问检查(例如chown()
)。确保遵循这些注意事项是程序员的绝对责任![…]
同时访问和竞争条件
默认情况下,FUSE 以多线程运行:这意味着(简而言之)文件系统可以在先前的请求完成之前处理第二个请求;这反过来又增加了不同线程同时修改单个数据结构的可能性,这将导致非常难以调试的错误。
[…]