bertvv.samba

Ansible 角色 bertvv.samba

这是一个用于设置 Samba 文件服务器的 Ansible 角色。

由于时间和资源的限制,我已经将该角色的维护工作移交给了 @vladgh。我无法再跟进问题和拉取请求,也无法确保新的版本具有足够高的质量以便实际可用。

感谢多年来支持过我的每一个人,感谢所有贡献者,特别感谢 @vladgh 愿意伸出援手接管维护工作。


该角色的职责包括:

  • 安装必要的软件包
  • 配置 SELinux 设置(当 SELinux 处于活动状态时)
  • 创建共享目录
  • 管理 Samba 用户和密码
  • 管理共享访问权限

以下项目不属于本角色的关注范围,应通过其他角色(例如 bertvv.rh-base)进行配置:

  • 管理防火墙设置。
  • 创建系统用户。Samba 用户应该已经作为系统用户存在。

如果您喜欢或使用此角色,请考虑给它一个星标!谢谢!

CVE-2017-7494

一个远程代码执行漏洞可能会影响您的 Samba 服务器安装。Samba 版本 3.5.0 和 4.6.4 之前的版本受此影响。如果您的系统启用了 SELinux,则 存在此漏洞。

该角色会检查已安装的 Samba 版本是否受到漏洞影响,并应用建议的解决方法:将 nt pipe support = no 添加到配置的 [global] 部分。请注意,这将禁用 Windows 客户端的共享浏览。

如果需要,您可以通过将角色变量 samba_mitigate_cve_2017_7494 设置为 false 来显式禁用此修复。

更多信息:https://access.redhat.com/security/cve/cve-2017-7494

需求

没有特定的要求

角色变量

变量 默认值 备注
samba_apple_extensions no 当为 yes 时,启用 Apple 特定 SMB 扩展的支持。这是 Time Machine 支持工作的必要条件(见下文)
samba_create_varwww_symlinks false 当为 true 时,在 Web 文档根目录中创建指向共享的符号链接。(var/www//var/www/html,取决于平台)
samba_cups_server localhost:631 全局选项 cups server 的值(仅在 samba_printer_type 为 "cups" 时需要)
samba_domain_master true 当为 true 时,smbd 启用 WAN 范围的浏览列表聚合
samba_global_include - 与 Samba 兼容的配置文件,包含需加载到 [global] 部分的选项(见下文)
samba_guest_account - 供未知用户使用的访客账户
samba_homes_include - 与 Samba 兼容的配置文件,包含需加载到 [homes] 部分的选项(见下文)
samba_interfaces [] 用于浏览、名称注册等的网络接口列表
samba_load_homes false 当为 true 时,用户家目录可以访问
samba_load_printers false 当为 true 时,主机上的打印机被共享
samba_local_master true 当为 true 时,nmbd 将尝试成为子网的本地主控
samba_log - 设置日志文件。如果未定义,则通过 syslog 进行日志记录。
samba_log_size 5000 设置日志文件的最大大小。
samba_log_level 0 设置 Samba 日志级别,0 为最少冗长,10 为大量调试输出。
samba_map_to_guest bad user 未注册用户访问共享时的行为。
samba_mitigate_cve_2017_7494 true CVE-2017-7494 缓解措施会影响某些客户端,例如 macOS High Sierra。
samba_netbios_name {{ ansible_hostname }} 此服务器的 NetBIOS 名称。
samba_passdb_backend tdbsam 密码数据库后端。
samba_preferred_master true 当为 true 时,表示 nmbd 是工作组的首选主浏览器
samba_realm - 领域的域名
samba_printer_type cups 全局选项 printingprintcap name 的值
samba_security user Samba 安全设置
samba_server_max_protocol - 指定服务器提供的最大协议版本。
samba_server_min_protocol - 指定服务器提供的最小协议版本。
samba_server_string fileserver %m 服务器的注释字符串。
samba_shares_root /srv/shares 共享目录创建在此目录下。
samba_shares [] 包含共享定义的字典列表。详情见下文。
samba_users [] 定义可以访问共享的用户的字典列表。
samba_wins_support true 当为 true 时,Samba 将充当 WINS 服务器
samba_workgroup WORKGROUP 服务器工作组的名称。

定义用户

为了允许用户访问共享,他们需要为 Samba 提供一个特定的密码:

samba_users:
  - name: alice
    password: ecila
  - name: bob
    password: bob
  - name: charlie
    password: eilrahc

不幸的是,密码目前必须以明文形式提供。此外,请注意该角色不会更改现有用户的密码。

这些用户应该已经在主机上拥有账户!创建系统用户并不是该角色的关注点,因此您应单独进行此操作。一个可选的方式是使用我的角色 bertvv.rh-base。示例如下:

rhbase_users:
  - name: alice
    comment: 'Alice'
    password: !!
    shell: /sbin/nologin
    groups:
      [...]

此用户不被允许在系统上登录(例如,使用 SSH),而只允许访问 Samba 共享。

定义共享

定义 Samba 共享和配置访问控制可能会很棘手,因为这不仅涉及到正确的 Samba 配置,还涉及用户和文件权限以及 SELinux 设置。该角色旨在简化此过程。

要指定共享,您至少需要给它一个名称:

samba_shares:
  - name: readonlyshare

这将创建一个仅对注册用户可读的共享。访客将无法查看共享的内容。

为共享配置写入权限的一种好方法是创建一个系统用户组,将用户添加到该组,并确保他们对共享目录具有写入权限。该角色假设组已经设置好,用户是控制写入权限的组的成员。假设您有两个用户 jackteach,他们是 pirates 组的成员。这个共享定义将为 pirates 提供读取和写入权限:

samba_shares:
  - name: piratecove
    comment: 'A place for pirates to hang out'
    group: pirates
    write_list: +pirates

访客无法访问此共享,注册用户可以读取。您可以进一步调整访问控制。可以将读取权限扩展给访客(添加 public: yes)或限制给指定用户或组(添加 valid_users: +pirates)。写入权限可以限制给单个用户(例如 write_list: jack)。添加到共享的文件将被添加到指定组,并默认授予组的写入权限。

以下是配置多个 VFS 对象模块以共享 glusterfs 卷的示例。VFS 对象选项是可选的。所需的 VFS 对象模块必须在此角色之外存在/安装。在这种情况下,samba-glusterfs 已在 centos 上安装。有关如何安装或默认 VFS 对象模块的详细信息,请参阅 Samba 文档。

samba_shares:
  - name: gluster-app_deploys
    comment: 'For samba share of volume app_deploys'
    vfs_objects:
      - name: audit
        options:
          - name: facility
            value: LOCAL1
          - name: priority
            value: NOTICE
      - name: glusterfs
        options:
          - name: volume
            value: app_deploys
          - name: logfile
            value: /var/log/samba/glusterfs-app_deploys.%M.log
          - name: loglevel
            value: 7
    path: /
    read_only: no
    guest_ok: yes
    write_list: tomcat
    group: tomcat

下面是共享选项的完整概述。只有 name 是必需的,其余是可选的。

选项 默认值 备注
browseable - 控制此共享是否显示在文件浏览器中。
comment - 共享的注释字符串
create_mode 0664 有关详细信息,请参阅 Samba 文档。
directory_mode 0775 有关详细信息,请参阅 Samba 文档。
include_file - 与 Samba 兼容的配置文件,包含给此共享的选项(见下文)。
force_create_mode 0664 有关详细信息,请参阅 Samba 文档。
force_directory_mode 0775 有关详细信息,请参阅 Samba 文档。
group users 将用户组文件添加到共享。
guest_ok - 允许访客访问。
name(必需) - 共享的名称。
owner root 设置路径的所有者
path /{{samba_shares_root}}/{{name}} 共享目录的路径。
public no 控制访客用户的读取权限
setype samba_share_t 共享目录的 SELinux 类型
valid_users - 控制注册用户的读取权限。使用相应 Samba 设置的语法。
vfs_objects - 有关详细信息,请参阅 Samba 文档。
writable - 对访客可写。
write_list - 控制注册用户的写入权限。使用相应 Samba 设置的语法。

valid_userswrite_list 的值应为用逗号分隔的用户列表。以 +@ 开头的名称被解释为组。有关这些选项的更多详细信息,请参阅 Samba 配置

添加任意配置文件

您可以通过自定义配置文件添加此角色未支持的设置,这些文件将从主配置文件中包含。有三种类型的包含文件:用于全局部分、用于家目录部分以及用于单独共享。将自定义配置文件放在相对于主剧本位置的子目录 templates 中。然后,在变量 samba_global_includesamba_homes_includeinclude_file 中指定它们。

您的自定义配置文件被视为 Jinja 模板,因此您可以在其中使用 Ansible 变量。这些配置文件将被验证以确保它们在语法上是正确的。

例如,要包含 templates/global-include.conf,设置:

samba_global_include: global-include.conf

请注意,指定 templates/ 目录不是必需的。

同样,要包含针对 piratecove 共享的 templates/piratecove-include.conf(见上面的示例);设置:

samba_shares:
  - name: piratecove
    comment: 'A place for pirates to hang out'
    group: pirates
    write_list: +pirates
    include_file: piratecove-include.conf

test playbook 中有一些示例。自定义配置文件可以在 docker-tests 分支中找到。

依赖关系

没有依赖项。

示例剧本

请参阅 test playbook

测试

此角色使用 Ansible Molecule 进行测试。每次提交和拉取请求后,测试会在 Travis CI 中自动启动。

此 Molecule 配置将:

  • 运行 Yamllint 和 Ansible Lint
  • 创建一个 Docker 容器
  • 运行语法检查
  • 使用 test playbook 应用该角色
  • 使用 BATS 运行验收测试

该过程将对支持的 Linux 发行版重复进行。

本地测试环境

如果您希望设置本地测试环境,可以使用基于 Vagrant+VirtualBox 的可重现设置:https://github.com/bertvv/ansible-testenv。手动安装必要工具的步骤:

  1. 应在您的计算机上安装 Docker、BATS 和 smbclient(假设运行 Linux)。当您开始测试时,不应运行任何 Docker 容器。
  2. 按照 Molecule 的推荐,创建一个 Python 虚拟环境
  3. 安装软件工具 python3 -m pip install molecule docker yamllint ansible-lint
  4. 导航到角色目录的根目录并运行 molecule test

Molecule 会在测试后自动删除容器。如果您希望自己查看容器,请运行 molecule converge,然后运行 molecule login --host HOSTNAME

Docker 容器基于 Jeff Geerling 创建的图像,专为 Ansible 测试而设(请寻找名为 geerlingguy/docker-DISTRO-ansible 的图像)。您可以使用他的任何图像,但仅支持 meta/main.yml 中提到的发行版。

默认配置将启动一个 Centos 7 容器。通过设置 MOLECULE_DISTRO 变量选择其他发行版,例如:

MOLECULE_DISTRO=debian9 molecule test

MOLECULE_DISTRO=debian9 molecule converge

您可以通过 molecule verify 在两台服务器上运行验收测试,或手动运行

SUT_IP=172.17.0.2 bats molecule/default/files/samba.bats

您需要初始化变量 SUT_IP,即待测系统的 IP 地址。服务器 smb1 的 IP 地址应为 172.17.0.2。

贡献

欢迎提出问题、功能请求和想法,可以在 Issues 部分发布。

也非常欢迎拉取请求。提交 PR 的最好方式是先创建此 GitHub 项目的分叉,然后为建议的更改创建主题分支,并将该分支推送到您的分叉中。然后 GitHub 可以轻松基于该分支创建 PR。不要忘记在下面的贡献者列表中添加您自己!

许可

2-Clause BSD 许可证,详见 LICENSE.md

贡献者

该角色的实现得益于下面列出的人们的贡献。如果您有进一步改进的想法,请随时参与!

欢迎在 Issues 部分发布问题、功能请求、想法、建议等。

也非常欢迎拉取请求。请为您的建议更改创建主题分支。如果您不这样做,在合并后将会导致您的分叉中出现冲突。请在您的 PR 中随时添加自己到下面的贡献者列表中!

Ben Tomasik, Bengt Giger, Bert Van Vreckem(维护者), Birgit Croux, DarkStar1973, George Hartzell, Ian Young, Jonas Heinrich, Jonathan Underwood, Karl Goetz, morbidick, Paul Montero, Slavek Jurkowski, Sven Eeckeman, Tiemo Kieft, Tobias Wolter, Tomohiko Ozawa, Robin Ophalvens.

关于项目

This role installs and configures Samba as a file server. Deprecated, please use vladgh.samba instead.

安装
ansible-galaxy install bertvv.samba
许可证
other
下载
268k
拥有者
Hi! My contribs are often related to my job (teaching Linux), but are mostly done in my free time. I can't always respond quickly to PRs and Issues. Sorry!