所以我最近了解了veto files
Samba 的选项,我想用它来隐藏一与给定名称匹配的目录。
示例:我有两个目录,具有以下 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 用户的权限。
在单独的挂载命名空间中运行 samba,在该命名空间中您可以覆盖挂载要隐藏的目录。请参见
unshare(1)
和mount --bind
,可能需要稍微调整 samba 初始化脚本。将整个 /storage 绑定挂载到其他地方,例如 /smb/storage,并覆盖挂载 /smb/storage/users/trwnh/nextcloud。并将 samba 共享指向 /smb/storage。这样,您就不需要单独的挂载命名空间。
将 /storage/data 和 /storage/users 放在单独的共享中。
制作一个 samba vfs 模块,其唯一的作用是隐藏不需要的目录。