CentOS7加入AD域(sssd)
作者:独笔孤行
官网: http://anyamaze.com
公众号:云实战
前言
AD域(Active Directory)是Windows服务器的活动目录,在目录中可以收录公司的电脑账号,用户账号,组等信息,以提供更好的安全性和更便捷的管理能力。域的最大好处之一就是其安全性 – 所有账号不会在本地计算机认证,而是连接到域控制器寻求认证。
CentOS7加入AD域的方法很多,常用的有winbind和realm两种。winbind是一种成熟的方案,兼容多种操作系统版本,但配置步骤繁琐复杂,且易出错。realm是一种非常简便的配置方案,在新版本系统中使用较多,在centos6和更低版本系统使用较少。前边介绍了CentOS7通过winbind方式加入AD域,对于新手来说配置相对复杂,修改参数较多,容易出错,本次讲解通过sssd方式加入AD域,步骤会简化很多。
一、环境信息
AD域信息:
域名:anyamaze.com
主机名:myad
IP : 192.168.111.137
系统版本:windows server 2016
linux客户端信息:
主机名:adnode1.anyamaze.com
IP:192.168.111.141
二、安装过程
(一)AD域服务器部署
1.部署windows Server2016操作系统
2.选择“服务器管理器—管理—添加角色和功能—基于角色或基于功能的安装—Active Directory域服务”根据提示依次安装
3.修改主机名,将服务器提示为域控服务器
(二)CentOS7加入域配置
1.安装相关包
yum install openldap-clients realmd sssd sssd-ldap oddjob-mkhomedir oddjob samba-common-tools -y
3.设置主机名
hostnamectl set-hostname adnode1.anyamaze.com
4.配置域名解析
编辑/etc/hosts文件,追加如下内容:
192.168.111.137 myad myad.anyamaze.com
192.168.111.141 adnode1 adnode1.anyamaze.com
5.配置DNS解析
配置网卡DNS解析,解析地址为AD域服务器IP,如需其它DNS,可放在AD域服务器IP之后
vim /etc/sysconfig/network-scripts/ifcfg-enp0s3
...
DNS1=192.168.111.137
#重启网卡,使配置生效
systemctl restart network
检查/etc/resolv.conf文件内容
vim /etc/resolv.conf
search anyamaze.com
nameserver 192.168.111.137
需确保resolve.conf文件DNS解析内容为AD域服务器,如果需要其它DNS,可向后追加。
检测解析是否生效
ping anyamaze.com
nslookup anyamaze.com
注意:确保ping的返回ip为AD域服务器ip,确保nslookup解析域名的服务器IP是AD域服务器IP。如果ping不通域名或解析的地址不是AD域服务器IP,需要检查DNS是否正确,检查AD域服务器防火墙是否关闭。
6.加入域
realm join anyamaze.com
输入administrator管理员密码后,认证通过可加域成功
检查域信息
realm list
7.查看域用户信息
id user1@anyamaze.com
说明:查看AD域用户user1的id属性信息,user1用户必须提前在anyamaze域中创建好,进一步确定是否加域成功。
8.如果写全名比较麻烦,可修改/etc/sssd/sssd.conf中的use_fully_qualified_names和fallback_homedir参数值
vim /etc/sssd/sssd.conf
...
use_fully_qualified_names = False
fallback_homedir = /home/%u
#修改完成后,重启sssd服务使配置生效
systemctl restart sssd
#查看是否生效
id user1
修改完成后,内容如下。
(三)AD域用户ID映射
Linux 和 Windows 系统为用户和组使用不同的标识符:
- Linux 使用用户 ID (UID) 和组 ID (GID)。Linux UID 和 GID 符合 POSIX 标准。
- Windows 使用安全 ID(SID)。
注意:当所有客户端系统都使用 SSSD 将 SID 映射到 Linux ID 时,映射是一致的。如果有些客户端使用不同的软件,要想达到映射Linux ID一致,必须满足以下条件之一:
- 确定所有客户端都使用相同的映射算法。
- 使用显式 POSIX 属性。
3.1.为 AD 用户自动生成新的 UID 和 GID
SSSD 可以使用 AD 用户的 SID 在名为 ID 映射的进程中计算生成 POSIX ID。ID 映射会在 AD 中的 SID 和 Linux 中的 ID 之间创建一个映射。
- 当 SSSD 检测到新的 AD 域时,它会为新域分配一系列可用 ID。因此,每个 AD 域在每个 SSSD 客户端机器上都有相同的 ID 范围。
- 当 AD 用户第一次登录 SSSD 客户端机器时,SSSD 在 SSSD 缓存中为用户创建一个条目,包括基于用户的 SID 以及该域的 ID 范围的 UID。
- 因为 AD 用户的 ID 是以一致的方式从同一 SID 生成,所以用户在登录到任何Linux 系统时具有相同的 UID 和 GID。
3.2.使用 AD 中定义的 POSIX 属性
AD 可以创建并存储 POSIX 属性,如 uidNumber
、gidNumber
、unixHomeDirectory
或 loginShell
。
默认情况下,SSSD 会创建新的 UID 和 GID,这将覆盖 AD 中定义的值。要保留 AD 定义的值,必须在 SSSD 中禁用 ID 映射。
1.在AD域中,设置用户uidNumber和gidNumber,设置用户组gidNumber
注意:需要在Active Directory用户和计算机查看中选择高级功能,否则无法设置用户uid。
在用户中设置uidNumber和gidNumber,在用户组中设置gidNumber。
设置用户user1的uidNumber为10001,gidNumber为90001,用户user1的主组group1的gidNumber为90001
注意:windows server 2016环境,用户有uidNumber和gidNumber两个属性,gidNumber参数值一般设置为主组gidNumber,设置时注意信息填写正确,且不能冲突,因为windows server2016不会对id值进行校验。windows server 2008环境用户只有uidNumber属性,且支持对id值进行校验。
2.退出域,清理域信息缓存
realm leave
rm -f /var/lib/sss/db/*
3.禁用ID map,重新加入域
realm join anyamaze.com --automatic-id-mapping=no
realm list
4.检查映射方式
cat /etc/sssd/sssd.conf
说明:需确保ldap_id_mapping = False,说明关闭ID映射,使用显示POSIX属性
9.检查用户id信息
id user1@anyamaze.com
说明:检查看到的ID值是否为AD域中设置的uidNumber、gidNumber信息
如果返回结果是:no such user,说明用户名称错误,或者没有在AD域中配置用户的POSIX属性,或POSIX属性配置不全
如果返回结果依然是之前自动生成的ID,需要检查ldap_id_mapping为False,且需要保证入域前/var/lib/sss/db/目录为空
(四) SSSD 自动创建用户私有组
为每个用户配置uidNumber和gidNumber,为用户组配置gidNumber,设置3个属性太麻烦,写入的数值还不能自动校验,怎么呢?SSSD可自动为每个用户创建用户私有组,使用该功能,只需要设置用户uidNumber即可,其它属性会自动生成。
直接集成到 AD 中的 SSSD 客户端可为每个 AD 用户自动创建一个用户私人组,确保其 GID 与用户的 UID 匹配,除非已经获取了 GID 号。为避免冲突,请确保服务器上不存在 GID 与用户 UID 相同的组。
GID 不存储在 AD 中。这样可确保 AD 用户从组功能中受益,而 LDAP 数据库不包含不必要的空组。
- 编辑
/etc/sssd/sssd.conf
文件,在[domain/anyamaze]
部分添加:
auto_private_groups = true
- 重启 sssd 服务,删除 sssd 数据库:
systemctl stop sssd; rm -f /var/lib/sss/db/* ; systemctl start sssd
3.执行此步骤后,每个 AD 用户都有一个与 UID
相同的 GID
:
# id user2@anyamaze.com
uid=10002(user2@anyamaze.com) gid=10002(user2@anyamaze.com) groups=10002(user2@anyamaze.com)
# id user3@anyamaze.com
uid=10003(user3@anyamaze.com) gid=10003(user3@anyamaze.com) groups=10003(user3@anyamaze.com)
(五)常见报错:
报错内容:
[root@adnode1 ~]# id user1
id: user1: no such user
[root@adnode1 ~]# id user1@anyamaze.com
id: user1@anyamaze.com: no such user
原因:1.通过realm list检查是否加入域成功;
2.AD域中没有user1用户
3.以no-mapping方式加域,但AD域用户没有配置uid或gid或主组没有配置gid,需要去AD域上进行配置
参考连接:
https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/7/html/windows_integration_guide/sssd-ad
https://www.server-world.info/en/