AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 576136
Accepted
Lisek
Lisek
Asked: 2014-02-18 03:48:59 +0800 CST2014-02-18 03:48:59 +0800 CST 2014-02-18 03:48:59 +0800 CST

如何强制 Samba 创建目录

  • 772

我需要有关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 但这不起作用,因为:

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

在他们登录后,我没有在 linux 中创建用户,所以我没有在其他任何地方使用添加用户/机器脚本。

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

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

active-directory
  • 4 4 个回答
  • 8973 Views

4 个回答

  • Voted
  1. Best Answer
    Sven
    2014-02-18T04:15:00+08:002014-02-18T04:15:00+08:00

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

    在您的分享中:

    [BACKUP]
    root preexec = /etc/samba/gendir.sh %u
    

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

    #!/bin/bash 
    DIRECTORY=/storage/BACKUP/$1
    if [ ! -d "$DIRECTORY" ]; then
       mkdir $DIRECTORY
    fi
    

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

    • 7
  2. babelmonk
    2021-01-20T22:42:51+08:002021-01-20T22:42:51+08:00

    在我的情况下,情况略有不同——我使用 Samba 作为我的带有 FreeNAS 的 DC。我不确定这是否是由于 FreeBSD 构建或 Samba 作为 DC,但无论哪种方式,上面@ Sven答案中脚本的用户名都预先添加了域名,因此 $1 最终成为 DOMAINuser 而不是用户,并且请求的目录家庭共享是 DOMAIN\user 而不仅仅是用户。

    我已经像这样调整了脚本,现在它具有魅力:

    #!/bin/bash
    
    USERNAME="${1//DOMAIN/}"
    
    DIRECTORY=/mnt/tank/domain-homes/DOMAIN/$USERNAME
    
    if [ ! -d $DIRECTORY ]; then
        mkdir -p $DIRECTORY
        chown DOMAIN\\$USERNAME:wheel $DIRECTORY
    fi
    

    此外,机器还尝试创建自己的目录,并带有尾随 _ 字符。用户名有一个 $ 来指定计算机帐户。我已经修改了这样的脚本以支持计算机目录:

    #!/bin/bash
    
    USERNAME="${1//DOMAIN/}"
    
    DIRECTORY=/mnt/tank/domain-homes/DOMAIN/$USERNAME
    
    if [[ "$USERNAME" == *_ ]]
    then
        # We have a computer share, so the username has a $ at the end,
        # the folder retains the _
            USERNAME="${USERNAME//_/\$}"
    fi
    
    if [ ! -d $DIRECTORY ]; then
        mkdir -p $DIRECTORY
        chown DOMAIN\\$USERNAME:wheel $DIRECTORY
    fi
    

    我还打算以同样的方式创建配置文件目录。

    • 0
  3. K4c
    2022-02-16T04:27:19+08:002022-02-16T04:27:19+08:00

    这是独立服务器。在共享辅助参数中我添加了:

    root preexec = bash -c '[[ -d /mnt/NAS/SAMBA/scratch/%U ]] || mkdir -m 0700 /mnt/NAS/SAMBA/scratch/%U && chown %U:%G /mnt/NAS/SAMBA/scratch/%U'
    

    所有用户都可以访问并完全控制所有文件,但是每个用户都有自己的自动创建的目录。

    • 0
  4. Norbert Weuster
    2022-05-31T04:49:32+08:002022-05-31T04:49:32+08:00

    如果您正在使用 PAM 机制,您可能希望将以下行添加到文件
    /etc/pam.d/common-session 中:

    session required        pam_mkhomedir.so skel=/etc/skel umask=0077
    
    • 0

相关问题

  • 如果以域用户身份远程登录,PC 速度极慢

  • 如何在 Windows 2003 的 ou 级别应用策略

  • 允许用户更改其 Active Directory 密码的 Web 界面

  • MOSS 2007 无法使用 ActiveDirectoryMembershipProvider 配置表单身份验证

  • 通过 VPN 更改 Active Directory 密码

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve