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

拿铁不加糖 的头像

·

·

·

31,647 次阅读

对于帐户统一管理系统或软件来说,在 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 administrator@CONTOSO.COM
# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: administrator@CONTOSO.COM
Valid starting     Expires            Service principal
08/02/16 22:35:26  08/03/16 08:35:29  krbtgt/CONTOSO.COM@CONTOSO.COM
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

发表回复

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