Debian Jessie(8.x) 加入微软AD域实作

以前Linux虚拟机总是各自独立的管理账户,用起来麻烦至极。现在既然有了域也有了时间折腾,不如把手上的 Linux 服务器加进域里,使用 AD 域来统一认证。

参考了网上的一些资料,也踩了一些坑(还好有快照),终于配置成功了。在这里记上一笔。

我手上的 Linux 服务器都是 Debian Jessie 版本。如果你要参照此教程,请善用快照,域那里不要紧,删了计算机账户就行,而 Linux 机器可能出现没有任何用户能够登录的情况。

零、目标

  • 将 Debian Jessie 系统的机器加入微软的 AD 域中。
  • 实现 Debian 机器使用 AD 认证账号。
  • 共享 AD 域中用户的用户组信息,并能用于权限控制。

一、安装必要的依赖包

在 Shell 中以root权限执行以下命令:

aptitude install krb5-user krb5-config libpam-krb5 winbind libpam-winbind libnss-winbind

这将会安装加入域、用域认证所需的各种软件包。

如果安装时就要求输入域和服务器,则域以全大写输入,服务器视情况输入。

二、修改配置文件

在加入域之前,还需要对配置文件进行适当的修改。这里假设你要加入的域为domain.com

1.  修改 krb5 相关配置并测试

krb5用于支持微软的 Kerberos 身份认证。

编辑/etc/krb5.conf文件,在其中对应的字段修改/加入以下内容(按实际情况修改域名)

[libdefaults]
dns_lookup_realm = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
rdns = false
default_realm = DOMAIN.COM
dns_lookup_kdc = false

[realms]
DOMAIN.COM = {
kdc = dc.domain.com
admin_server = dc.domain.com
}

[domain_realm]
.domain.com = DOMAIN.COM
domain.com = DOMAIN.COM

注意:文本框中大写部分必须保持全大写,否则将会出现不可预料的后果!

使用kinitklist来验证是否可以成功获得 ticket :

root@Proxmox:~# kinit [email protected]
Password for [email protected]:
root@Proxmox:~# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: [email protected]

Valid starting     Expires            Service principal
mm/dd/yy hh:mm:ss  mm/dd/yy hh:mm:ss  krbtgt/[email protected]
    renew until mm/dd/yy hh:mm:ss
root@Proxmox:~#

注意:文本框中大写部分还是必须保持全大写。

如果正常,输入密码后kinit不应该返回任何结果,然后输入klist可以查看 ticket 信息。

如果这一步有问题,还是先去 debug 吧,如果再继续,多半最后会导致没有任何用户能登录……(这种情况建议进入单用户模式撤销操作)

2. 修改 Samba 配置并创建家目录

编辑/etc/samba/smb.conf文件,在其中对应的字段修改/加入以下内容(按实际情况修改域名):

workgroup = DOMAIN
realm = DOMAIN.COM
security = ads
idmap config * : range = 16777216-33554431
template homedir = /home/DOMAIN/%U
template shell = /bin/bash
kerberos method = secrets only
winbind use default domain = true
winbind offline logon = true

注意:大写部分保持,你懂的。

然后,运行 mkdir /home/DOMAIN 命令建立所有域用户登录后的家目录根目录。注意,这里的目录需要与上文中 smb.conf 里 template homedir 的字段一致。

三、加入域并配置认证

1.  大胆加域

该加域了,是不是很一颗赛艇?

在 Shell 中运行以下加入域,并进行加域测试,其中 Administrator 可以为任意有加域权限的域用户:

net ads join DOMAIN.COM -U Administrator
net ads testjoin

大写,你懂……

正常情况下,回应应该如图所示。

root@Proxmox:~# net ads join DOMAIN.COM -U Administrator
Enter Administrator's password:
Using short domain name -- DOMAIN
Joined 'PROXMOX' to dns domain 'domain.com'
root@Proxmox:~# net ads testjoin
Join is OK
root@Proxmox:~#

重新启动服务:service smbd restart && service winbind restart

2. 配置认证

PAM 可插拔认证模块,是一个看上去很叼,似乎也确凿很叼的东西。

编辑/etc/pam.d/common-account文件,在头部加入以下内容:

account sufficient      pam_winbind.so
account required        pam_unix.so

编辑/etc/pam.d/common-auth文件,在头部加入以下内容:

auth sufficient         pam_winbind.so
auth required           pam_deny.so

编辑/etc/pam.d/common-session文件,在头部加入以下内容:

session required        pam_unix.so
session required        pam_mkhomedir.so umask=0022 skel=/etc/skel

nssswitch 用于兼容一些程序。

编辑/etc/nsswitch.conf文件,将相应字段修改为以下内容:

passwd:         compat winbind
group:          compat winbind
shadow:         compat winbind

SSH 登录也需要配置,首先在 shell 中执行以下命令来建立白名单。

mkdir -p /etc/sshd
vim /etc/sshd/sshd.allow

在其中输入允许登录的 AD 域用户组即可,一行一个。

然后在/etc/pam.d/sshd文件头部加入以下内容:

auth required pam_listfile.so item=group sense=allow file=/etc/sshd/sshd.allow onerr=succeed

最后配置一下有权限执行sudo的用户组。编辑/etc/sudoers文件,在其中加入一行:

%sudoers   ALL=(ALL:ALL) ALL

其中sudoers是我专门在 AD 域中建立的一个用户组,用以给用户执行sudo的权限(其实我就是把Domain Admins甩进去了)。

你也可以加入:

%sudoers   ALL=(ALL) NOPASSWD: ALL

让用户无需输入密码即可使用sudo

至此,配置已经完成。你既可以用su Administrator来切换到域用户,也可以使用域账户本地登录、登录 SSH 了。

四、更复杂的访问控制

然而目前的情况,会不会让域中任意用户都能登录到服务器呢?不知道,没试过,其实我这是个新域没有非管理员账户也懒得试。不如直接加个访问控制,白名单制。

1. 修改 access.conf

修改/etc/security/access.conf文件,加入以下内容:

+ : sudoers : ALL
- : ALL : ALL

注意:这将会禁止除了sudoers用户组以外所有用户登录!在下一步之前,请确认你已经配置好了用户组的相关认证,并将sudoers修改为你自己的管理员组。

2. 在各个登录点启用这个模块。

access 模块默认不启用,所以需要手动配置。

/etc/pam.d目录里,在对应的配置文件中,取消下列一行的注释,如果不存在则加入:

account  required     pam_access.so

我启用的配置文件为sshdlogin

至此,一切都应该正常了。再也不用为 Windows 主机和 Linux 主机账户不统一犯强迫症了……

参考资料

http://www.installvirtual.com/join-debian-8-to-active-directory/

https://wiki.debian.org/AuthenticatingLinuxWithActiveDirectory

https://linux.die.net/man/5/access.conf

评论已关闭