将Samba设置为Active Directory域控制器

Posted zyxnhr

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将Samba设置为Active Directory域控制器相关的知识,希望对你有一定的参考价值。

一 简介

从版本4.0开始,samba可以作为Active Directory(AD)域控制器(DC)运行,如果在生产环境中安装samba,建议运行两个或者多个DC用于故障转移

本文介绍如何让将一个Samba设置为新AD集群的第一个DC,另外,如果要将samba NT4域迁移到Samaba AD,也可以参考本文

samba作为AD DC支持:

集成的LDAP服务器作为AD后端

在heimdal的kerberos密钥分发中心(KDC)

如果运行Samba 4.7或者更高版本并且已经使用该选项构建,samba为您的操作系统提供的MIT Kerberos  KDC提供的实验支持with-system-mitkrb5.在其他情况下,Samba使用Samba中包含的heimdal KDC。

二 准备安装

选择AD DC的主机名

不要将仅使用NT4的术语作为主机名,例如PDC或者BDC。这些模式在AD中不存在并导致混淆

选择AD林的DNS域。该名称也将作为 AD Kerberos领域

确保使用不需要更改的DNS域来配置AD。Samba不支持重命名AD DNS区域和Kerberos领域。不要.local用于TLD,Avahi使用它。

在DC上使用静态的IP地址

禁用resolvconf自动更新/etc/resolv.confDNS解析程序配置文件的工具,例如AD DC和域成员必须使用能够解析AD DNS区域的DNS服务器。

验证没有正在运行的Samba进程

#ps ax | egrep“samba | smbd | nmbd | winbindd”

如果输出列出的任何sambasmbdnmbd或winbindd进程,关掉进程。

验证/etc/hosts DC上文件是否正确解析了完全限定域名(FQDN)和短主机名到DC的LAN IP地址。例如

127.0.0.1 localhost localhost.localdomain 
10.99.0.1 DC1.samdom.example.com DC1

主机名和FQDN不得解析为127.0.0.1IP地址或任何其他IP地址,而不是DC的LAN接口上使用的IP地址。

如果您之前在此主机上运行了Samba安装

  删除现有smb.conf文件。列出文件的路径:

#smbd -b | grep“CONFIGFILE” 
   CONFIGFILE:/usr/local/samba/etc/samba/smb.conf

删除所有Samba数据库文件,例如*.tdb*.ldb文件。列出包含Samba数据库的文件夹

#smbd -b | egrep“LOCKDIR | STATEDIR | CACHEDIR | PRIVATE_DIR” 
  LOCKDIR:/ usr / local / samba / var / lock / 
  STATEDIR:/ usr / local / samba / var / locks / 
  CACHEDIR:/ usr / local / samba / var / cache / 
  PRIVATE_DIR :/ usr / local / samba / private /

从干净的环境开始有助于防止混淆,并确保来自任何先前Samba安装的文件不会与您的新域DC安装混合

  删除现有/etc/krb5.conf文件:

#rm /etc/krb5.conf

三 安装Samba

3.1 操作系统要求

  构建Samba所需要的程序包安装依赖

        安装以下软件包以在最小的Red Hat Enterprise Linux 7,CentOS 7或Scientific Linux 7安装上将Samba构建为Active Directory(AD)域控制器(DC):    

#yum install attr bind-utils docbook-style-xsl gcc gdb krb5-workstation \ 
       libsemanage-python libxslt perl perl-ExtUtils-MakeMaker \ 
       perl-Parse-Yapp perl-Test-Base pkgconfig policycoreutils-python \ 
       python2-crypto gnutls-devel libattr-devel keyutils-libs-devel \ 
       libacl-devel libaio-devel libblkid-devel libxml2-devel openldap-devel \ 
       pam-devel popt-devel python-devel readline-devel zlib-devel systemd-devel \ 
       lmdb-devel jansson-devel gpgme-devel pygpgme libarchive-devel
Red Hat Enterprise Linux 7不包含构建Samba AD DC所需的所有软件包。在安装软件包之前,请启用Enterprise Linux(EPEL)存储库的外部Extra Packages。有关详细信息,请参阅https://fedoraproject.org/wiki/EPEL。在CentOS 7和Scientific Linux 7上不需要启用EPEL存储库。

  如果DC应作为CUPS后端的打印服务器(不推荐),另外安装:

#yum install cups-devel

  Samba域名成员

  Red Hat Enterprise Linux / CentOS / Scientific Linux

# yum install autoconf automake gcc gdb krb5-devel krb5-workstation \
   openldap-devel make pam-devel python-devel docbook-style-xsl \
   libacl-devel libattr-devel libxslt 

3.2 文件系统支持

  要设置具有扩展访问控制列表(ACL)支持的共享,托管共享的文件系统必须xattr启用用户和系统名称空间。在Samba Active Directory(AD)域控制器(DC)上,samba-tool自动为创建Sysvol共享的文件系统验证此设置。

  EXT4

  fstab文件,不必修改/ etc / fstab,ext4默认使用所有必需的选项。

  内核支持,确保您的内核启用了以下选项:

CONFIG_EXT4_FS_SECURITY = Y
CONFIG_EXT4_FS_POSIX_ACL = Y

  EXT3

  fstab文件,对于Samba共享的该类型的文件系统,请将以下选项添加到/ etc / fstab:

/dev/...          /srv/samba/demo          ext3          user_xattr,acl,barrier=1          1 1

注意:该barrier=1选项可确保tdb事务可以安全地防止意外断电。

请小心修改你的fstab。它可能导致无法启动的系统!

内核支持,确保您的内核启用了以下选项:

CONFIG_EXT3_FS_SECURITY=y
CONFIG_EXT3_FS_POSIX_ACL=y

  XFS

  fstab文件,您的fstab中不需要特殊的挂载选项

  内核支持,确保您的内核启用了以下选项:

CONFIG_XFS_POSIX_ACL=y

  没有xattr支持的文件系统

  注意:这不推荐!!!

  如果您没有支持xattr的文件系统,可以通过在smb.conf中添加以下行来模拟它:

 posix:eadb = /usr/local/samba/private/eadb.tdb

  这将在该tdb中放置所有额外的文件属性(NT ACL,DOS EA,流等)。

  注意:这种方式效率不高,不能很好地扩展。这就是它不应该用于生产的原因!

  测试你的文件系统

  注意:没有xattr支持的文件系统不需要这样做。

  在开始测试之前,请确保已attr安装软件包!

  以root身份运行以下命令以测试xattr支持:

# touch test.txt
# setfattr -n user.test -v test test.txt
# setfattr -n security.test -v test2 test.txt

  以下命令应返回显示的输出:

#getfattr -d test.txt #file 
:test.txt 
user.test =“test” 

#getfattr -n security.test -d test.txt #file 
:test.txt 
security.test =“test2”

  以root用户身份运行以下命令,测试扩展ACL支持:

#touch test.txt #setfacl -mg:adm:rwx test.txt

  以下命令应返回显示的输出:

#getfacl test.txt #file 
:test.txt 
#owner:root 
#group 
:root user :: rw- 
group :: r-- 
group:adm:rwx 
mask :: rwx 
other :: r--

  如果Operation not supported显示错误:

你的内核配置不正确,
或者您的文件系统未使用正确的选项安装,或
你没有使用root用户运行命令。

或者从source构建Samba

特定于分发的程序包安装

四 配置Samba Active Directory

Samba AD配置过程创建AD数据库并添加初始记录,例如域管理账户所需的DNS条目

如果要将Samba NT4域迁移到AD,对Samba经典升级

AD配置需要root权限才能创建文件和设置权限。

samba-tool domain provision命令提供了几个用于交互式和非交互式设置的参数,可以使用help看详细指令

#samba-tool domain provision --help

配置新AD时,建议通过将--use-rfc2307参数传递samba-tool domain provision命令来启用NIS扩展这使您可以在AD中存储Unix属性,例如用户ID(UID),主目录路径,组ID(GID)。启用NIS扩展没有任何缺点。但是,在现有域中启用它们需要手动扩展AD架构。

4.1 参数说明

在配置期间设置一下参数

交互式设置

非交互模式参数

说明

--use-rfc2307

--use-rfc2307

启用NIS扩展。

Realm

--realm

Kerberos领域。AD DNS域的大写版本。例如:SAMDOM.EXAMPLECOM。

Domain

--domain

NetBios域名(工作组)。这可以是任何东西,但它必须是一个单词,不超过15个字符且不包含点。建议使用AD DNS域的第一部分。例如:samdom。不要使用计算机短主机名。

Server Role

--server-role

安装域控制器DC角色。

DNS backend

--dns-backend

设置DNS后端。必须使用DNS后端安装AD中的第一个DC。请注意,该BIND9_FLATFILE版本不受支持,将在以后的Samba版本中删除。

DNS forwarder IP address

无法使用

此设置仅在使用SAMBA_INTERNAL DNS后端时可用。

Administrator password

--adminpass

设置域管理员密码。如果密码与复杂性要求不匹配,则配置将失败。

samba-tool domain provision 命令经常使用的其他参数

--option="interfaces=lo eth0" --option="bind interfaces only=yes":如果您的服务器具有多个网络接口,请使用这些选项将Samba绑定到指定的接口。这使samba-tool命令能够在连接期间在目录中注册正确的LAN IP地址。

不要NONE用作DNS后端,它不受支持,将在以后的Samba版本中删除。
如果使用Bind作为DNS后端,请不要使用BIND9_FLATFILE,它不受支持,将在以后的Samba版本中删除。
在AD域中配置第一个DC后,请不要在同一域中配置任何其他DC,再加入任何DC。

4.2 以交模式配置Samba AD

要以交互的方式配置Samba AD,请运行:

# samba-tool domain provision --use-rfc2307 --interactive
Realm [SAMDOM.EXAMPLE.COM]: SAMDOM.EXAMPLE.COM
 Domain [SAMDOM]: SAMDOM
 Server Role (dc, member, standalone) [dc]: dc
 DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]: SAMBA_INTERNAL
 DNS forwarder IP address (write none to disable forwarding) [10.99.0.1]: 8.8.8.8
Administrator password: Passw0rd
Retype password: Passw0rd
Looking up IPv4 addresses
Looking up IPv6 addresses
No IPv6 address will be assigned
Setting up share.ldb
Setting up secrets.ldb
Setting up the registry
Setting up the privileges database
Setting up idmap db
Setting up SAM db
Setting up sam.ldb partitions and settings
Setting up sam.ldb rootDSE
Pre-loading the Samba 4 and AD schema
Adding DomainDN: DC=samdom,DC=example,DC=com
Adding configuration container
Setting up sam.ldb schema
Setting up sam.ldb configuration data
Setting up display specifiers
Modifying display specifiers
Adding users container                                                                                                                                                                                        
Modifying users container                                                                                                                                                                                     
Adding computers container                                                                                                                                                                                    
Modifying computers container                                                                                                                                                                                 
Setting up sam.ldb data                                                                                                                                                                                       
Setting up well known security principals                                                                                                                                                                     
Setting up sam.ldb users and groups                                                                                                                                                                           
Setting up self join                                                                                                                                                                                          
Adding DNS accounts                                                                                                                                                                                           
Creating CN=MicrosoftDNS,CN=System,DC=samdom,DC=example,DC=com                                                                                                                                                
Creating DomainDnsZones and ForestDnsZones partitions                                                                                                                                                         
Populating DomainDnsZones and ForestDnsZones partitions                                                                                                                                                       
Setting up sam.ldb rootDSE marking as synchronized                                                                                                                                                            
Fixing provision GUIDs                                                                                                                                                                                        
A Kerberos configuration suitable for Samba 4 has been generated at /usr/local/samba/private/krb5.conf                                                                                                        
Setting up fake yp server settings                                                                                                                                                                            
Once the above files are installed, your Samba4 server will be ready to use                                                                                                                                   
Server Role:           active directory domain controller                                                                                                                                                     
Hostname:              DC1                                                                                                                                                                                    
NetBIOS Domain:        SAMDOM                                                                                                                                                                                 
DNS Domain:            samdom.example.com                                                                                                                                                                     
DOMAIN SID:            S-1-5-21-2614513918-2685075268-614796884

交互式配置模式支持将其他参数传递给samba-tool domain provision命令。这使您可以修改不属于交互式设置的参数。

4.3 以非交互式配置Samba AD

例如,要使用以下配置设置非交互式配置Samba AD:

  服务器角色:AD

  一起用NIS扩展

  内部DNS后端

  Kerberos领域和AD DNS区域:samdom.example.com

  NetBIOS域名:SAMDOM

  域管理员密码:Passw0rd

#samba-tool domain provision --server-role = dc --use-rfc2307 --dns-backend = SAMBA_INTERNAL --realm = SAMDOM.EXAMPLE.COM --domain = SAMDOM --adminpass = Passw0rd

五 设置AD DNS后端

如果使用SAMBA_INTERNAL DNS后端配置DC请跳过此步骤:

设置BIND DNS服务器和BIND_DLZ 模块。

启动BIND DNS服务器。例如

#systemctl start named

六 配置DNS解析器

AD中的域成员使用DNS来定位服务,例如LDAP和Kerberos。为此,他们需要使用能够解析AD DNS区域的DNS服务器。

在DC上,文件domainnameserver参数中设置DC中的AD DNS域和DC的IP /etc/resolv.conf例如:

search samdom.example.com
nameserver 10.99.0.1

七 创建一个反向区域

可以添加反向查找区域

# samba-tool dns zonecreate <Your-AD-DNS-Server-IP-or-hostname> 0.99.10.in-addr.arpa
Password for [[email protected]]:
Zone 0.99.10.in-addr.arpa created successfully

如果您需要多个反向区域(多个子网),只需再次运行上述命令,但使用另一个子网的数据

反向区域直接生效,无需重启Samba或BIND

八 配置Kerberos

在AD中,kerberos用于对用户,计算机和服务进行身份验证

在配置期间,Samba为您创建了kerberos配置文件,将此配置文件复制到操作系统的Kerberos配置中。例如

# cp /usr/local/samba/private/krb5.conf /etc/krb5.conf
不要创建指向生成的krb5.conf文件的符号链接。在Samba 4.7及更高版本中,/usr/local/samba/private/除用户之外的其他用户不再可以访问该目录root。如果文件是符号链接,则其他用户无法读取该文件,例如,如果使用BIND_DLZDNS后端,则动态DNS更新将失败。

预先创建Kerberos配置使用DBNS服务(SRV)资源记录来定位KDC

九 测试Samba AD DC

要samba手动启动服务

#samba

samba不提供System V init的脚本,systemd,upstart,或者其他的配置文件

如果使用软件包安装Samba,请使用软件包中包含的脚本或服务配置文件来启动Samba。

如果您构建了Samba,可以使用 init的脚本,systemd,upstart管理

9.1 验证文件服务器

列出DC提供的共享

$ smbclient -L localhost -U%
Domain=[SAMDOM] OS=[Unix] Server=[Samba x.y.z]

        Sharename       Type      Comment
        ---------       ----      -------
        netlogon        Disk      
        sysvol          Disk      
        IPC$            IPC       IPC Service (Samba x.y.z)
Domain=[SAMDOM] OS=[Unix] Server=[Samba x.y.z]

        Server               Comment
        ---------            -------

        Workgroup            Master
        ---------            -------

The netlogon and sysvol shares were auto-created during the provisioning and must exist on a DC.

要验证身份验证,请netlogon使用域管理员帐户连接到共享:

$ smbclient //localhost/netlogon -UAdministrator -c ls
Enter Administrators password: 
Domain=[SAMDOM] OS=[Unix] Server=[Samba x.y.z]
 .                                   D        0  Tue Nov  1 08:40:00 2016
 ..                                  D        0  Tue Nov  1 08:40:00 2016

               49386 blocks of size 524288. 42093 blocks available

9.2 验证DNS

要验证您的AD DNS配置是否正常工作,请查询一些DNS记录:

_ldap域中基于tcp的SRV记录:

$ host -t SRV _ldap._tcp.samdom.example.com.
_ldap._tcp.samdom.example.com has SRV record 0 100 389 dc1.samdom.example.com.

 _kerberos域中基于udp的SRV资源记录:

$ host -t SRV _kerberos._udp.samdom.example.com.
_kerberos._udp.samdom.example.com has SRV record 0 100 88 dc1.samdom.example.com.

域控制器的A记录:

$ host -t A dc1.samdom.example.com.
dc1.samdom.example.com has address 10.99.0.1

9.3 验证Kerberos

请求域管理员帐户的Kerberos票证:

$ kinit administrator
Password for [email protected]:

如果未将[email protected]格式中的主体传递kinit命令,则会自动附加Kerberos域
将Kerberos域设置为大写

列出缓存的Kerberos票证:

$ klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: [email protected]

Valid starting       Expires              Service principal
01.11.2016 08:45:00  12.11.2016 18:45:00  krbtgt/[email protected]
    renew until 02.11.2016 08:44:59

9.4 配置时间同步

Kerberos需要在所有域成员上同步时间。

9.5 使用域控制器作为文件服务器

虽然Samba AD DC能够提供文件共享,但与所有其他安装模式一样,Samba团队不建议将DC用作文件服务器,原因如下:

除了最小的组织之外,拥有多个DC是一个非常好的备份措施,并使升级更安全
它鼓励DC的升级也是每年或每两年升级主机操作系统,因为没有复杂的数据要转换或涉及其他服务。
这意味着升级可以通过安装新的,并在更改中进行复制来完成,这些更改在Samba中得到了更好的测试,获得了新功能并避免了许多挥之不去的数据损坏风险。
DC和文件服务器具有组织希望升级的不同点。DC和文件服务器上的新功能需要在不同的时间。目前,AD DC正在快速发展以获得功能,而文件服务器在20多年后,更为保守。
在DC上强制执行强制smb签名。

如果您决定将Samba DC用作文件服务器,请考虑在DC上运行包含单独的Samba Unix域成员的VM并使用它。

如果必须将Samba DC用作文件服务器,则应注意自动启用的acl_xattr虚拟文件系统(VFS)对象使您只能使用Windows访问控制列表(ACL)配置共享。将POSIX ACL与Samba DC上的共享一起使用不起作用。

要为网络共享提供Samba的全部功能,请使用文件共享设置Samba域成员。

如果您只有一个小域(小型办公室,家庭网络)并且不想遵循Samba团队的建议并将DC另外用作文件服务器,请在开始设置共享之前配置Winbindd。

如果您确实使用AD DC作为文件服务器,请不要添加Unix域成员上使用的任何“idmap config”行。他们不会工作,会造成问题。
如果确实使用AD DC作为文件服务器,则必须从Windows设置权限,不要尝试使用任何旧方法(强制用户等)。它们无法正常工作并会导致问题。

 

参考文献:

https://wiki.samba.org/index.php/Setting_up_Samba_as_an_Active_Directory_Domain_Controller

以上是关于将Samba设置为Active Directory域控制器的主要内容,如果未能解决你的问题,请参考以下文章

将本地设备连接到 Azure Active Directory 域服务

第一篇Active Directory疑难解答概述

如何使用 Azure Active Directory 设置 Ocelot Api 网关

来宾用户如何在 Azure Active Directory 中重置其 MS Authenticator MFA 设置?

如何强制Azure Active Directory身份验证服务重新发出带有更新声明的id_token?

“Active Directory域服务当前不可用”错误提示怎么解决