如何强制 Samba 创建目录

Lis*_*sek 4 active-directory samba share

我需要Samba配置方面的帮助。

我想要实现的是配置,共享的 Windows 用户只能看到他的文件。这只是通过这样的配置实现的:

用户由 Windows AD Server 授权

[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"
Run Code Online (Sandbox Code Playgroud)

它工作正常,但是...在服务器端,目录中的所有内容都/storage/BACKUP保存每个用户的文件。

所以我想在这里为每个用户创建目录(我不能使用 [home],因为它已经被使用了)

所以我想保持这样:

/storage/BACKUP/username/
Run Code Online (Sandbox Code Playgroud)

因此,当我更改路径并%U在最后添加时,一切都差不多了。

问题是我需要手动创建目录/storage/BACKUP/username

所以我需要的是Samba在用户访问此共享之前以某种方式强制创建此目录。

我试过添加add user script = /path/to/mkdir /storage/BACKUP/%U 但这不起作用,因为:

  1. 我不知道为什么;)
  2. 我之前已经有用户登录了
  3. 它应该为新创建的用户启动,这对我来说没问题,但它不起作用。

登录后,我不会在 linux 中创建用户,因此我不会在其他任何地方使用添加用户/机器脚本。

所以我想强制Samba为用户创建目录,当该用户尝试连接时。我从几个小时开始搜索谷歌,但没有找到适合我的方法。

我需要为每个人保留 /server/BACKUP 位置,但在服务器端,需要将文件保存在每个用户的单独目录中,因此创建新共享也不是解决方案。

Sve*_*ven 6

您可以为此使用preexecroot preexec选项。它们指定在连接到共享时运行的脚本。如果preexec共享以连接用户身份运行,并以 root 身份运行root preexec

在您的分享中:

[BACKUP]
root preexec = /etc/samba/gendir.sh %u
Run Code Online (Sandbox Code Playgroud)

where/etc/samba/gendir.sh看起来有点像这样:

#!/bin/bash 
DIRECTORY=/storage/BACKUP/$1
if [ ! -d "$DIRECTORY" ]; then
   mkdir $DIRECTORY
fi
Run Code Online (Sandbox Code Playgroud)

根据您的要求,向脚本添加chown和/或chmod语句。