Samba 系列(八):使用 Samba 和 Winbind 将 Ubuntu 16.04 添加到 AD 域

这篇文章讲述了如何将 Ubuntu 主机加入到 Samba4 AD 域,并实现使用域帐号登录 Ubuntu 系统。

要求:

  1. 在 Ubuntu 系统上使用 Samba4 软件来创建活动目录架构

第一步: Ubuntu 系统加入到 Samba4 AD 之前的基本配置

1、在将 Ubuntu 主机加入到 AD DC 之前,你得先确保 Ubuntu 系统中的一些服务配置正常。

主机名是你的机器的一个重要标识。因此,在加入域前,使用 hostnamectl 命令或者通过手动编辑/etc/hostname 文件来为 Ubuntu 主机设置一个合适的主机名。


  1. # hostnamectl set-hostname your_machine_short_name
  2. # cat /etc/hostname
  3. # hostnamectl

Samba 系列(八):使用 Samba 和 Winbind 将 Ubuntu 16.04 添加到 AD 域

设置系统主机名

2、在这一步中,打开并编辑网卡配置文件,为你的主机设置一个合适的 IP 地址。注意把 DNS 地址设置为你的域控制器的地址。

编辑 /etc/network/interfaces 文件,添加 dns-nameservers 参数,并设置为 AD 服务器的 IP 地址;添加dns-search 参数,其值为域控制器的主机名,如下图所示。

并且,把上面设置的 DNS IP 地址和域名添加到 /etc/resolv.conf 配置文件中,如下图所示:

Samba 系列(八):使用 Samba 和 Winbind 将 Ubuntu 16.04 添加到 AD 域

为 AD 配置网络设置

在上面的截图中, 192.168.1.254 和 192.168.1.253 是 Samba4 AD DC 服务器的 IP 地址, Tecmint.lan是 AD 域名,已加入到这个域中的所有机器都可以查询到该域名。

3、重启网卡服务或者重启计算机以使网卡配置生效。使用 ping 命令加上域名来检测 DNS 解析是否正常。

AD DC 应该返回的是 FQDN 。如果你的网络中配置了 DHCP 服务器来为局域网中的计算机自动分配 IP 地址,请确保你已经把 AD DC 服务器的 IP 地址添加到 DHCP 服务器的 DNS 配置中。


  1. # systemctl restart networking.service
  2. # ping -c2 your_domain_name

4、最后一步是配置服务器时间同步。安装 ntpdate 包,使用下面的命令来查询并同步 AD DC 服务器的时间。


  1. $ sudo apt-get install ntpdate
  2. $ sudo ntpdate -q your_domain_name
  3. $ sudo ntpdate your_domain_name

Samba 系列(八):使用 Samba 和 Winbind 将 Ubuntu 16.04 添加到 AD 域

AD 服务器时间同步

5、下一步,在 Ubuntu 机器上执行下面的命令来安装加入域环境所必需软件。


  1. $ sudo apt-get install samba krb5-config krb5-user winbind libpam-winbind libnss-winbind

Samba 系列(八):使用 Samba 和 Winbind 将 Ubuntu 16.04 添加到 AD 域

在 Ubuntu 机器上安装 Samba4 软件

在 Kerberos 软件包安装的过程中,你会被询问输入默认的域名。输入大写的域名,并按 Enter 键继续安装。

Samba 系列(八):使用 Samba 和 Winbind 将 Ubuntu 16.04 添加到 AD 域

添加 AD 域名

6、当所有的软件包安装完成之后,使用域管理员帐号来测试 Kerberos 认证,然后执行下面的命令来列出票据信息。


  1. # kinit ad_admin_user
  2. # klist

Samba 系列(八):使用 Samba 和 Winbind 将 Ubuntu 16.04 添加到 AD 域

使用 AD 来检查 Kerberos 认证是否正常

第二步:将 Ubuntu 主机添加到 Samba4 AD DC

7、将 Ubuntu 主机添加到 Samba4 活动目录域环境中的第一步是编辑 Samba 配置文件。

备份 Samba 的默认配置文件,这个配置文件是安装 Samba 软件的过程中自动生成的,使用下面的命令来重新初始化配置文件。


  1. # mv /etc/samba/smb.conf /etc/samba/smb.conf.initial
  2. # nano /etc/samba/smb.conf 

在新的 Samba 配置文件中添加以下内容:


  1. [global]
  2. workgroup = TECMINT
  3. realm = TECMINT.LAN
  4. netbios name = ubuntu
  5. security = ADS
  6. dns forwarder = 192.168.1.1
  7. idmap config * : backend = tdb
  8. idmap config *:range = 50000-1000000
  9. template homedir = /home/%D/%U
  10. template shell = /bin/bash
  11. winbind use default domain = true
  12. winbind offline logon = false
  13. winbind nss info = rfc2307
  14. winbind enum users = yes
  15. winbind enum groups = yes
  16. vfs objects = acl_xattr
  17. map acl inherit = Yes
  18. store dos attributes = Yes

Samba 系列(八):使用 Samba 和 Winbind 将 Ubuntu 16.04 添加到 AD 域

Samba 服务的 AD 环境配置

根据你本地的实际情况来替换 workgroup , realm , netbios name 和 dns forwarder 的参数值。

由于 winbind use default domain 这个参数会让 winbind 服务把任何登录系统的帐号都当作 AD 帐号。因此,如果存在本地帐号名跟域帐号同名的情况下,请不要设置该参数。

8、现在,你应该重启 Samba 后台服务,停止并卸载一些不必要的服务,然后启用 samba 服务的 system-wide 功能,使用下面的命令来完成。


  1. $ sudo systemctl restart smbd nmbd winbind
  2. $ sudo systemctl stop samba-ad-dc
  3. $ sudo systemctl enable smbd nmbd winbind

9、通过下面的命令,使用域管理员帐号来把 Ubuntu 主机加入到 Samba4 AD DC 中。


  1. $ sudo net ads join -U ad_admin_user

Samba 系列(八):使用 Samba 和 Winbind 将 Ubuntu 16.04 添加到 AD 域

把 Ubuntu 主机加入到 Samba4 AD DC

10、在 安装了 RSAT 工具的 Windows 机器上 打开 AD UC ,展开到包含的计算机。你可以看到已加入域的 Ubuntu 计算机。

Samba 系列(八):使用 Samba 和 Winbind 将 Ubuntu 16.04 添加到 AD 域

确认 Ubuntu 计算机已加入到 Windows AD DC

第三步:配置 AD 帐号认证

11、为了在本地完成 AD 帐号认证,你需要修改本地机器上的一些服务和配置文件。

首先,打开并编辑名字服务切换 (NSS) 配置文件。


  1. $ sudo nano /etc/nsswitch.conf

然后在 passwd 和 group 行添加 winbind 值,如下图所示:


  1. passwd: compat winbind
  2. group: compat winbind

Samba 系列(八):使用 Samba 和 Winbind 将 Ubuntu 16.04 添加到 AD 域

配置 AD 帐号认证

12、为了测试 Ubuntu 机器是否已加入到域中,你可以使用 wbinfo 命令来列出域帐号和组。


  1. $ wbinfo -u
  2. $ wbinfo -g

Samba 系列(八):使用 Samba 和 Winbind 将 Ubuntu 16.04 添加到 AD 域

列出域帐号和组

13、同时,使用 getent 命令加上管道符及 grep 参数来过滤指定域用户或组,以测试 Winbind nsswitch 模块是否运行正常。


  1. $ sudo getent passwd| grep your_domain_user
  2. $ sudo getent group|grep 'domain admins'

Samba 系列(八):使用 Samba 和 Winbind 将 Ubuntu 16.04 添加到 AD 域

检查 AD 域用户和组

14、为了让域帐号在 Ubuntu 机器上完成认证登录,你需要使用 root 帐号运行 pam-auth-update 命令,然后勾选 winbind 服务所需的选项,以让每个域帐号首次登录时自动创建 home 目录。

查看所有的选项,按 ‘[空格]’键选中,单击 OK 以应用更改。


  1. $ sudo pam-auth-update

Samba 系列(八):使用 Samba 和 Winbind 将 Ubuntu 16.04 添加到 AD 域

使用域帐号登录 Ubuntu 主机

15、在 Debian 系统中,如果想让系统自动为登录的域帐号创建家目录,你需要手动编辑 /etc/pam.d/common-account 配置文件,并添加下面的内容。


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

Samba 系列(八):使用 Samba 和 Winbind 将 Ubuntu 16.04 添加到 AD 域

使用域帐号登录 Debian 系统

16、为了让 AD 用户能够在 Linux 的命令行下修改密码,你需要打开 /etc/pam.d/common-password 配置文件,在 password 那一行删除 use_authtok 参数,如下图所示:


  1. password [success=1 default=ignore] pam_winbind.so try_first_pass

Samba 系列(八):使用 Samba 和 Winbind 将 Ubuntu 16.04 添加到 AD 域

允许域帐号在 Linux 命令行下修改密码

17、要使用 Samba4 AD 帐号来登录 Ubuntu 主机,在 su - 后面加上域用户名即可。你还可以通过运行 id命令来查看 AD 帐号的其它信息。


  1. $ su - your_ad_user

Samba 系列(八):使用 Samba 和 Winbind 将 Ubuntu 16.04 添加到 AD 域

查看 AD 用户信息

使用 pwd 命令来查看域帐号的当前目录,如果你想修改域帐号的密码,你可以使用 passwd 命令来完成。

18、如果想让域帐号在 ubuntu 机器上拥有 root 权限,你可以使用下面的命令来把 AD 帐号添加到 sudo 系统组中:


  1. $ sudo usermod -aG sudo your_domain_user

登录域帐号登录到 Ubuntu 主机,然后运行 apt-get-update 命令来更新系统,以验证域账号是否拥有 root 权限。

Samba 系列(八):使用 Samba 和 Winbind 将 Ubuntu 16.04 添加到 AD 域

给域帐号添加 root 权限

19、要为整个域用户组添加 root 权限,使用 vi 命令打开并编辑 /etc/sudoers 配置文件,如下图所示,添加如下内容:


  1. %YOUR_DOMAIN\\your_domain\ group ALL=(ALL:ALL) ALL

Samba 系列(八):使用 Samba 和 Winbind 将 Ubuntu 16.04 添加到 AD 域

为域帐号组添加 root 权限

使用反斜杠来转义域用户组的名称中包含的空格,或者用来转义第一个反斜杠。在上面的例子中, TECMINT 域的域用户组的名字是 “domain admins" 。

前边的 % 表明我们指定是的用户组而不是用户名。

20、如果你使用的是图形界面的 Ubuntu 系统,并且你想使用域帐号来登录系统,你需要修改 LightDM 显示管理器,编辑 /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf 配置文件,添加下面的内容,然后重启系统才能生效。


  1. greeter-show-manual-login=true
  2. greeter-hide-users=true

现在你就可以域帐号来登录 Ubuntu 桌面系统了。使用域用户名或者域用户名@域名.tld 或者域名\域用户名的方式来登录系统。

原文发布时间为:2017-05-05

本文来自云栖社区合作伙伴“Linux中国”

上一篇:纯CSS3滑动开关按钮


下一篇:《响应式Web设计:HTML5和CSS3实践指南》——2.8节基于文本遮罩的文本纹理