如何让 Linux 机器加入 Windows 的 AD 域

赛博老王 的头像

·

·

·

33,161 次阅读

对于帐户统一管理系统或软件来说,在 Linux 下你可能知道 NIS、OpenLDAP、samba 或者是 RedHat、IBM 的产品,在 Windows 下当然就是最出名的 活动目录 ( Active Directory ) (AD)了,这里就来探讨一下如何让 Linux 的计算机加入 AD 域。

首先,先简单介绍一下 AD 域。自 Windows 2000 以来,AD 一直是 Windows 的身份验证和目录服务,AD 基于 LDAP 实现其功能,其使用 DNS 进行主机名的解析,使用 Kerberos V5 进行用户身份验证,使用 LDAP V3 进行统一的帐户管理。

目标:在 AD 域中,将 Linux 服务器加入 AD,以使 Domain Admins 用户组成员可以登录操作 Linux 服务器,不需要在 Linux 服务器中单独创建帐户。

环境:一台 Windows Server 2012 R2 操作系统的服务器,安装有 AD 并作为 域控制器 ( Domain Controller ) (DC),同时也作为 DNS 服务器和时间服务器;一台 RedHat Enterprise Linux 6.x 的服务器,请自行配置好网络及 YUM 源。有关 AD 域服务器的搭建,由于比较简单,请自行查阅资料完成,这里不再详述。

这里以 Windows 服务器地址为 192.168.2.122,域名为 contoso.com,主机名为 ad.contoso.com;Linux 服务器地址为 192.168.2.150,主机名为 lemon20.contoso.com。

1、安装所需软件:

# yum -y install samba samba-client samba-common samba-winbind samba-winbind-clients krb5-workstation ntpdate

2、设置服务自启动并启动服务:

# chkconfig smb on
# chkconfig winbind on
# service smb start
# service winbind start

3、修改 /etc/hosts 文件,添加主机对应记录:

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.2.150 lemon20.contoso.com lemon20

4、设置 DNS 地址并与 AD 服务器同步时间:

# echo "nameserver 192.168.2.122" >> /etc/resolv.conf
# ntpdate ad.contoso.com

5、设置 Kerberos 票据(可选):

销毁已经存在的所有票据:

# kdestroy

查看当前是否还存在票据:

# klist                           
klist: No credentials cache found (ticket cache FILE:/tmp/krb5cc_0)  

生成新的票据,注意域名大写。

# kinit [email protected]
# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: [email protected]
Valid starting     Expires            Service principal
08/02/16 22:35:26  08/03/16 08:35:29  krbtgt/[email protected]
renew until 08/09/16 22:35:26

6、以命令方式设置 samba 与 Kerberos,并加入 AD 域:

#authconfig --enablewinbind  --enablewins --enablewinbindauth --smbsecurity ads --smbworkgroup=CONTOSO --smbrealm CONTOSO.COM --smbservers=ad.contoso.com --enablekrb5 --krb5realm=CONTOSO.COM --krb5kdc=ad.contoso.com --krb5adminserver=ad.contoso.com --enablekrb5kdcdns --enablekrb5realmdns --enablewinbindoffline --winbindtemplateshell=/bin/bash --winbindjoin=administrator --update --enablelocauthorize --enablemkhomedir --enablewinbindusedefaultdomain

注意命令中的大小写,此步骤也可以使用 authconfig-tui 完成。

7、增加 sudo 权限(可选):

# visudo

加入下列设置:

%MYDOMAIN\domain admins ALL=(ALL)  NOPASSWD: ALL

8、确认是否正确加入 AD 域:

查看 AD 的相关信息

# net ads info  

查看 MYDOMAINUSERID 的使用者帐户

# wbinfo -u 

补充:

如果启用 selinux 的话,需要安装 oddjobmkhomedir 并启动其服务,这样才能确保系统对创建的家目录设置合适的 SELinux 安全上下文。

18 条回复

  1. 来自四川成都的 Chrome 52.0|GNU/Linux 用户 的头像
    来自四川成都的 Chrome 52.0|GNU/Linux 用户

    ntpdate 同步时间不推荐,一般可以用 ntpd 同步。

    来自成都
  2. W_Lu [Firefox 42.0|Windows 7] 的头像
    W_Lu [Firefox 42.0|Windows 7]

    有用!不过linux加入windows域管理感觉有点别扭!

    来自佛山
  3. 拿铁不加糖 [Chrome 52.0|Windows 10] 的头像
    拿铁不加糖 [Chrome 52.0|Windows 10]

    ntpd是时间服务器的服务进程,ntpdate是连接时间服务器进行时间同步的工具。

    来自北京
  4. 拿铁不加糖 [Chrome 52.0|Windows 10] 的头像
    拿铁不加糖 [Chrome 52.0|Windows 10]

    一点都不别扭,这样用的很多,尤其是高性能计算或图形仿真领域。

    来自北京
  5. 来自四川成都的 Chrome 52.0|GNU/Linux 用户 的头像
    来自四川成都的 Chrome 52.0|GNU/Linux 用户

    Disclaimer: The functionality of this program is now available in the ntpd program. See the -q command line option in the ntpd – Network Time Protocol (NTP) daemon page. After a suitable period of mourning, the ntpdate program is to be retired from this distribution

    来自成都
  6. 来自四川成都的 Chrome 52.0|GNU/Linux 用户 的头像
    来自四川成都的 Chrome 52.0|GNU/Linux 用户

    这个有联系吗?难道不加入域,就不能进行高性能计算?我甚至觉得对于像 Hyper-V 群集或者其他需要统一管理的 Windows 主机来说,有条件的话,单独加入到一个专门的域中,与公司域独立开,以免错误的配置,导致业务停滞。

    来自成都
  7. linux [Chrome 52.0|Mac 10.11] 的头像
    linux [Chrome 52.0|Mac 10.11]

    不是,他的意思是,通过部署主从 ntpd 服务器来自动、渐进地保持时间同步——这比用ntpdate 定时执行要好,会避免时间跳跃。

    来自北京
  8. 拿铁不加糖 [Chrome 52.0|Windows 10] 的头像
    拿铁不加糖 [Chrome 52.0|Windows 10]

    加域的目的是为了在每台机器上都有相同的帐户,当然不是名字相同就可以了。如果你是10台以内的机器集群但是你超过这个数量的机器,你手动去维护每台机器的帐户和密码,你就知道有多麻烦了!

    来自北京
  9. 拿铁不加糖 [Chrome 52.0|Windows 10] 的头像
    拿铁不加糖 [Chrome 52.0|Windows 10]

    是这样子啊!那就把时间服务器地址加入ntpd配置文件就ok了!

    来自北京
  10. 来自四川成都的 Chrome 52.0|GNU/Linux 用户 的头像
    来自四川成都的 Chrome 52.0|GNU/Linux 用户

    linux  也有自己的解决方案,公钥,OpenLDAP。

    来自成都
  11. 拿铁不加糖 [Chrome 52.0|Windows 10] 的头像
    拿铁不加糖 [Chrome 52.0|Windows 10]

    是的,Linux下的解决方案很多,例如NIS、SAMBA、OpenLDAP、SAMBA+OpenLDAP等的,如果是网络环境中有大量的Windows和Linux服务器,使用AD域是最合适的,因为方便简单强大。

    来自北京
  12. 来自四川成都的 Chrome 52.0|GNU/Linux 用户 的头像
    来自四川成都的 Chrome 52.0|GNU/Linux 用户

    一个统一验证,真没看出非得用 AD。如果真的有大量服务器的话,解决方案可就不是这么简单。

    最后无论对于 Windows 还是 Linux, 其自身对于日常管理来说,都有自己一套方案,一般没有必要交叉进行管理。

    来自成都
  13. 拿铁不加糖 [Chrome 52.0|Windows 10] 的头像
    拿铁不加糖 [Chrome 52.0|Windows 10]

    AD解决方案简单?如果是大量服务器你会用什么统一验证方案?为什么没有必要进行交叉管理?

    来自北京
  14. 来自四川成都的 Chrome 52.0|GNU/Linux 用户 的头像
    来自四川成都的 Chrome 52.0|GNU/Linux 用户

    还不简单?微软现阶段针对 Linux 管理,除了一个统一验证外,还有什么?PowerShell(我知道它已经开源了) 基于 CIM 的 cmdlet 提供的功能,能与历史悠久,用户群庞大,又有社区/商业支持的各类 Linux 大小软件相抗衡?大量的 Linux 主机管理完全可以自成一体,难道 Amazon,Google,Apple (这位用的还是 UNIX)它们有用 Windows 进行管理?

    来自成都
  15. 来自四川成都的 Chrome 52.0|GNU/Linux 用户 的头像
    来自四川成都的 Chrome 52.0|GNU/Linux 用户

    这里多说一句,像 PowerShell 糟糕的技术支持,当初我在 Microsoft Connect 看到关于 PowerShell 的 bug 报告,有些是微软确认了的,但修复却要等到下一个版本发布。而且 PowerShell 甚至在 TechNet 中文(我说的是面向中国内地的,不是页面语言本地化)技术论坛上没有一个专门的板块。当然,有也说明不了什么。还有某些与基础系统功能相关的 cmdlet 功能依然薄弱,比如  get-command -name ‘*-service’ -type cmdlet (版本 $host.version.tostring() -> ‘5.1.14393.0’), 列出的 cmdlet 能与 sc 原生命令提供功能想必吗?虽然现在也开源

    来自成都
  16. 来自四川成都的 Chrome 52.0|GNU/Linux 用户 的头像
    来自四川成都的 Chrome 52.0|GNU/Linux 用户

    ,但是前途如何真不好说。
    微软说要取消 netsh 里 tcp/ip 的部分,结果到 Windows 10 Client RS1 Release 依然存在,而且明明 netsh 提供的功能如此方便好用。基于 CIM/WMI 的 wmic 也是这样,到现在还顽强的存在着。

    来自成都
  17. linux [Chrome 52.0|Mac 10.11] 的头像
    linux [Chrome 52.0|Mac 10.11]

    PowerShell 开源了或许会改善一些吧。

    来自北京
  18. 来自河南郑州的 Firefox 68.0|Windows 10 用户 的头像
    来自河南郑州的 Firefox 68.0|Windows 10 用户

    [root@file etc]# authconfig –enablewinbind –enablewinbindauth –enablekrb5 –krb5realm=XYZ.LOCAL –krb5kdc=dc.xyz.local –krb5adminserver=dc.xyz.local –disablekrb5realmdns –enablekrb5realmdns –smbsecurity=ads –smbrealm=XYZ.LOCAL –smbservers=dc.xyz.local –smbworkgroup=XYZ –winbindtemplatehomedir=/home/%D/%U –winbindtemplateshell=/bin/false –winbindjoin=administrator –enablewins –enablepreferdns –enablelocauthorize –enablewinbindoffline  –enablemkhomedir –enablewinbindusedefaultdo

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注