使用 Samba 提供 AD 和域控制器功能的服务器将为您提供一种非常成熟和专业的方式来集中所有用户和组信息。 它将使您免于管理每台服务器上的用户和组的负担。 此解决方案对于验证应用程序(如 WordPress、FTP 服务器、HTTP 服务器等)很有用。
这个关于将 Samba 设置为 AD 和域控制器的分步教程将向您展示如何为您的网络、服务器和应用程序实现此解决方案。
先决条件
一个新鲜的 Fedora Linux 35 服务器安装。
定义
主机名: dc1.onda.org
领域: 昂达.org
知识产权: 10.1.1.10/24
注意事项
- 一旦选择了域,你就不能改变它,明智的;
- 在 /etc/hosts 文件中,服务器名称不能在 127.0.0.1 行,必须在其 IP 地址行;
- 服务器使用固定IP地址,服务器IP不会改变;
- 配置 DC 服务器后,不要再配置另一个,而是将其他服务器加入域;
- 对于 DNS 服务器,我们将选择 SAMBA_INTERNAL,这样我们就可以拥有 DNS 转发功能;
- 需要在服务器中运行时间同步服务,例如chrony或ntp,这样可以避免服务器和客户端不同步的许多问题;
桑巴安装
让我们安装所需的软件以完成本指南。 它将提供您需要的所有应用程序。
sudo dnf install samba samba-dc samba-client krb5-workstation
配置
要将 Samba 设置为 AD 和域控制器,您必须在开始使用之前准备具有功能配置的环境。
主机名
确保您的服务器的主机名设置为 完全限定域名 (FQDN).
sudo hostnamectl hostname dc1.onda.org
防火墙
您需要允许一些 UDP 和 TCP 端口通过防火墙,以便客户端能够连接到域控制器。
我将向您展示添加它们的两种方法。 选择最适合您的那一款。
第一种方法
这是最直接的方法,firewalld 附带了一个服务,该服务具有打开 Samba DC 所需的所有端口,称为 samba-dc。 将其添加到防火墙规则中:
添加服务:
sudo firewall-cmd --permanent --add-service samba-dc
第二种方法
或者,您可以从命令行添加规则:
sudo firewall-cmd --permanent --add-port={53/udp,53/tcp,88/udp,88/tcp,123/udp,135/tcp,137/udp,138/udp,139/tcp,389/udp,389/tcp,445/tcp,464/udp,464/tcp,636/tcp,3268/tcp,3269/tcp,49152-65535/tcp}
重新加载防火墙:
sudo firewall-cmd --reload
有关 firewalld 的更多信息,请查看以下文章:在命令行中控制防火墙
SELinux
要运行 Samba DC 并在强制模式下与 SELinux 一起运行,有必要为 SELinux 设置一些 samba 布尔值以打开。 设置这些布尔值后,不需要禁用 SELinux。
sudo setsebool -P samba_create_home_dirs=on samba_domain_controller=on samba_enable_home_dirs=on samba_portmapper=on use_samba_home_dirs=on
恢复文件的默认 SELinux 安全上下文:
sudo restorecon -Rv /
桑巴
首先,删除 /etc/samba/smb.conf 文件(如果存在):
sudo rm /etc/samba/smb.conf
Samba 使用自己的 DNS 服务,因此,如果 systemd-resolved 正在运行,该服务将不会启动,这就是为什么需要编辑其配置以停止侦听端口 53 并使用 Samba 的 DNS。
如果目录 /etc/systemd/resolved.conf.d/ 不存在,则创建它:
sudo mkdir /etc/systemd/resolved.conf.d/
创建包含自定义配置的文件 /etc/systemd/resolved.conf.d/custom.conf:
[Resolve] DNSStubListener=no Domains=onda.org DNS=10.1.1.10
请记住将 DNS 和域条目更改为您的 Samba DC 服务器。

重启 systemd-resolved 服务:
sudo systemctl restart systemd-resolved
最后,配置 Samba 配置。 samba-tool 提供了使 Samba 成为 AD 服务器所需的每一个步骤。
使用 samba-tool 配置 Samba 配置:
sudo samba-tool domain provision --server-role=dc --use-rfc2307 --dns-backend=SAMBA_INTERNAL --realm=ONDA.ORG --domain=ONDA --adminpass=sVbOQ66iCD3hHShg

‐‐use-rfc2307 参数为 Active Directory 提供 POSIX 属性,Active Directory 将 Unix 用户和组信息存储在 LDAP (rfc2307.txt)。
确保您在 /etc/samba/smb.conf 中设置了正确的 dns 转发器地址。 关于本教程,它应该是 不同的 从服务器自己的 IP 地址 10.1.1.10,在我的情况下,我设置为 8.8.8.8,但是您的里程可能会有所不同:

Kerberos
在 Samba 安装之后,它提供了一个我们将使用的 krb5.conf 文件:
sudo cp /usr/share/samba/setup/krb5.conf /etc/krb5.conf.d/samba-dc
编辑 /etc/krb5.conf.d/samba-dc 内容以匹配您的组织信息:
[libdefaults]
default_realm = ONDA.ORG
dns_lookup_realm = false
dns_lookup_kdc = true
[realms]
ONDA.ORG = {
default_domain = ONDA
}
[domain_realm]
dc1.onda.org = ONDA.ORG
在引导时启动和启用 Samba
要确保 Samba 将在系统初始化时启动,请启用并启动它:
sudo systemctl enable samba
sudo systemctl start samba
测试
连接性
$ smbclient -L localhost -N
作为 smbclient 命令的结果,显示连接成功。
Anonymous login successful
Sharename Type Comment
--------- ---- -------
sysvol Disk
netlogon Disk
IPC$ IPC IPC Service (Samba 4.15.6)
SMB1 disabled -- no workgroup available

现在,测试管理员登录到 netlogon 共享:
$ smbclient //localhost/netlogon -UAdministrator -c 'ls'
Password for [ONDAAdministrator]:
. D 0 Sat Mar 26 05:45:13 2022
.. D 0 Sat Mar 26 05:45:18 2022
8154588 blocks of size 1024. 7307736 blocks available

域名解析测试
要测试名称解析是否有效,请执行以下命令:
$ host -t SRV _ldap._tcp.onda.org.
_ldap._tcp.onda.org has SRV record 0 100 389 dc1.onda.org.
$ host -t SRV _kerberos._udp.onda.org.
_kerberos._udp.onda.org has SRV record 0 100 88 dc1.onda.org.
$ host -t A dc1.onda.org.
dc1.onda.org has address 10.1.1.10
如果您收到错误消息:
-bash: host: command not found
安装 bind-utils 包:
sudo dnf install bind-utils
Kerberos 测试
测试 Kerberos 很重要,因为它会生成所需的票证,让客户端通过加密进行身份验证。 它在很大程度上依赖于正确的时间。
正确设置日期和时间再怎么强调都不为过,这就是为什么在客户端和服务器上运行时间同步服务如此重要的原因。
$ kinit administrator $ klist

将用户添加到域
samba-tool 为我们提供了一个执行域管理任务的界面,因此我们可以轻松地将用户添加到域中。
samba-tool 帮助非常全面:
$ samba-tool user add --help
将用户 danielk 添加到域:
sudo samba-tool user add danielk --unix-home=/home/danielk --login-shell=/bin/bash --gecos 'Daniel K.' --given-name=Daniel --surname="Kühl" --mail-address="[email protected]"

列出域上的用户:
sudo samba-tool user list
总结和总结
我们首先以全新的方式安装 Samba 和所需的应用程序 Fedora Linux 35 安装。 我们还解释了此解决方案解决的问题。 此后,我们进行了初始配置,为 Samba 准备好环境以作为 AD 和域控制器运行。
然后,我们继续介绍如何让 Samba 启动并运行 Fedora Linux 安全功能,例如启用 firewalld 和 SELinux。 我们进行了一些重要的测试以确保一切正常,最后展示了如何使用 samba-tool 管理用户。
总而言之,如果您想建立一个强大的解决方案,用于在您的网络、服务器(如果愿意,甚至可以将 Windows 10 客户端加入此 Samba 域)中集中身份验证 [tested with Windows 10 Professional version 20H2]) 和服务,请考虑将此方法用作基础架构的一部分。
既然您已经知道如何将 Samba 作为 AD 和域控制器解决方案,那么接下来您希望看到哪些内容? 在下面的评论中分享您的想法。