用户/组安全如何在 Linux 上工作?

Iva*_*van 6 security linux user-management

例如,mount如何决定当前用户是否有权限挂载文件系统?据我所知,它会检查fstab文件和用户所属的组(我认为是 plugdev,至少在 Ubuntu 上)。

这些设置是硬编码到程序中的,还是从哪里获取的?例如,假设我想让另一个组中的用户能够挂载文件系统,如何做到这一点?

编辑:我正在寻找安全工作原理的一般描述。mount只是一个例子。我或多或少知道文件系统权限是如何工作的,但显然还有其他事情发生。我特别想知道是否存在程序实现安全性的标准方式,或者每个程序的实现方式是否不同。

Con*_*lls 2

安全机制完全取决于文件和程序的权限,例如以 root 身份运行的 nfsd(覆盖文件权限)并维护自己的安全机制。块设备文件的权限决定用户是否可以挂载该设备。每个文件对于三类用户(所有者、组、世界)都具有三组权限(读、写、执行),以及下面讨论的一些特殊位。

在“一切都是文件”的 Unix 传统中,原始设备和导出的卷显示为具有文件系统权限的特殊文件。远程安装远程卷稍微复杂一些,将在下面讨论。

如果用户以与文件所有者相同的uid登录,则owner可以使用权限。每个用户都有一个默认组,并且可以添加到/etc/group文件中的组条目中。当用户有权访问组时,将使用该组的文件权限。否则用户拥有“world”权限。ACL(访问控制列表)可用于向可用的特定用户授予权限。

程序可以通过setuid在其 inode 条目上设置位来覆盖用户级安全性。这将以二进制文件所有者的权限而不是登录用户的权限运行程序。此类程序的示例有nfsdmountsudo。这些程序都有自己的安全机制;例如sudo用于/etc/sudoers管理权限的。

mount基于nfsduid 和 gid 的工作,必须在两台机器上同步(传统上通常通过 NIS 完成)。nfsd 有一个名为 的文件/etc/exports,其中包含导出的文件系统和一些权限数据。mount 及其 nfs 驱动程序提供 nfsd 用于验证用户挂载卷的权限的凭据。在本地卷上挂载使用块设备的文件权限。