如何通过脚本向 smb.conf 添加共享?

如何通过脚本向 smb.conf 添加共享?

我想编写脚本来将共享添加到smb.conf文件。我当前的脚本只是将其附加到文件末尾,但这并不理想。我宁愿编写一个脚本,如果不存在新共享,则添加新共享,如果存在,则替换它。

我目前正在 CentOS 7 发行版上编写该脚本,但理想情况下希望能在各个发行版中运行,尽管这不是必需的。

另外,我之所以bash这样做是因为该脚本在其他软件包添加到系统之前运行。该脚本用于yum安装samba软件包,然后配置它并添加共享。

答案1

为了符合现代系统管理员的最佳实践,最好将您的配置作为单独的文件添加/etc/smb/smb.d,然后使用 来引用它们include。遗憾的是,samba 不支持通配符include,因此您必须添加类似以下内容的内容:

include = /etc/smb/includes.conf

在你的smb.conf然后生成includes.conf类似的东西:

ls /etc/smb/smb.d/* | sed -e 's/^/include = /' > /etc/smb/includes.conf

更多背景信息如下:

chicks@silver 23:57:23 smb !531 $ ls smb.d
a.conf  c.conf  e.conf
chicks@silver 23:57:29 smb !532 $ ls /etc/smb/smb.d/* | sed -e 's/^/include = /' > /etc/smb/includes.conf
chicks@silver 23:57:40 smb !533 $ cat includes.conf 
include = /etc/smb/smb.d/a.conf
include = /etc/smb/smb.d/c.conf
include = /etc/smb/smb.d/e.conf

所以现在您可以将任何额外的 samba 配置粘贴到/etc/smb/smb.d,重新生成includes.conf并重新启动 samba,一切就都好了。

答案2

这是一个老话题,但仍然有用。这是我在简单的 Samba 安装中创建和删除用户以存储备份的脚本。

在 CentOS 上测试

准备目录和权限

在终端上运行此命令

sudo mkdir /备份
sudo mkdir /etc/samba/smb.conf.d
sudo groupadd sambashare
sudo chgrp sambashare /备份
sudo useradd -M -d /home/sadmin -s /usr/sbin/nologin -G sambashare sadmin
sudo smbpasswd -a sadmin
sudo smbpasswd -e sadmin

smb配置文件

[全球的]
    工作组 = TUAITI
    安全 = 用户

    passdb 后端 = tdbsam

    印刷 = 杯子
    printcap 名称 = cups
    加载打印机 = 是
    杯子选项 = 原始

包括 = /etc/samba/includes.conf

smbaddshare.sh

/bin/bash #!/bin/bash
用户=$1
如果[-z“$1”]
然后
    echo“未提供用户名”
    出口 1

useradd -M -d /backups/$USER -s /usr/sbin/nologin -G sambashare $USER
mkdir /备份/$USER
chown $USER:sambashare /backups/$USER
chmod 2770 /备份/$USER
smbpasswd -a $USER
smbpasswd -e $用户

cat /etc/samba/smb.conf.d/$USER.conf
[$USER]
    路径 = /备份/$USER
    可浏览 = 否
    只读 = 否
    强制创建模式 = 0660
    强制目录模式 = 2770
    有效用户 = $USER@sadmin
末梢血

ls /etc/samba/smb.conf.d/* | sed -e 's/^/include = /' > /etc/samba/includes.conf

smbcontrol 全部重新加载配置

smbremoveshare 命令

/bin/bash #!/bin/bash
用户=$1
如果[-z“$1”]
然后
    echo“未提供用户名”
    出口 1

read -r -p “您确定要删除该用户吗?[y/N]”响应
响应=${响应,,}#tolower
如果 [[ "$response" =~ ^(yes|y)$ ]]
然后
    smbpasswd -x $USER
    用户删除$USER
    mv /backups/$USER /backups/$USER.`date +"%Y%m%d%H%M%S"`.已删除
    rm /etc/samba/smb.conf.d/$USER.conf

    ls /etc/samba/smb.conf.d/* | sed -e 's/^/include = /' > /etc/samba/includes.conf

    smbcontrol 全部重新加载配置
别的
    回显“什么都没做”

相关内容