Ubuntu加入Active Directory

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

Domain Join

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

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

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

注:

  • 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

DNS自动注册

/etc/sssd/sssd.conf[domain/corp.contoso.com]一节末尾加上:

让OpenSSH支持Kerberos鉴权

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

然后 systemctl restart sshd 生效。

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

解释一下吧。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 顶端加上:

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

给域管理组sudo权限

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

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

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

在里面加入一行:

离开域

发表回复

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

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