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