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