如何使用 Samba 否决特定的 UNIX 路径?(将一个目录与特定名称匹配,但不与任何其他目录匹配)

如何使用 Samba 否决特定的 UNIX 路径?(将一个目录与特定名称匹配,但不与任何其他目录匹配)

所以我最近了解了veto filesSamba 的选项,我想用它来隐藏与给定名称匹配的目录。

示例:我有两个目录,具有以下 UNIX 路径:

  • /存储/数据/nextcloud
  • /存储/用户/trwnh/nextcloud

我想否决第一个,但是不是第二个。

我尝试过的选项:

  • veto files = /storage/data/nextcloud(没有用,所以我仔细阅读了手册页,发现 / 是 OR 分隔符,而不是路径分隔符)
  • veto files = /storagedatanextcloud(我的第一个假设是我应该简单地删除路径分隔符——一定有点晚了,我不知道为什么我认为这样做会有效)
  • veto files = /nextcloud/(有效,但隐藏两个目录而不仅仅是第一个目录)

此时我陷入了困境,我甚至不确定我想要的功能是否在 Samba 中实现,因此我求助于互联网来帮助我解决这个问题。

答案1

smb.conf(5) 意味着您不能否决特定路径,只能否决文件(和目录)名称,让它们位于任何地方。

       veto files (S)

       This is a list of files and directories that are neither visible nor accessible. Each entry in the
       list must be separated by a ´/´, which allows spaces to be included in the entry. ´*´ and ´?´ can
       be used to specify multiple files or directories as in DOS wildcards.

       Each entry must be a unix path, not a DOS path and must not include the unix directory separator

因此,这不是您想要的,因为您无法更改nextcloud目录的名称。

有一些选择:

我的假设是您使用与系统用户相同的用户访问 samba,因此您不能仅从 samba 用户撤销 r/x 位,而不会影响您的 linux 用户的权限。

  1. 在单独的挂载命名空间中运行 samba,在该命名空间中您可以覆盖挂载要隐藏的目录。请参见unshare(1)mount --bind,可能需要稍微调整 samba 初始化脚本。

  2. 将整个 /storage 绑定挂载到其他地方,例如 /smb/storage,并覆盖挂载 /smb/storage/users/trwnh/nextcloud。并将 samba 共享指向 /smb/storage。这样,您就不需要单独的挂载命名空间。

  3. 将 /storage/data 和 /storage/users 放在单独的共享中。

  4. 制作一个 samba vfs 模块,其唯一的作用是隐藏不需要的目录。

相关内容