Samba 系列（八）：使用 Samba 和 Winbind 将 Ubuntu 16.04 添加到 AD 域
这篇文章讲述了如何将 Ubuntu 主机加入到 Samba4 AD 域，并实现使用域帐号登录 Ubuntu 系统。
samba
183.148.79.199
这是一个很好的实现，却没几个回复，甚至少有人问津。1、光 samba 那些参数就足以让绝大部分人却步；2、所需的基础知识的广度和深度不是谁都能具备的；3、即使能成功实现，结果未必比 Windows AD 好到哪里去；<br />
搭建所需花的时间就不说了。。。1个星期？不止。。。
来自浙江台州的 Firefox 53.0|Windows 10 用户
2017-05-06T22:22:30.000
123.120.61.86
这也与现在的基于 SaaS 等 B/S 方式的流行，C/S 方式的没落有关。
linux [Chrome 57.0|Mac 10.11]
2017-05-08T09:50:38.000
221.230.6.109
太好了,感谢作者,
来自江苏镇江的 Safari 10.1|Mac 10.12 用户
2017-09-20T10:36:36.000
218.58.53.46
通篇看了2遍，理解了一半的语句和表达过程，堪为基础配置之典范，细腻用心，感谢作者等相关人员。
来自山东青岛的 Chrome 69.0|Windows 7 用户
2019-08-14T17:50:53.000
218.58.53.46
通篇看了2遍，理解了一半的语句和表达过程，堪为基础配置之典范，细腻用心，感谢作者等相关人员。
来自山东青岛的 Chrome 69.0|Windows 7 用户
2019-08-14T17:50:56.000
210.83.66.4
感谢作者，有个问题请假下 怎么开启离线登录，设置winbind offline logon = terue貌似没有效果
来自浙江宁波的 Chrome 88.0|Windows 10 用户
2021-02-19T14:59:54.000
这篇文章讲述了如何将 Ubuntu 主机加入到 Samba4 AD 域，并实现使用域帐号登录 Ubuntu 系统。
![](/data/attachment/album/201705/05/091853rijznj1nk0l3ikc3.jpg)


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


### 要求：


1. [在 Ubuntu 系统上使用 Samba4 软件来创建活动目录架构](http://www.tecmint.com/install-samba4-active-directory-ubuntu/)


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


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


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



```
# hostnamectl set-hostname your_machine_short_name
# cat /etc/hostname
# hostnamectl

```

![Set System Hostname](/data/attachment/album/201705/05/092133cscb0ucshv0vb5sz.png)


*设置系统主机名*


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


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


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


![Configure Network Settings for AD](/data/attachment/album/201705/05/092134r00vsi5vrv15919l.png)


*为 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 配置中。



```
# systemctl restart networking.service
# ping -c2 your_domain_name

```

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



```
$ sudo apt-get install ntpdate
$ sudo ntpdate -q your_domain_name
$ sudo ntpdate your_domain_name

```

![Time Synchronization with AD](/data/attachment/album/201705/05/092134qttwc55c6v9grtrc.png)


*AD 服务器时间同步*


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



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

```

![Install Samba4 in Ubuntu Client](/data/attachment/album/201705/05/092134rctoya6hjp2yy66e.png)


*在 Ubuntu 机器上安装 Samba4 软件*


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


![Add AD Domain Name](/data/attachment/album/201705/05/092135jq23h11x0f41e9e0.png)


*添加 AD 域名*


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



```
# kinit ad_admin_user
# klist

```

![Check Kerberos Authentication with AD](/data/attachment/album/201705/05/092135j9umh4hmh73tpuz1.png)


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


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


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


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



```
# mv /etc/samba/smb.conf /etc/samba/smb.conf.initial
# nano /etc/samba/smb.conf&nbsp;

```

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



```
[global]
workgroup = TECMINT
realm = TECMINT.LAN
netbios name = ubuntu
security = ADS
dns forwarder = 192.168.1.1
idmap config * : backend = tdb
idmap config *:range = 50000-1000000
template homedir = /home/%D/%U
template shell = /bin/bash
winbind use default domain = true
winbind offline logon = false
winbind nss info = rfc2307
winbind enum users = yes
winbind enum groups = yes
vfs objects = acl_xattr
map acl inherit = Yes
store dos attributes = Yes

```

![Configure Samba for AD](/data/attachment/album/201705/05/092136f5j7x3sosev5x7q8.png)


*Samba 服务的 AD 环境配置*


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


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


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



```
$ sudo systemctl restart smbd nmbd winbind
$ sudo systemctl stop samba-ad-dc
$ sudo systemctl enable smbd nmbd winbind

```

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



```
$ sudo net ads join -U ad_admin_user

```

![Join Ubuntu to Samba4 AD DC](/data/attachment/album/201705/05/092136mhunab4jz5fvzeke.png)


*把 Ubuntu 主机加入到 Samba4 AD DC*


10、在 [安装了 RSAT 工具的 Windows 机器上](http://www.tecmint.com/manage-samba4-ad-from-windows-via-rsat/) 打开 AD UC ,展开到包含的计算机。你可以看到已加入域的 Ubuntu 计算机。


![Confirm Ubuntu Client in Windows AD DC](/data/attachment/album/201705/05/092136r8tlolof4rlrno2z.png)


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


### 第三步：配置 AD 帐号认证


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


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



```
$ sudo nano /etc/nsswitch.conf

```

然后在 `passwd` 和 `group` 行添加 winbind 值，如下图所示：



```
passwd:         compat winbind
group:          compat winbind

```

![Configure AD Accounts Authentication](/data/attachment/album/201705/05/092137xo792w1f8719qqk7.png)


*配置 AD 帐号认证*


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



```
$ wbinfo -u
$ wbinfo -g

```

![List AD Domain Accounts and Groups](/data/attachment/album/201705/05/092137c38xfozuoo4qoibo.png)


*列出域帐号和组*


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



```
$ sudo getent passwd| grep your_domain_user
$ sudo getent group|grep 'domain admins'

```

![Check AD Domain Users and Groups](/data/attachment/album/201705/05/092138n0fmqjp9p9p7u7jz.png)


*检查 AD 域用户和组*


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


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



```
$ sudo pam-auth-update

```

![Authenticate Ubuntu with Domain Accounts](/data/attachment/album/201705/05/092138n0m0hsmmrom3rhg1.png)


*使用域帐号登录 Ubuntu 主机*


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



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

```

![Authenticate Debian with Domain Accounts](/data/attachment/album/201705/05/092139g3l1u50wg5t58k5n.png)


*使用域帐号登录 Debian 系统*


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



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

```

![Users Allowed to Change Password](/data/attachment/album/201705/05/092139xdwwu1whh7hw24ds.png)


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


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



```
$ su - your_ad_user

```

![Find AD User Information](/data/attachment/album/201705/05/092139yt6z05q2cx5lle6u.png)


*查看 AD 用户信息*


使用 [pwd 命令](http://www.tecmint.com/pwd-command-examples/)来查看域帐号的当前目录，如果你想修改域帐号的密码，你可以使用 `passwd` 命令来完成。


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



```
$ sudo usermod -aG sudo your_domain_user

```

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


![Add Sudo User Root Group](/data/attachment/album/201705/05/092140ftez2qacg9kwqvaw.png)


*给域帐号添加 root 权限*


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



```
%YOUR_DOMAIN\\your_domain\  group                ALL=(ALL:ALL) ALL

```

![Add Root Privileges to Domain Group](/data/attachment/album/201705/05/092141ipzssy8lyyy8vovo.jpg)


*为域帐号组添加 root 权限*


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


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


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



```
greeter-show-manual-login=true
greeter-hide-users=true

```

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




---


作者简介：


我是一个电脑迷，开源 Linux 系统和软件爱好者，有 4 年多的 Linux 桌面、服务器系统使用和 Base 编程经验。




---


via: <http://www.tecmint.com/join-ubuntu-to-active-directory-domain-member-samba-winbind/>


作者：[Matei Cezar](http://www.tecmint.com/author/cezarmatei/) 译者：[rusking](https://github.com/rusking) 校对：[wxy](https://github.com/wxy)


本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出

