将Linux添加到Windows AD域的步骤-领域和Adcli(CentOS/RHEL 7)

时间:2020-01-09 10:37:04  来源:igfitidea点击:

微软有它的身份管理套件来围绕活动目录构建,而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.keytabKerberoskeytab文件和/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.confkeytab文件,与/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: