Ubuntu加入Active Directory

本文所述方法仅在Ubuntu 18.04.1和Debian 9.4上测试过。

Domain Join

首先将主机名设为统一格式,不然之后AD的DNS注册会出问题。(如果你使用了cloud-init,主机名是不能直接修改的,请自行查找资料或卸载cloud-init。)

hostnamectl set-hostname your-hostname.domain.name

/etc/hosts 文件也需要一起修改以防止鉴权出错:

127.0.0.1   your-hostname.domain.name your-hostname localhost
::1         your-hostname.domain.name your-hostname localhost ip6-localhost ip6-loopback

然后安装依赖,并加入域:

apt-get install realmd sssd-tools sssd libnss-sss libpam-sss adcli samba-common-bin packagekit
realm join --verbose -U domain_username domain.name

注:

  • realm 默认的错误提示很反人类,所以建议把–verbose 开关打开
  • 用户名那部分不需要@domain.name
  • 如果机器上已经装有PackageKit,realm 应该会自动安装其它依赖,但是可能装不全,所以建议用我的命令;如果机器上没装PackageKit,realm可能会崩溃
  • Debian上安装sssd的时候可能报启动失败,可以忽略

自动建立新登录用户的家目录

pam-auth-update 工具,勾选Create home directory on login选项(可能没有这个选项,那么需要手动操作)。

或者你想要手动操作的话:

/etc/pam.d/common-session 末尾增加一行:

session optional pam_mkhomedir.so

让OpenSSH支持Kerberos鉴权

/etc/ssh/sshd_config 需要修改以下项:

UseDNS yes

# Kerberos options
KerberosAuthentication yes
KerberosOrLocalPasswd yes
KerberosTicketCleanup yes

# GSSAPI options
GSSAPIAuthentication yes
GSSAPICleanupCredentials yes

AuthenticationMethods gssapi-with-mic publickey keyboard-interactive

然后systemctl restart sshd 生效。

Kerberos设置(如果你有/etc/krb5.conf这个文件的话):

mv /etc/krb5.conf /tmp/krb5.conf
cat /var/lib/sss/pubconf/krb5.include.d/localauth_plugin /tmp/krb5.conf > /etc/krb5.conf
rm /tmp/krb5.conf
systemctl restart sssd

解释一下吧。Debian/Ubuntu/OpenSUSE下面OpenSSH不能自动支持Kerberos鉴权是由很多个原因共同导致的。

首先,Debian/Ubuntu打包sssd的时候没有默认启用auth_to_local 设置(sssd上是用sssd_krb5_localauth_plugin.so 插件实现的),这就导致了发生Kerberos鉴权时,本地krb5因为找不到本地用户对应的Kerberos用户而尝试去读取$HOME/.k5login 和$HOME/.k5user这两个文件来确定哪些Kerberos用户允许登录到本机的该用户。而这两个文件一般都找不到,因此登录就失败了。(换句话说,如果你不做上面的操作,而是在这两个文件之一中正确写入你的Kerberos用户名,也是可以正确登录的,但是只对当前用户有效。)

其次,RHEL/CentOS的OpenSSH服务器实现支持两个字段叫GSSAPIEnablek5users 和KerberosUseKuserok 可以在SSH服务器端禁用对这两个文件的检查,而其它发行版的OpenSSH服务器实现均无这两项设置,因此OpenSSH默认打开了对这两个文件的检查,从而触发了前一段所述的问题。

最后,Ubuntu自带的sssd-krb5 1.16.1-1ubuntu1还不支持includedir 配置,因此我们无法默认在/etc/krb5.conf 配置文件中加入这个localauth插件。所以在OpenSUSE上可以直接在/etc/krb5.conf 顶端加上:

includedir /var/lib/sss/pubconf/krb5.include.d/

然后重启sssd即可生效。而对于Debian/Ubuntu,这一行会导致鉴权直接失败,因此我们只能暂时把所需的文件内容直接写进/etc/krb5.conf 了。

给域管理组sudo权限

首先我们在AD里面建个组,比如叫LinuxAdministrators ;我们需要获取到这个组的Linux名称:

$ getent group [email protected]
[email protected]:*:640000000:user1,user2,...

返回值的第一部分[email protected] 就是我们要的Linux名称了。

然后我们修改一下sudo配置:

visudo

在里面加入一行:

%[email protected] ALL=(ALL) NOPASSWD: ALL

离开域

realm leave --verbose -U domain_username domain.name

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据