Active Directory
简介
活动目录(Active Directory)是面向Windows Standard Server、Windows Enterprise Server以及 Windows Datacenter Server的目录服务。Active Directory存储了有关网络对象的信息,并且让管理员和用户能够轻松地查找和使用这些信息。Active Directory使用了一种结构化的数据存储方式,并以此作为基础对目录信息进行合乎逻辑的分层组织。
活动目录是 Windows 的身份验证和目录服务,活动目录基于 LDAP 实现其功能,其使用 DNS 进行主机名的解析,使用 Kerberos V5 进行用户身份验证,使用 LDAP V3 进行统一的帐户管理。
下面介绍如何让将Linux 主机加入到AD域。
搭建Windows AD域服务器
关于如何使用Windows Server搭建AD域服务器,在这里不做介绍。
将Linux操作系统加入到AD域
软硬件环境:
角色 | 主机OS | IP地址 |
---|---|---|
Linux 主机(也充当samba服务器) | CentOS7.4 x64 | 100.10.10.188 |
AD 服务器(也充当DNS服务器) | Windows Server 2016 | 100.10.10.225 |
NTP服务器(非必需) | CentOS7.4 x64 | 100.10.10.10 |
安装所需的组件
#yum install samba samba-client samba-client-libs samba-common samba-common-libs samba-common-tools samba-krb5-printing samba-libs samba-python samba-winbind samba-winbind-modules samba-winbind-clients samba-winbind-krb5-locator -y
#yum install krb5-devel krb5-pkinit krb5-libs krb5-workstation krb5-server-ldap krb5-server -y
#yum install pam_krb5 -y
#yum install realmd oddjob-mkhomedir oddjob -y
先决环境配置
- 修改DNS地址为AD服务器的IP:
#vim /etc/resolv.conf
nameserver 100.10.10.225
- 同步Linux 主机的时间
#ntpdate 100.10.10.10
具体的配置过程
有两种配置方法:(1)直接修改配置文件(2)执行realm命令
1. 直接修改配置文件
- 修改nsswitch.conf
#vim /etc/nsswitch.conf
passwd: files winbind sss
shadow: files winbind sss
group: files winbind sss
hosts: files dns myhostname
bootparams: nisplus [NOTFOUND=return] files
ethers: files
netmasks: files
networks: files
protocols: files
rpc: files
services: files sss
netgroup: nisplus sss
publickey: nisplus
automount: files nisplus sss
aliases: files nisplus
- 修改smb.conf
#vim /etc/samba/smb.conf
[global]
workgroup = SUSE
security = ads
idmap config \* : backend = tdb
idmap config \* : range = 100000-200000
idmap config SUSE : backend = rid
idmap config SUSE : base_rid = 0
idmap config SUSE : range = 10000-20000
password server = 100.10.10.225
realm = SUSE.COM.CN
netbios name = stor04
template shell = /bin/bash
template homedir = /home/%U
winbind use default domain = true
winbind offline logon = true
winbind enum groups = yes
winbind enum users = yes
winbind separator = /
#workgroup = SAMBA
#security = user
#passdb backend = tdbsam
#printing = cups
#printcap name = cups
#load printers = yes
#cups options = raw
#map to guest = bad user
#guest account = guest
[mn]
path = /tmp
writable = yes
guest ok = No
browseable = Yes
- 修改krb5.conf
# vim /etc/krb5.conf
includedir /etc/krb5.conf.d/
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
default_realm = SUSE.COM.CN
dns_lookup_realm = true
dns_lookup_kdc = true
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
[realms]
SUSE.COM.CN = {
kdc = 100.10.10.225:88
admin_server = 100.10.10.225:749
default_domain = SUSE.COM.CN
}
[domain_realm]
.suse.com.cn = SUSE.COM.CN
suse.com.cn = SUSE.COM.CN
[appdefaults]
pam = {
debug = false
ticket_lifetime = 36000
renew_lifetime = 36000
forwardable = true
krb4_convert = false
}
- 加入AD域
#net ads join -U administrator
Enter administrator's password:
Using short domain name -- SUSE
Joined 'STOR04' to dns domain 'SUSE.COM.CN'
No DNS domain configured for stor04. Unable to perform DNS Update.
DNS update failed: NT_STATUS_INVALID_PARAMETER
可忽略该DNS错误
- 启动winbind
#systemctl restart winbind
2. 执行realm命令
- 加入AD域suse.com.cn
#realm join --client-software=winbind suse.com.cn
使用上一命令, realm实用程序自动:
①为suse.com.cn域中的成员创建/etc/samba/smb.conf文件
②将用于查找用户和组的winbind模块添加到/etc/nsswitch.conf文件
③配置/etc/krb5.conf文件中的Kerberos客户端以获取AD成员身份
④更新/etc/pam.d/目录中的可插入验证模块(PAM)配置文件
⑤启动winbind服务并在系统引导时启动该服务
有关realm实用程序的更多详细信息,请参阅realm(8)手册页以及“Red Hat Windows集成指南”中的相应部分。
- 修改smb配置文件
在/etc/samba/smb.conf文件中设置备份ID映射后端或自定义ID映射设置。可参考方法一的相应部分。有关RID的信息参见附录
验证 Samba是否被正确加入为域
在Linux作为域成员加入环境之后,您可以运行不同的测试来验证连接是否成功。
1. 验证操作系统是否可以检索域用户帐户和组
使用getent实用程序验证操作系统是否可以检索域中的用户和组。例如:
- 获取AD服务器上的所有用户
# getent passwd
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
guest:x:1001:1001::/home/guest:/sbin/nologin
nasadmin:x:1002:1002::/home/nasadmin:/sbin/nologin
administrator:\*:10500:10513::/home/SUSE/administrator:/bin/false
guest:\*:10501:10513::/home/SUSE/guest:/bin/false
defaultaccount:\*:10503:10513::/home/SUSE/defaultaccount:/bin/false
krbtgt:\*:10502:10513::/home/SUSE/krbtgt:/bin/false
zdx:\*:11104:10513::/home/SUSE/zdx:/bin/false
lxx:\*:11105:10513::/home/SUSE/lxx:/bin/false
xyh:\*:11106:10513::/home/SUSE/xyh:/bin/false
hash:\*:11107:10513::/home/SUSE/hash:/bin/false
raid:\*:11115:10513::/home/SUSE/raid:/bin/false
ec:\*:11116:10513::/home/SUSE/ec:/bin/false
dfs:\*:11117:10513::/home/SUSE/dfs:/bin/false
- 查询AD域中的administrator帐户:
# getent passwd "SUSE/administrator"
administrator:\*:10500:10513::/home/SUSE/administrator:/bin/false
- 查询AD域中Domain Users组的成员:
# getent group "SUSE/Domain Users"
domain users:x:10513:
如果该命令正常工作,请在设置文件和目录权限时验证是否可以使用域用户和组。 例如,要将/srv/samba/example.txt文件的所有者设置为administrator,并将该组的所有者设置为Domain Admins:
# chown administrator:"Domain Admins" /srv/samba/example.txt
2. 验证AD域用户是否可以获得Kerberos凭据
在AD环境中,用户可以从DC获取Kerberos凭据。 例如,要验证administrator用户是否可以获取Kerberos凭据。
①获取administrator@SUSE.COM.CN主体的凭据:
# kinit administrator@SUSE.COM.CN
②显示缓存的Kerberos凭据:
# klist
Ticket cache: KEYRING:persistent:0:0
Default principal: administrator@SUSE.COM.CN
Valid starting Expires Service principal
11.09.2017 14:46:21 12.09.2017 00:46:21
krbtgt/SUSE.COM.CN@SUSE.COM.CN
renew until 18.09.2017 14:46:19
3. 列出可用的域
要列出通过winbindd服务可用的所有域, 请输入:
# wbinfo --all-domains
BUILTIN
STOR04
SUSE
验证是否可将AD域用户作为smb用户
修改smb配置文件,将共享设置为需要用户名和密码才能访问,将valid users设置为AD服务器上的用户:
#vim /etc/samba/smb.conf
[mn]
path = /tmp
writable = yes
guest ok = No
browseable = Yes
valid users = zdx
#systemctl restart smb
在windows 主机使用域用户zdx可访问访问SMB共享。
退出AD域
根据加入AD域的方式不同,有两种退出AD域的方式:
#net ads leave -U administrator
或者
#realm leave -U administrator
附录
rid ID映射后端
Samba可以使用Windows SID的相对标识符(RID)在CentOS Linux 上生成 ID。
rid ID映射后端基于AD和NT4域的算法映射方案实现只读API来计算帐户和组信息。 配置后端时,必须在idmap config DOMAIN:range参数中设置最低和最高RID。 Samba不会映射比此参数中设置的RID更低或更高的用户或组。
注意
作为只读后端,rid不能分配新的ID,例如BUILTIN组。因此,请勿将此后端用于*默认域。
使用 rid 后端的优点和缺点
优点
- 所有在配置范围内具有RID的域用户和组都可自动在域成员上使用。
- 您不需要手动分配ID,主目录和登录shell。
缺点
- 所有域用户都分配了相同的登录shell和主目录。 但是,您可以使用变量。
- 如果所有Samba域成员都使用带有相同ID范围设置的rid后端,则用户和组ID在Samba域成员中仅相同。
- 不能将单个用户或组排除在域成员上可用。仅排除配置范围之外的用户和组。
- 根据winbindd服务用于计算ID的公式,如果不同域中的对象具有相同的RID,则可能会在多域环境中出现重复ID。 ·
配置rid后端
配置Samba域成员以使用rid ID映射后端:
- 编辑/etc/samba/smb.conf文件中的[global]部分:
a. 如果默认域(*)不存在,请添加ID映射配置。 例如:
idmap config * : backend = tdb
idmap config * : range = 10000-999999
b. 为域启用rid ID映射后端:
idmap config DOMAIN : backend = rid
c. 设置一个足够大的范围,以包含将来分配的所有RID。 例如:
idmap config DOMAIN : range = 2000000-2999999
Samba 忽略此域中的RID不在范围内的用户和组。
注意
该范围不得与此服务器上的任何其它域配置重叠。
d. 设置将分配给所有映射用户的shell和主目录路径。 例如:
template shell = /bin/bash template homedir = /home/%U
有关变量替换的详细信息,请参见smb.conf(5)手册页中的VARIABLE SUBSTITUTIONS部分。
- 验证/etc/samba/smb.conf文件:
#testparm
- 重载Samba配置:
#smbcontrol all reload-config
- 确认设置按预期工作。 请参阅“验证操作系统是否可以检索域用户帐户和组”一节。
rid的获取和计算
RID是SID的最后一部分。 例如,如果用户的SID是S-1-5-21- 5421822485-1151247151-421485315-30014,那么30014是相应的RID。
获取AD域中用户和组的SID
在windows AD域控制器上执行以下的命令。
- 获取用户的SID:
PS C:\Users\Administrator> wmic useraccount get name,sid
Name SID
Administrator S-1-5-21-3995169811-2334568557-3193790263-500
Guest S-1-5-21-3995169811-2334568557-3193790263-501
krbtgt S-1-5-21-3995169811-2334568557-3193790263-502
DefaultAccount S-1-5-21-3995169811-2334568557-3193790263-503
zdx S-1-5-21-3995169811-2334568557-3193790263-1104
lxx S-1-5-21-3995169811-2334568557-3193790263-1105
xyh S-1-5-21-3995169811-2334568557-3193790263-1106
hash S-1-5-21-3995169811-2334568557-3193790263-1107
raid S-1-5-21-3995169811-2334568557-3193790263-1115
ec S-1-5-21-3995169811-2334568557-3193790263-1116
dfs S-1-5-21-3995169811-2334568557-3193790263-1117
- 获取组的SID:
PS C:\Users\Administrator> wmic group get name,sid
Name SID
Cert Publishers S-1-5-21-3995169811-2334568557-3193790263-517
RAS and IAS Servers S-1-5-21-3995169811-2334568557-3193790263-553
Allowed RODC Password Replication Group S-1-5-21-3995169811-2334568557-3193790263-571
Denied RODC Password Replication Group S-1-5-21-3995169811-2334568557-3193790263-572
DnsAdmins S-1-5-21-3995169811-2334568557-3193790263-1101
LM-Local S-1-5-21-3995169811-2334568557-3193790263-1109
Cert Publishers S-1-5-21-3995169811-2334568557-3193790263-517
RAS and IAS Servers S-1-5-21-3995169811-2334568557-3193790263-553
Allowed RODC Password Replication Group S-1-5-21-3995169811-2334568557-3193790263-571
Denied RODC Password Replication Group S-1-5-21-3995169811-2334568557-3193790263-572
DnsAdmins S-1-5-21-3995169811-2334568557-3193790263-1101
LM-Local S-1-5-21-3995169811-2334568557-3193790263-1109
Cloneable Domain Controllers S-1-5-21-3995169811-2334568557-3193790263-522
计算本地ID
给定RID可通过以下公式计算对应的本地ID:
本地ID = RID - BASE_RID + LOW_RANGE_ID
给定本地ID可通过以下公式计算对应的RID:
RID = 本地ID + BASE_RID - LOW_RANGE_ID
rid: https://www.samba.org/samba/docs/current/man-html/idmap_rid.8.html