例如,如何山决定当前用户是否有权挂载文件系统?据我所知,它会检查文件系统文件和用户所属的组(我认为是 plugdev,至少在 Ubuntu 上)。
这些设置是硬编码到程序中的吗?还是程序从哪里获取这些设置?例如,假设我想让另一个组中的用户能够挂载文件系统,该怎么做?
编辑:我正在寻找有关安全性工作原理的一般描述。山只是一个例子。我或多或少知道文件系统权限是如何工作的,但显然还有其他事情发生。我特别想知道程序实现安全性是否有标准方法,或者每个程序是否以不同的方式实现安全性。
答案1
安全机制完全取决于以 root 身份运行(覆盖文件权限)并维护其自己的安全机制的文件和程序(如 nfsd)的权限。块设备文件的权限决定用户是否可以挂载该设备。每个文件都有三组权限(读取、写入、执行),适用于三类用户(所有者、组、世界),以及下面讨论的少数特殊位。
在“一切皆文件”的 Unix 传统中,原始设备和导出的卷显示为具有文件系统权限的特殊文件。远程安装远程卷稍微复杂一些,下面将进行讨论。
如果用户以与文件所有者相同的 uid 登录,则owner
可以使用权限。每个用户都有一个默认组,并且可以添加到/etc/group
文件中的组条目中。当用户有权访问某个组时,将使用该组的文件权限。否则,用户具有“world”权限。ACL(访问控制列表)可用于向特定用户授予可用权限。
程序可以通过在其 inode 条目上设置位来覆盖用户级安全性setuid
。这将以二进制文件所有者的权限而不是登录用户的权限运行程序。此类程序的示例包括nfsd
和mount
。sudo
这些程序有自己的安全机制;例如,它sudo
用于/etc/sudoers
管理权限。
mount
并nfsd
基于 uid 和 gid 工作,这两个 ID 必须在两台机器上同步(通常传统上通过 NIS 完成)。nfsd 有一个名为 的文件,/etc/exports
其中包含导出的文件系统和一些权限数据。mount 及其 nfs 驱动程序提供凭证,nfsd 使用这些凭证来验证用户安装卷的权限。在本地卷上,mount 使用块设备的文件权限。
答案2
根据手册页,您可以输入一些选项fstab
来控制谁可以挂载文件系统:“ owner
”表示只允许块设备的所有者挂载它,“ group
”表示允许设备组中的任何人挂载它,或者“ user
”或“ users
”表示允许任何普通用户挂载它。如果未指定任何选项,则默认只有root
可以挂载文件系统。当然,执行挂载的用户需要对程序mount
本身具有执行权限。
对于您的情况,我想您可以将块设备的组更改为您希望能够挂载它的任何组,并group
在 中的挂载选项中添加“ ” fstab
。不过,这只允许您指定一个能够挂载文件系统的组,因此如果您这样做, 中的人员plugdev
可能会失去执行挂载的能力(除非他们也属于另一个组)。
另外,我不确定所有这些选项是否在所有系统上都存在。man mount(8)
在执行任何操作之前,您应该检查自己的系统。