我正在将非正式家庭服务器上的数据迁移到运行 samba 的新的基于 FreeNAS (FreeBSD 10) 的文件服务器,并且我一直在尝试计划如何布置数据,以便为不同的用户提供正确的访问权限。我认为我需要一些指导来理解如何在 BSD 世界(而不是我习惯的 Windows 世界)中解决这个问题,因为我不太熟悉经验丰富的系统管理员如何结合使用unix 权限、ACL、Unix 主目录、软/硬符号链接、用户/组和 samba 包含/排除参数以实现所需的结果。
有相当多的数据目录,大约有 8 个用户,但为了使其对于具有类似查询的其他人来说更通用,我已经抽象了很多:
逻辑数据结构是这样的(不一定是它在磁盘上的布局方式):
媒体 - - 电影 - - 电视 - - 音乐 ---书籍 软件 ---司机 ---安装人员 磁盘映像备份 发展 - - 工具 ---项目 用户非公开数据 --- user1的非公开数据 --- user2的非公开数据 ESXi 虚拟机存储
上面的实际顶级目录在物理上分为不同的挂载点/文件系统,因为我使用 ZFS 并将数据放在不同的数据集上,这样我可以更好地调整 ZFS + samba 属性。例如,所有视频+音频文件保存在一个数据集中,因为它们总量非常大,但可能无法很好地进行重复数据删除(它们只会浪费 RAM);驱动程序、软件和磁盘映像位于单独的数据集中,因为测试表明它们具有非常高的去重率,并且节省空间的去重优势非常有价值;分离私有数据和非私有数据放入不同的数据集可能会简化安全性(?);和一些小目录需要额外的多个副本或不同的快照设置。
也就是说,我希望每个用户看到一个统一的逻辑结构(适合他们)而不是物理结构,这意味着他们看到media
和software
作为同一根共享中的两个顶级目录,而不是两个单独的共享,即使它们在物理上驻留在不同的文件系统上。因此,用户访问的根共享几乎肯定会包含软符号链接或类似的(nullfs?)来执行此操作。
一旦设置了顶级目录,我就不需要过多考虑较低级别的目录。我计划的唯一控制是在顶级目录上,在少数情况下是第二级目录(例如,对于个人用户私有数据子目录)。在该级别之下,它始终继承“与父级相同”的权限,并且数据位于同一卷上,因此几乎可以忽略。
设置后的权限应该很简单:原则上,当我设置通用文件系统/用户/组时,我将在少数顶级目录(以及顶级目录的符号链接)上手动设置任何所需的权限,然后再进行任何进一步的设置子目录和内容强制继承这些权限,因此用户没有任何知识或能力进一步设置权限。大多数用户没有 shell 访问权限,因此除了 SMB 共享之外,他们的唯一访问权限是使用authorized_keys 定义预设备份命令通过 ssh 进行预配置的 rsync 备份。所有数据目录都设置为使用 Windows 风格的 ACL。
实际上,用户列表足够短,我想为每个用户挑选和选择他们可以看到和修改的内容,并且在个人基础上这样做是实用的。我可以完全自由地设置符号链接、用户/组关系、unix 权限和 ACL 以及符号链接。但是,优雅地完成这件事将在易于管理且不需要我太多的系统与一直令人头痛的系统之间产生区别。
我知道我希望用户查看哪些文件夹,以及他们应该具有读写或只读访问权限,或遍历/非遍历访问权限。我想做的实际上是实现每个用户所需的任何内容,设置他们可以看到的数据文件系统中的哪些文件夹,以及其中哪些文件夹是读写的,哪些是只读的,等等。有很多方法可以做到这一点(设置各种用户和组?权限+ACL?Samba 否决目录?符号链接?如果 samba 和这些符号链接不能正常工作,则挂载 union 或 mount_nullfs?);我没有在 UNIX 世界中如何规划这一点的经验,而且我陷入了困境。
在尝试规划一个我以前从未使用过的文件系统,并尝试找出确保访问受到控制所需的内容(以便用户无法使用“../”或类似内容“逃离”其允许的目录)之间,我现在被困住了。
有大量关于权限和文件系统如何使用的资源功能性地工作,但我找不到关于如何计划和设置基本的多用户文件服务器的数据布局,以及这样做的“实现相同/相似结果的不同方法”的后果。
经验丰富的系统管理员会如何处理它?