有没有办法隐藏一个(或除一个之外的所有)用户的共享匹配模式中的所有子文件夹?
我想要一个子目录(我们称之为_private_data
),它应该对 可见,user1
但对 不可见user2
。但我事先无法知道这个目录在哪里。可能是user1
先创建一个目录ShareThis/LookHere
,然后创建目录ShareThis/LookHere/_private_data
。'user2' 也有权限读取ShareThis/LookHere
和所有子目录,但他不应该能够看到_private_data
子目录。
是否有可能做到这一点?我已经找到了hide files
、veto files
和dont descend
选项。它们看起来与我想要的非常相似,但我不知道如何将它们仅分配给某些用户以及如何使它们与共享的任何子目录匹配。
答案1
最后我找到了一个解决方案。它通过包含基于用户名的文件来工作。您必须为每个要允许浏览 _priv 目录的用户创建(或符号链接)一个文件,但这对我来说没问题。
以下是名为“图像”的共享的示例。
smb.conf:
[Images]
comment = Shared Images
path = /path/to/images
write list = user1, user2
valid users = user1, user2
# make sure the _priv directory cannot be accessed
hide files = /_priv/
veto files = /_priv/
# The following line allows to revert hide and veto options so that
# specific users are allowed to view private directories
include = /etc/samba/allowprivate.conf.%U
然后为每个能够访问目录的用户创建一个 allowprivate.conf。(例如 allowprivate.conf.user1),内容如下:
# This reverts the settings from smb.conf, so that this user
# can access all files
hide files =
veto files =
它甚至可以在子目录上工作,因此“特权”用户可以创建一个_priv
目录,而非特权用户将无法访问该目录。
答案2
我猜想,既然目录应该被隐藏,那么其他用户也不应该能够读取它。您可能需要查看hide unreadable
隐藏用户无权读取的文件和目录的参数。您可以针对每个共享进行设置。
答案3
以下是我的解决方案:
- 创建用户和组
- 仅让组
user1
内的用户admin
可以看到该文件夹。
[Images]
...
hide unreadable = yes
force user = %U
force group = +smbadmin
# /path/to/images
chmod 770 _priv
chown user1:admin _priv