将Linux添加到Windows AD域的步骤-领域和Adcli(CentOS/RHEL 7)
微软有它的身份管理套件来围绕活动目录构建,而Red Hat有它的身份管理目录服务器。在本文中,我将分享"将Linux添加到Windows Active Directory域的步骤"。
实验室环境概述
为了在本文中演示如何在CentOS 7上将Linux添加到Windows AD域,我们将使用在我的Linux服务器虚拟化环境中安装的Oracle VirtualBox中运行的两个虚拟机。
我还写了另一篇文章,介绍了使用Samba winbind在RHEL/CentOS 8安装程序上将Linux添加到Windows AD域的步骤。
我们有一个IP地址为192.168.0.105的Microsoft Server 2012R2 Active Directory域控制器和IP地址为192.168.0.106的CentOS 7.4主机。在本文中,我将只介绍在客户端将Linux添加到Windows AD域的部分。因此,本文要将Linux添加到Windows AD域,需要预先配置Windows Active Directory
准备将Linux添加到CentOS/RHEL 7上的Windows AD域
重要提示:
在将Linux加入Windows域之前,我们需要确保已经设置了时间服务和DNS服务
确保RHEL机器能够解析Active Directory服务器,以便更新/etc/resolv.conf
在RHEL/CentOS 7客户端主机上。
[root@adcli-client ~]# cat /etc/resolv.conf search theitroad.com nameserver 192.168.0.105
[root@adcli-client ~]# nslookup theitroad.com Server: 192.168.0.105 Address: 192.168.0.105#53 Name: theitroad.com Address: 192.168.0.105 Name: theitroad.com Address: 10.0.2.13
对于最小安装服务器,需要安装"krb5 workstation"包,该包提供"klist"命令。安装"adcli"包和"sssd":
其中:
sssd:
System Security Services守护进程可用于根据需要转移客户端身份验证adcli:
这些是连接和管理AD域的工具
说明:
在RHEL系统上,我们必须具有对RHN的活动订阅,或者可以配置本地脱机存储库,使用该存储库"yum"package manager可以安装提供的rpm及其依赖项。
[root@adcli-client ~]# yum install adcli sssd authconfig realmd krb5-workstation
使用realm将Linux加入Windows域
安装了所有软件包后,我们可以使用'realm'命令将Linux添加到Windows AD域并管理注册。此命令是我们添加的"realmd"包的一部分。
我们可以使用'list'子命令来确保我们当前不是域的一部分:
[root@realm-client ~]# realm list
输出应为空。
现在,我们准备好进行下一步,即将Linux添加到Windows AD域。通过一个简单的环境,我们将知道我们想要加入的域;至少我们确实希望我们知道。在我们的情况下,我们知道这是theitroad.com网站
.
使用"discover"子命令,我们可以验证是否安装了所有必需的包,如以下命令extract所示:
[root@realm-client ~]# realm discover theitroad.com theitroad.COM type: kerberos realm-name: theitroad.COM domain-name: theitroad.COM configured: no server-software: active-directory client-software: sssd required-package: oddjob required-package: oddjob-mkhomedir required-package: sssd required-package: adcli required-package: samba-common-tools theitroad.com type: kerberos realm-name: theitroad.COM domain-name: theitroad.com configured: no
由于这是Kerberos域类型,join子命令将把Linux作为成员服务器连接到windows域,并初始化/etc/krb5.keytab
Kerberoskeytab
文件和/etc/krb5.conf
配置文件。
要将Linux添加到Windows AD域,请使用以下命令将计算机添加到AD域中的默认文件夹:
[root@realm-client ~]# realm join --user=Administrator theitroad.com Password for Administrator:
如果要将其添加到Active Directory中指定的组织单位,则首先需要创建OU,或者至少确保它存在。有了OU,命令将类似于下面的命令,我们将其添加到Linux OU中:
# realm join --computer-ou="OU=Linux" --user=Administrator theitroad.com
这是我们将用于将RHEL服务器添加到路径的方法:
OU=Linux,DC=example,DC=com
使用这两种方法之一,系统将提示我们输入域管理员的密码或者具有将计算机添加到AD域的委派权限的用户的密码。
提示:
该命令可能需要几分钟才能生效,因此在返回shell提示符之前,请给它一些时间。
作为标准用户,我们可以再次使用"realm list"命令列出已加入的域。我们应该注意到,最初的输出可能类似于"领域发现"theitroad.com网站
我们之前运行的命令;但是,仔细检查后,我们将看到我们现在是一个成员服务器,如以下命令中的"configured:kerberos member"所示:
[root@realm-client ~]# realm list theitroad.COM type: kerberos realm-name: theitroad.COM domain-name: theitroad.com configured: kerberos-member server-software: active-directory client-software: sssd required-package: oddjob required-package: oddjob-mkhomedir required-package: sssd required-package: adcli required-package: samba-common-tools login-formats: %[email protected] login-policy: allow-realm-logins
其中:我们可以从得到的信息中看出,我们需要"sssd"包。
使用adcli将Linux添加到Windows AD域
我们不仅仅局限于使用这些域帐户;我们还可以从Linux服务器的命令行管理activedirectory。使用Active Directory中的正确权限,我们可以:
创建用户和组
修改组成员身份
删除用户和组
如果我们是Linux管理员并且主要在Linux上工作,那么将Active Directory用户添加到在Linux上用于委派的组中是有意义的。
例如,我们可以维护一个名为LinuxAdmins的activedirectory组,并通过/etc/sudoers
文件将权限委托给该组。我们维护和控制AD组,而不一定是AD中的DomainAdmins组,这是非常正确的。
列出Active Directory信息
从"adcli"命令开始,我们将看看"info"子命令。这可以显示发现的域和域控制器的详细信息。我们可以作为标准用户运行此命令,如以下命令所示:
[root@adcli-client ~]# adcli info theitroad.com [domain] domain-name = theitroad.com domain-controller = win-f7k3tl1gh98.theitroad.com domain-controller-usable = maybe domain-controllers = win-f7k3tl1gh98.theitroad.com [computer]
使用adcli加入Windows活动目录
我们可以运行"adcli join<domain_name>" 将Linux加入到Windows域
[root@adcli-client ~]# adcli join theitroad.com Password for [email protected]:
有了这个,我们就可以把Linux添加到WindowsAD域了。
创建Active Directory用户
一旦我们将Linux加入到Windows域,就可以创建AD用户。这个命令可能不是最有用的工具之一,因为我们可以创建用户,但不能为新用户启用帐户或者设置密码。这样,该命令就没有其他带有"adcli"的工具有用。
示例命令如下:
[root@adcli-client ~]# adcli create-user deepak --domain=theitroad.com --display-name="Deepak Prasad" Password for [email protected]:
此命令将尝试以管理员身份登录域,并提示输入密码。要以其他用户身份登录,可以使用"-U"或者"-login user"选项。
现在我们将尝试以域用户身份登录,以检查日志记录是否有效。
[root@adcli-client ~]# su - deepak Last login: Fri Jan 31 16:58:35 IST 2019 from 10.0.2.31 on pts/1 [deepak@adcli-client ~]$ logout [root@adcli-client ~]# id deepak uid=1000(deepak) gid=1001(techteam) groups=1001(techteam),1407600513(domain users)
为完整起见,我们介绍了create user命令,但实际上,用户仍需要启用,并在activedirectory中设置密码。
要删除我们刚刚创建的帐户,我们将使用以下命令:
[root@adcli-client ~]# adcli delete-user --domain=theitroad.com deepak Password for [email protected]:
配置Kerberos
join操作创建一个"keytab",机器将使用它进行身份验证。使用"klist-kt"检查时,应以某种形式显示包含客户端主机名的几个条目:
[root@adcli-client ~]# klist -kte Keytab name: FILE:/etc/krb5.keytab KVNO Timestamp Principal ---- ------------------- ----------------------------------------------------- 2 07/05/2019 08:35:35 [email protected] (des-cbc-crc) 2 07/05/2019 08:35:35 [email protected] (des-cbc-md5) 2 07/05/2019 08:35:35 [email protected] (arcfour-hmac) 2 07/05/2019 08:35:35 [email protected] (aes128-cts-hmac-sha1-96) 2 07/05/2019 08:35:35 [email protected] (aes256-cts-hmac-sha1-96) 2 07/05/2019 08:35:35 host/[email protected] (des-cbc-crc) 2 07/05/2019 08:35:35 host/[email protected] (des-cbc-md5) 2 07/05/2019 08:35:35 host/[email protected] (arcfour-hmac) 2 07/05/2019 08:35:36 host/[email protected] (aes128-cts-hmac-sha1-96) 2 07/05/2019 08:35:36 host/[email protected] (aes256-cts-hmac-sha1-96)
当我们使用realm将Linux加入到Windows域时,会创建/etc/krb5.conf
keytab文件,与/etc/krb5.conf
文件一起对域中的RHEL系统进行身份验证。下面是我的示例krb5.conf
[root@adcli-client ~]# cat /etc/krb5.conf # Configuration snippets Jan be placed in this directory as well 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 = theitroad.COM dns_lookup_realm = true dns_lookup_kdc = true ticket_lifetime = 24h renew_lifetime = 7d forwardable = true rdns = false pkinit_anchors = /etc/pki/tls/certs/ca-bundle.crt default_ccache_name = KEYRING:persistent:%{uid} [realms] theitroad.COM = { kdc = kerberos.theitroad.com:88 admin_server = kerberos.theitroad.com:749 default_domain = theitroad.com } [domain_realm] .example.com = theitroad.COM example.com = theitroad.COM [kdc] profile = /var/kerberos/krb5kdc/kdc.conf [appdefaults] pam = { debug = false ticket_lifetime = 36000 renew_lifetime = 36000 forwardable = true hosts = kerberos.theitroad.com max_timeout = 30 timeout_shift = 2 initial_timeout = 1 }
将Active Directory理解为sssd的身份提供程序
系统安全服务守护程序(sssd)提供了一组守护程序来管理对远程目录的访问和身份验证机制,在我们的例子中,是Windows活动目录。sssd服务为我们的系统提供NSS(名称服务交换机)和PAM(可插拔身份验证机制)接口,以及一个模块化的后端系统,以连接到多个不同的帐户源和D-bus接口。
配置NSS和PAM
NSS配置文件确定了可以从中获取名称服务信息的源,以及从一系列类别中获取名称服务信息的顺序。每一类信息都由一个资源数据库名称标识;它可以是名称解析的主机,也可以是数据库查找用户帐户的"passwd"。
使用"authconfig"设置名称服务开关(/etc)/nsswitch.conf文件
)和PAM堆栈(password auth和system auth
):
[root@adcli-client ~]# authconfig --enablesssd --enablesssdauth --update
上面的命令将在/etc中修改和添加必要的条目/nsswitch.conf文件
、/etc/pam.d/password auth
和/etc/pam.d/system auth
文件。
配置SSSD Active Directory
将Linux加入Windows域的最后一步是配置SSSD活动目录本身。"sssd"的配置可以在"/etc/sssd"中找到/sssd.conf文件。
注:
如果/etc/sssd/sssd.conf文件
文件不存在,请手动创建。
[root@adcli-client ~]# cat /etc/sssd/sssd.conf [sssd] services = nss, pam, ssh, autofs config_file_version = 2 domains = theitroad.COM [domain/theitroad.COM] id_provider = ad # Uncomment and configure below , if service discovery is not working # ad_server = server.win.theitroad.com
确保/etc/sssd/sssd.conf文件
属于root:root
权限为600
[root@adcli-client ~]# chown root:root /etc/sssd/sssd.conf [root@adcli-client ~]# chmod 600 /etc/sssd/sssd.conf [root@adcli-client ~]# ls -l /etc/sssd/sssd.conf -rw------- 1 root root 248 May 4 20:09 /etc/sssd/sssd.conf
启动SSSD并确保它在重新引导后启动:
[root@adcli-client ~]# systemctl start sssd [root@adcli-client ~]# systemctl is-active sssd active [root@adcli-client ~]# systemctl enable sssd
尝试获取AD用户的用户信息:
[root@adcli-client ~]# id Administrator uid=1407600500(administrator) gid=1407600513(domain users) groups=1407600513(domain users),1407600572(denied rodc password replication group),1407600520(group policy creator owners),1407600518(schema admins),1407600519(enterprise admins),1407600512(domain admins)
然后尝试以AD用户身份登录:
[root@adcli-client ~]# ssh Administrator@localhost The authenticity of host 'localhost (::1)' can't be established. ECDSA key fingerprint is SHA256:3RCFjBhKJLtOb78Jv+Yx2IPbwRT5P1hOGw9d08RlGzs. ECDSA key fingerprint is MD5:b8:f9:09:06:91:48:de:a1:83:29:56:d5:94:3d:a6:d3. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts. Administrator@localhost's password: -sh-4.2$
因为管理员是windows用户,所以我没有一个合适的shell。
正在退出Active Directory域
将出现需要从active directory域中删除Linux服务器的情况。通常情况下,在将其添加到另一个active directory域之前,会将其从一个active directory域中删除。如果需要这样做,realm
命令会使过程变得简单。
添加选项:--remove
将确保计算机帐户也从域中删除;否则,应单独删除。
[root@realm-client ~]# realm leave theitroad.com --remove Password for Administrator: