我需要有关Samba
配置的帮助。
我想要实现的是配置,共享上的 Windows 用户只能看到他的文件。这可以通过这样的配置简单地实现:
用户由 Windows AD 服务器授权
[BACKUP]
comment = BACKUP STORAGE LOCATION
path = /storage/BACKUP
read only = no
browseable = yes
writable = yes
create mode = 0600
directory mode = 0700
force directory mode = 0700
force create mode = 0600
access based share enum = yes
hide unreadable = yes
valid users = "@DOMAINNAME+SOMEUSERGROUP"
它工作正常,但是......在服务器端,目录中的所有内容都/storage/BACKUP
保存了每个用户的文件。
所以我想在这里为每个用户创建目录(我不能使用[home],因为它已经被使用了)
所以我想保持这样:
/storage/BACKUP/username/
因此,当我更改路径并%U
在最后添加时,一切都差不多了。
问题是我需要手动创建目录/storage/BACKUP/username
。
所以我需要的是Samba
在用户访问这个共享之前以某种方式强制创建这个目录。
我试过添加add user script = /path/to/mkdir /storage/BACKUP/%U
但这不起作用,因为:
- 我不知道为什么;)
- 我之前已经有用户登录
- 它应该为新创建的用户启动,这对我来说没问题,但它不起作用。
在他们登录后,我没有在 linux 中创建用户,所以我没有在其他任何地方使用添加用户/机器脚本。
因此,当该用户尝试连接时,我想强制Samba
为用户创建目录。我从几个小时开始搜索谷歌,但没有找到适合我的方法。
我需要为每个人保留 /server/BACKUP 位置,但在服务器端,需要将文件保存在每个用户的单独目录中,因此创建新共享也不是解决方案。
您可以为此使用
preexec
orroot preexec
选项。他们指定在连接到共享时运行的脚本。如果preexec
共享以连接用户身份运行,并以root preexec
.在您的分享中:
/etc/samba/gendir.sh
看起来有点像这样:根据您的要求,在脚本中添加
chown
和/或chmod
语句。在我的情况下,情况略有不同——我使用 Samba 作为我的带有 FreeNAS 的 DC。我不确定这是否是由于 FreeBSD 构建或 Samba 作为 DC,但无论哪种方式,上面@ Sven答案中脚本的用户名都预先添加了域名,因此 $1 最终成为 DOMAINuser 而不是用户,并且请求的目录家庭共享是 DOMAIN\user 而不仅仅是用户。
我已经像这样调整了脚本,现在它具有魅力:
此外,机器还尝试创建自己的目录,并带有尾随 _ 字符。用户名有一个 $ 来指定计算机帐户。我已经修改了这样的脚本以支持计算机目录:
我还打算以同样的方式创建配置文件目录。
这是独立服务器。在共享辅助参数中我添加了:
所有用户都可以访问并完全控制所有文件,但是每个用户都有自己的自动创建的目录。
如果您正在使用 PAM 机制,您可能希望将以下行添加到文件
/etc/pam.d/common-session 中: