首先向这篇文章的作者道歉,因为标题的字符个数有限,因此将名称缩短了一下,原名为:

Linux学习笔记之通过Winbind将Linux加入到Windows 域

 

以下为正文:

 

2007.10.25 09:07 作者:一缕清风 | 评论:0 | 阅读:1508


===================Winbind简介=====================


Winbind 是一款 Samba 组件,在 CentOS 系统下,他被包含在了 samba-common 包中。 Winbind 在Linux上实现了微软的RPC调用、可插式验证模块和名字服务切换,通过 samba 接口与 Windows 域控获得联系,可以使NT域用户能在Linux主机上以Linux用户身份进行操作。通过设定 Linux 服务器的 nss 配置,我们可以让系统通过 Winbind 程序来解析用户信息。


====================NSS简介=======================


NSS 是 Sun 公司开发用于定义系统中配置文件查找顺序的工具。他的配置文件在 /etc/nsswitch.conf 。通过他我们可以定义系统在登录时通过 Winbind 来获取用户信息,而不只是本地配置文件:/etc/passwd 。


以下是可能出现在 /etc/nsswitch.conf 中的项目:


aliases 邮件别名;


passwd 系统用户;


group 用户组;


shadow 隐蔽口令;


hosts 主机名和I P地址;


networks 网络名和号;


protocols 网络协议;


services 端口号和服务名称;


ethers 以太网号;


rpc 远程进程调用的名称和号


netgroup 网内组


在本文中,我们需要修改的是:


passwd 系统用户;


group 用户组;


您需要将这两项修改为:


passwd: files winbind


group: files winbind


个别参考资料将 shadow 也添加了 winbind 参数,我觉得没有必要。


files 表示将从本地文件读取用户、组信息,而 winbind 参数则表示经过 winbind 从域读取用户信息。


=================安装 Samba 配置 Winbind=================


1.通过 yum 安装 samba


[root@localhost etc]# yum install samba samba-common


Setting up Install Process


Setting up repositories


update 100% |=========================| 951 B 00:00


base 100% |=========================| 1.1 kB 00:00


addons 100% |=========================| 951 B 00:00


extras 100% |=========================| 1.1 kB 00:00


Reading repository metadata in from local files


Parsing package install arguments


Resolving Dependencies


–> Populating transaction set with selected packages. Please wait.


—> Downloading header for samba-common to pack into transaction set.


samba-common-3.0.10-1.4E. 100% |=========================| 38 kB 00:01


—> Package samba-common.i386 0:3.0.10-1.4E.12.2 set to be updated


—> Downloading header for samba to pack into transaction set.


samba-3.0.10-1.4E.12.2.i3 100% |=========================| 101 kB 00:02


—> Package samba.i386 0:3.0.10-1.4E.12.2 set to be updated


–> Running transaction check


Dependencies Resolved


=============================================================================


Package Arch Version Repository Size


=============================================================================


Installing:


samba i386 3.0.10-1.4E.12.2 update 13 M


samba-common i386 3.0.10-1.4E.12.2 update 5.0 M


Transaction Summary


=============================================================================


Install 2 Package(s)


Update 0 Package(s)


Remove 0 Package(s)


Total download size: 18 M


Is this ok [y/N]: y


2.检查 Winbind 库文件。


确保系统 lib 目录下已经包含 libnss_winbind.so 库文件。


[root@localhost etc]# ls /usr/lib | grep winbind


libnss_winbind.so


[root@localhost etc]#


3.配置 Samba


打开 samba 配置文件,/etc/samba/smb.conf 。


vi /etc/samba/smb.conf


我们对 [global] 标签下的内容进行配置:


workgroup = ABC #你的域名 比如完整域名为:linuxblog.cn ,则 ABC 写 LINUXBLOG。


wins support = yes #开启 wins 服务器支持。


wins server = 192.168.0.1 192.168.0.1 #这里填写你的域控服务器地址,中间以空格分隔。


wins proxy = yes


security = ADS #关于 security level 的详细资料你可以查看 Samba 官方资料。这个选项我见过使用 Domain 的,也见过使用 AD 的。我使用 ADS也是成功的,暂时未搞懂他们的区别。


添加以下内容:


acl compatibility = win2k


idmap uid = 16777216-33554431 #idmap uid 和 idmap gid是设置winbind把win200x域用户、组map成本地用户、组所使用的ID号范围,如果你的用户很多,可以加大这两个值之间的差。


idmap gid = 16777216-33554431


password server = 192.168.0.14 192.168.0.13 192.168.0.23 #解析用户密码的服务器,自然是 DC


map to guest = bad user


guest ok = no


realm = CN.MOBINEX.COM # realm 有域的含义,可能是指定完整域名。


encrypt psswords=cyes


winbind use default domain = yes


template homedir = /home/%D/%U 指定用户目录格式 /home/域名/用户名 请手动创建域名目录,并且将其设置为 777。不然域用户无法正常登入主机。


template shell = /bin/bash #指定登入用户使用的 shell


4. 配置 Kerbers


vi /etc/krb5.conf


以下是一个典型的未配置的文件:


[logging]


default = FILE:/var/log/krb5libs.log


kdc = FILE:/var/log/krb5kdc.log


admin_server = FILE:/var/log/kadmind.log


[libdefaults]


default_realm = EXAMPLE.COM


dns_lookup_realm = false


dns_lookup_kdc = false


[realms]


EXAMPLE.COM = {


kdc = kerberos.example.com:88


admin_server = kerberos.example.com:749


default_domain = example.com


}


[domain_realm]


.example.com = EXAMPLE.COM


example.com = EXAMPLE.COM


[kdc]


profile = /var/kerberos/krb5kdc/kdc.conf


[appdefaults]


pam = {


debug = false


ticket_lifetime = 36000


renew_lifetime = 36000


forwardable = true


krb4_convert = false


}


最简单的配置方法,就是将 EXAMPLE.COM 全部替换成你的域名(大小写需要保持一致),必要的地方写上IP:


[logging]


default = FILE:/var/log/krb5libs.log


kdc = FILE:/var/log/krb5kdc.log


admin_server = FILE:/var/log/kadmind.log


[libdefaults]


default_realm = LINUXBLOG.CN


dns_lookup_realm = false


dns_lookup_kdc = false


[realms]


LINUXBLOG.CN = {


kdc = 172.16.89.3:88


admin_server = 172.16.89.3:749


default_domain = linuxblog.cn


}


[domain_realm]


.example.com = LINUXBLOG.CN


example.com = LINUXBLOG.CN


[kdc]


profile = /var/kerberos/krb5kdc/kdc.conf


[appdefaults]


pam = {


debug = false


ticket_lifetime = 36000


renew_lifetime = 36000


forwardable = true


krb4_convert = false


}


5.加域


在加域之前,一定要将 samba 服务以及 winbind 服务重新启动一下,以便能够加载配置好的参数。


[root@localhost init.d]# service smb restart


Shutting down SMB services: [FAILED]


Shutting down NMB services: [FAILED]


Starting SMB services: [ OK ]


Starting NMB services: [ OK ]


[root@localhost init.d]# service winbind restart


Shutting down Winbind services: [FAILED]


Starting Winbind services: [ OK ]


(1) 使用 net join 命令加域


net rpc join -S PDC -U Administrator


这只是一个大致的格式,PDC 为域名:LINUXBLOG。net join 的用法很多地方都可以找到,我感兴趣的是另外一款小工具。


(2) 使用 authconfig 将机器加域


执行 authconfig 命令,可以看到如下界面:


 


选择使用 Winbind,使用 MD5 口令,使用 Kerberos,使用 SMB 验证,使用 Winbind 验证。
 
按下一步查看kerberos设置:
 
查看 Winbind 设置,选择加入域,输入帐号密码,按确定。
 
最后点击 Join Domain。
提示你保存配置文件,我们选择“是”。
 
提示输入管理员用户名以及密码:
 
完成加域之后会返回上一层界面,我们点击OK。这时系统会自动重启 Winbind 服务。
 
这时就可以看到域用户的信息了,比如:
[root@localhost init.d]# id Administrator
uid=16777216(administrator) gid=16777216(Domain Users) groups=16777216(Domain Users),16777217,16777218,16777219(Domain Admins),16777220(Enterprise Admins),16777221(Schema Admins),16777222(Group Policy Creator Owners)
当然也可以使用 wbinfo -g (查看组信息) 以及 wbinfo -u (查看用户信息) 命令。
[root@localhost init.d]# wbinfo -g
BUILTIN\System Operators
BUILTIN\Replicators
BUILTIN\Guests
BUILTIN\Power Users
BUILTIN\Print Operators
BUILTIN\Administrators
BUILTIN\Account Operators
BUILTIN\Backup Operators
BUILTIN\Users
Domain Computers
Domain Controllers
Schema Admins
Enterprise Admins
Domain Admins
Domain Users
Domain Guests
Group Policy Creator Owners
DnsUpdateProxy
====================配置 PAM=======================
很久以前的 Linux 程序,都有自己的用户验证系统。这种模式在需要换验证系统的时候就会变的很麻烦,你需要修改程序的源代码。甚至某些程序需要改变很多架构。
比如 ssh 默认是读取本地的 passwd 文件来判断用户信息的,但是要让他通过 samba 来获取用户信息,我们怎么做呢?修改 sshd 的源代码?显然这是一个很繁琐的方式。
PAM 解决了这个问题。众多应用程序都提供了和 PAM 的接口。如此一来应用程序便可以不管用户验证方式,而交给 PAM 处理,即 sshd 只认识 PAM 不认识 Winbind,当然可以不认识 passwd 。而具体如何验证,这交给 PAM 去控制了。我们通过修改 PAM 的配置文件达到改变验证模式的目的。
你可以通过 深入Linux PAM 体系结构 一文来详细了解 PAM 的配置文件以及工作模式。
我们通过编辑 /etc/pam.d/sshd 文件来改变 sshd 的用户验证模式,典型的配置文件如下:
auth sufficient /lib/security/pam_winbind.so
auth required /lib/security/pam_stack.so service=system-auth
auth required /lib/security/pam_nologin.so
account sufficient /lib/security/pam_winbind.so
account required /lib/security/pam_stack.so service=system-auth
password required /lib/security/pam_stack.so service=system-auth
session required /lib/security/pam_stack.so service=system-auth
session required /lib/security/pam_limits.so
session required /lib/security/pam_mkhomedir.so
session optional /lib/security/pam_console.so
关于配置文件,很多地方都可以找到,或许各个版本有些不同。其实最重要的也就是加入 pam_winbind.so 模块验证方式。
好了,现在你可以通过 ssh 登录域用户了。记住!一定要手动创建 /home/域名 且权限为777。