CentOS7加入AD域(sssd)

Posted anyamaze

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 属性,如 uidNumbergidNumberunixHomeDirectoryloginShell

默认情况下,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 数据库不包含不必要的空组。

  1. 编辑 /etc/sssd/sssd.conf 文件,在 [domain/anyamaze] 部分添加:
auto_private_groups = true
  1. 重启 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/

更多咨询,关注我们

以上是关于CentOS7加入AD域(sssd)的主要内容,如果未能解决你的问题,请参考以下文章

Samba 系列(十五):用 SSSD 和 Realm 集成 Ubuntu 到 Samba4 AD DC

CentOS7加入AD域(winbind)

CentOS7加入windows 2008 AD域

centos7加入ad域

CentOS7添加入windows2008的AD域

为什么要把Linux机器加入到Windows AD/域控制器(Linux机器为什么要入域)?