个人工具

UbuntuHelp:ActiveDirectoryWinbindHowto/zh

来自Ubuntu中文

跳转至: 导航, 搜索


这是一个关于怎样在一个Active Directory domain中增加一个ubuntu box并使用AD进行用户验证的介绍.

软件环境

名称 版本
MS Windows Server 2003 standard sp1
Linux Ubuntu Breezy 5.10
Winbind 3.0.14a-Ubuntu
Samba 3.0.14a-Ubuntu
krb5-user 1.3.6-1
libpam-krb5 1.0-12

Used terms

term definition
AD 活动目录(Active Directory)
DC 域控制器(Domain Controller)
lab.example.com AD domain
win2k3.lab.example.com DC FQDN
10.0.0.1 DC IP
LAB.EXAMPLE.COM Kerberos Realm
linuxwork Ubuntu工作站的计算机名
linuxwork.lab.example.com Ubuntu工作站的完整域名
ntp.example.com timeserver (NTP)

确认连接畅通

配置活动目录(AD)所在网络的Ubuntu客户端的第一步是确保网络的畅通和ActiveDirectory的域控制器的名字解析无误. 可以用一个简单的方法来验证这两点,那就是ping你的网络上的活动目录的域控制器的完整域名(FQDN)。

root@linuxwork:~# ping win2k3.lab.example.com
PING win2k3.lab.example.com (10.0.0.1) 56(84) bytes of data.
64 bytes from win2k3.lab.example.com (10.0.0.1): icmp_seq=1 ttl=128 time=0.176ms

ping的输出显示FQDN已经被成功的解析为一个IP地址了,并且您ubuntu工作站和AD DC之间的连接已经畅通。

时间设置

时间对于kerberos是必不可少的,他用于ActiveDirectory网络中的认证. 最简单的方法是使用一个NTP服务器来确保时间的正确同步 每一个活动目录域控制器同时也是一个NTP服务器,为了达到最佳效果,在Ubuntu默认的ntpdate应用中使用AD DC的完整域名,他将在开机时或者按指定的要求来同步时间。

file: /etc/default/ntpdate

# servers to check
NTPSERVERS="win2k3.lab.example.com"
# additional options for ntpdate
NTPOPTIONS="-u"
root@linuxwork:~# /etc/init.d/ntpdate restart

Synchronizing clock to win2k3.lab.example.com... [ ok ]

正式完整域名(FQDN)

对于Kerberos和活动目录来说,一个有效的FQDN是必不可少的 活动目录非常依赖于DNS,因此很可能您的ActiveDirectory域控制器也在运行着Microsoft的DNS服务器组件. 在这里,我们将在您的ubuntu工作站上编辑本地hosts文件,以确保您的域名是可以解析的.

file: /etc/hosts

127.0.0.1 linuxwork.lab.example.com localhost linuxwork

您也可以通过ping您自己的完整域名来测试您的配置 输出的结果应该类似于上面的ping输出的结果,在网络中连线测试(当然, 这个域名将是您自己,而IP地址,将将是127.0.0.1).

建立Kerberos

设置Kerberos的第一步是要安装适当的客户端软件. 这个过程假设你已经在你的sources.list以及Univers repository中打开了所有breezy的main和security源.

需要的软件

恰当的安装必需的Kerberos软件包,您需要下列的apt-get命令来安装软件:

root@linuxwork:~# apt-get install krb5-user libpam-krb5

对于krb5-user 您将需要universe repository.

IconsPage?action=AttachFile&do=get&target=IconNote.png

如果你不打算在登录时要求Kerberos ticket,你不用安装libpam-krb5软件包.

该命令还将去取得附加软件包krb5-config,libkrb53,libkadm55。

该krb5-config安装将会提示:

What are the Kerberos servers for your realm?
win2k3.lab.example.com
What is the administrative server for your Kerberos realm?
win2k3.lab.example.com

这些提示应该根据您负责的域的ActiveDirectory的域控制器来回答. 该krb5-config程序将定制/etc/krb5.conf文件以供安装使用. 在大多数情况下, 这个配置文件将正常工作, 但是,如果你想要一个更精简的配置文件 (例如, without all the Kerberos 4 cruft), 您可以使用下列模板:

file: /etc/krb5.conf

[logging]
default = FILE:/var/log/krb5.log
[libdefaults]
ticket_lifetime = 24000
clock_skew = 300
default_realm = LAB.EXAMPLE.COM
# dns_lookup_realm = false
# dns_lookup_kdc = true
[realms]
LAB.EXAMPLE.COM = {
kdc = win2k3.lab.example.com:88
admin_server = win2k3.lab.example.com:464
default_domain = LAB.EXAMPLE.COM
}
[domain_realm]
.lab.example.com = LAB.EXAMPLE.COM
lab.example.com = LAB.EXAMPLE.COM

注意这两个"dns"指令已经被注释掉. 你可以选择使用dns寻找kerberos realm服务器 或者你可以选择使用krb5.conf文件来定义kerberos realm的服务器. 如果你选择使用DNS, 取消上面的两行注释而代之以在[realms]标题下注释或移除完整的指令.

测试

通过发出kinit命令来获得Ticket-Granting Ticket (TGT),如上所示(你可以使用任何有效域帐户; 它不必是管理员. 你也可以在命令中省略域名,如果"default_realm"指令在 /etc/krb5.conf 文件中被妥善应用的话.

root@linuxwork:~# kinit [email protected]
Password for [email protected]: ****

使用 klist 命令检查一下ticket是否有效.

root@linuxwork:~# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: [email protected]
Valid starting Expires Service principal
01/21/05 10:28:51 01/21/05 20:27:43 krbtgt/[email protected]
renew until 01/21/05 20:28:51

此时,你的Kerberos已经被正确的安装和配置,你可以使用 kdestroy 命令来释放你的测试ticket.

加入AD域

需要的软件

需要的软件 Windows 2003 Server SP1 Winbind version 3.0.14a是必需的。在Hoary中仅有 3.0.10版,但是在Breezy中你能找到3.0.14a。

root@linuxwork:~# apt-get install winbind samba [smbfs smbclient]

IconsPage?action=AttachFile&do=get&target=IconNote.png

软件包"smbfs"是可选的,但是他包含了许多有用的客户端工具,包括"smbmount"命令. "smbclient"软件包也是有用的,其中包括为SMB共享建立一个类ftp客户端.

加入

file: /etc/samba/smb.conf

[global]
security = ads
realm = LAB.EXAMPLE.COM
password server = 10.0.0.1
workgroup = LAB
# winbind separator = +
idmap uid = 10000-20000
idmap gid = 10000-20000
winbind enum users = yes
winbind enum groups = yes
template homedir = /home/%D/%U
template shell = /bin/bash
client use spnego = yes
client use ntlmv2 = yes
encrypt passwords = yes
winbind use default domain = yes
restrict anonymous = 2

IconsPage?action=AttachFile&do=get&target=IconNote.png

"winbind use default domain"参数在单域环境中是非常有用的,使winbind采取所有用户应当在域中进行认证来决定哪一个winbind加入. 如果您的环境包含多个域或假如你的帐户域与资源域不同,请省略这个参数. "winbind separator"选项是可选的,默认值是通常的反斜线"\"域和用户分隔符. 你可以使用"+"号,如果在您的环境因为某个特定原因"\"不能用的话

在修改 /etc/samba/smb.conf文件后,需要重启samba和winbind服务:

root@linuxwork:~# /etc/init.d/winbind stop
root@linuxwork:~# /etc/init.d/samba restart
root@linuxwork:~# /etc/init.d/winbind start

一个帐号要求,要增加一个工作站到AD域需要一个帐号,该帐号要求有效的Kerberos TGT.

root@linuxwork:~# net ads join
Using short domain name – LAB
Joined 'linuxwork' to realm 'LAB.EXAMPLE.COM'

如果Kerberos认证是有效的, 你不应当为密码设置问题。但是, 如果你不能以root用户工作,那么你将使用sudo命令来完成必要的任务,使用命令 sudo net ads join -U username ,当提示要求时输入您的密码。否则, 你会被要求作为[email protected]进行认证 ,以代替一个有效的帐号名.

测试

# wbinfo -u

你会得到一个域用户列表。

# wbinfo -g

设置认证(Setup Authentication)

nsswitch

file: /etc/nsswitch.conf

passwd: compat winbind
group: compat winbind
shadow: compat

Testing

Check Winbind nsswitch module with getent.

root@linuxwork:~# getent passwd

root:x:0:0:root:/root:/bin/bash
...
LAB+administrator:x:10000:10000:Administrator:/home/LAB/administrator:/bin/bash
LAB+gast:x:10001:10001:Gast:/home/LAB/gast:/bin/bash
...
root@linuxwork:~# getent group

root:x:0:
daemon:x:1:
bin:x:2:
...
LAB+organisations-admins:x:10005:administrator
LAB+domänen-admins:x:10006:manuel,administrator
LAB+domänen-benutzer:x:10000:
LAB+domänen-gäste:x:10001:
LAB+linux-admins:x:10004:manuel
...

PAM

这个配置下,你可以利用本地用户或域用户访问工作站 域用户第一次登录时会创建一个home目录. 这个PAM配置假定这个系统将主要用于域帐户. 如果相反(即,该系统将主要用于本地用户), 当使用本地用户时,pam_winbind.so和pam_unix.so顺序应当翻转. 这儿显示的配置将导致登录时和使用sudo时Windows/samba DC认证失败. 这样可能丢失DC的事件日志 同样的,如果先检查本地帐户, 每次当一个域帐户被访问,/var/log/auth.log将满布失败的登录尝试.

登录时这个PAM配置不需要Kerberos TGT. 需要ticket,登录后使用kinit,并考虑在登出脚本内使用"kdestroy".

file: /etc/pam.d/common-account

account sufficient pam_winbind.so
account required pam_unix.so

file: /etc/pam.d/common-auth

auth sufficient pam_winbind.so
auth sufficient pam_unix.so nullok_secure use_first_pass
auth required pam_deny.so

file: /etc/pam.d/common-session

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

file: /etc/pam.d/sudo

auth sufficient pam_winbind.so
auth sufficient pam_unix.so use_first_pass
auth required pam_deny.so
@include common-account

最终的配置

每个域在/home/中需要一个目录

root@linuxwork:~# mkdir /home/LAB

最後一件事

如果你想能够通过管理你的ubuntu box使用一个活动目录帐号,你需要把他加到 sudoers文件中。因此,你需要编辑 /etc/group文件并且加入你的用户名到admin(管理员)组中和任何你需要加入的 用户组(提示一下,比如plugdev,audio,cdrom)。将会像这样:

.......
admin:x:117:olduser,ActiveDirectoryUser
.......

那里的olduser就是你当前的linux用户而ActiveDirectoryUser就是'%Domain\ admins'新的管理员用户。另一个创建域组(你的ubuntu里的一个sudoer)的方法是编辑文件 /etc/sudoers(使用指令'visudo‘)然後加入一下行:

%adgroup ALL=(ALL) ALL

那里的adgroup就是一个你的活动目录里的组。清注意,组的名字里不能有空格,也许你可以用'%Domain\ admins',但我还没测试过。

用法

使用“域+用户名”登录,除非你在smb.conf中设定了"winbind use default domain"(winbind使用默认网域名称),那样的话,你可以直接用“用户名”登录。

login: LAB+manuel
Password: *****
...
LAB+manuel@linuxwork:~$

自动Kerberos认证书

在smb.conf : file: /etc/samba/smb.conf 里添加winbind自动刷新认证的行,使pam_winbind 自动的刷新kerberos认证书。

# winbind separator = +
winbind refresh tickets = yes
idmap uid = 10000-20000

还要修改 /etc/pam.d/common-auth:file:/etc/pam.d/common-auth如下:

auth sufficient pam_winbind.so krb5_auth krb5_ccache_type=FILE
auth sufficient pam_unix.so nullok_secure use_first_pass
auth required pam_deny.so


疑难解答

如果 /var/log/auth.log 文件中的Winbind PAM模块显示, 该AD用户不存在的,重启winbind. 可能重新启动整个工作站是最好的方式.

root@linuxwork:~# /etc/init.d/winbind start

其他文档(External Docs)

另见在 randompage.org上的 Using Samba on Debian Linux to authenticate against Active Directory . 除了一点细节外,它在很大程度上与这页相似.