用winbind实现windowsPDC和linux系统的帐号同步

测试环境:
操作系统:redflagDC4.1 samba版本:samba-3.0.2a-9AX ip:172.16.100.2
(注意,一定要使用比较“干净”的DC4.1环境,就用自带的samba也可以成功,我们之前的测试因为操作系统已经被别人做过配置,所以换了好几个版本的samba都不行,不得已后来重新安装DC4.1,配置就很顺利了。)

PDC控制器:windows2000Server 测试域名tail 主机名pig ip:172.16.100.1
测试DNS :windows2000Server 主机名pig (与PDC为同一台服务器)

测试过程:

一、准备工作:
配置windows2000Server为PDC,建立tail域,配置能够解析 tail 域的DNS,并用window2000或者windows98和客户端使用该DNS,能够正确登录windows2000Server的PDC域。

二、配置winbindd服务连接PDC抓到的域内的用户和组信息:
1、修改nsswitch.conf文件:
vi /etc/nsswitch.conf
做如下修改,使winbind成为passwd及group的认证信息源


passwd: files winbind
shadow: files
group: files winbind


2、配置DC4.1的DNS客户端文件:

vi /etc/resolv.conf
加上nameserver 172.16.100.1

ping一下pig.tail,确保可以连通

3、vi smb.conf,确保[global]段设置中有下面几行:

[global]
       workgroup = TAIL
       netbios name = rfdc41
       server string = Samba Server
       security = domain
       password server = pig.tail
       preferred master = no
       domain master = no
  domain logons = no
       idmap uid = 10000-20000
       idmap gid = 10000-20000
       template shell = /bin/bash
       template homedir = /home/%D/%U
       winbind separator = %
       winbind use default domain = Yes


idmap uid和idmap gid是设置winbind把win200x域用户、组map成本地用户、组所使用的ID号范围,如果用户很多,可以加大这两个值之间的差。
Template homedir是用户登录后的主目录,我设置成/home/域名/用户名。
Template shell是用户登录后的shell,如果你想用PDC给你的sshd做认证,就可以加上这个,给用户一个登录shell。
winbind separator是获取帐号的时候,域名与用户名之间的分隔符,比如tail%work
winbind use default domain设置它为yes是在显示的时候屏蔽掉域名与用户名之间的分隔符,否则用户在登录linux系统的时候,就要很烦琐地键入类似tail%work这样的用户名了。

5、用samba的net join命令把这台机器加入到windows200x域中(samba3.0以上的版本可以支持)

net rpc join -S pig.tail -U Administrator

然后输入域管理员密码,也就是Administrator的密码。

6、启动samba服务和winbindd服务

#service smb start
#service winbind start


7、用wbinfo命令查看用winbindd服务连接PDC抓到的域内的用户和组的信息

wbinfo -u

可以看到类似如下winbind抓取到的PDC用户信息:

Administrator
Guest
huaijinyang
jack
krbtgt
laohuai
user1
user2
user3
user4
user5
work

再执行:

wbinfo -g

可以看到类似如下winbind抓取到的PDC组信息:

BUILTIN%System Operators
BUILTIN%Replicators
BUILTIN%Guests
BUILTIN%Power Users
BUILTIN%Print Operators
BUILTIN%Administrators
BUILTIN%Account Operators
BUILTIN%Backup Operators
BUILTIN%Users
Domain Admins
Domain Users
Domain Guests
Domain Computers
Domain Controllers
Cert Publishers
Schema Admins
Enterprise Admins
Group Policy Creator Owners
DnsUpdateProxy
zzz


8、检查PDC用户(组)转换为本地用户(组)UID和GIU情况:

getent passwd

显示将PDC用户转换成系统用户的UID情况,显示最后类似如下信息:

Administrator:x:10000:10000::/home/TAIL/Administrator:/bin/bash
Guest:x:10001:10000::/home/TAIL/Guest:/bin/bash
huaijinyang:x:10002:10000:huai:/home/TAIL/huaijinyang:/bin/bash
jack:x:10003:10000:jack:/home/TAIL/jack:/bin/bash
krbtgt:x:10004:10000::/home/TAIL/krbtgt:/bin/bash
laohuai:x:10010:10000:laohuai:/home/TAIL/laohuai:/bin/bash
user1:x:10005:10000:user1:/home/TAIL/user1:/bin/bash
user2:x:10006:10000:user2:/home/TAIL/user2:/bin/bash
user3:x:10007:10000:user3:/home/TAIL/user3:/bin/bash
user4:x:10008:10000:user4:/home/TAIL/user4:/bin/bash
user5:x:10011:10000:user5:/home/TAIL/user5:/bin/bash
work:x:10009:10000:work:/home/TAIL/work:/bin/bash

PDC用户Administrator的UID从10000开始。


getent group

显示将PDC用户转换成系统用户的GID情况,显示最后类似如下信息:

Domain Admins:x:10003:Administrator
Domain Users:x:10000:Administrator,Guest,krbtgt,work,jack,user1,user2,user3,user4,huaijinyang,user5,laohuai
Domain Guests:x:10005:Guest
Domain Computers:x:10006:CALL-CENTER$,hjy$,localhost$,lishen$,HUAIJINYANG$,smb1$,rfas41$,lux$
Domain Controllers:x:10007:PIG$
Cert Publishers:x:10008:
Schema Admins:x:10002:Administrator
Enterprise Admins:x:10004:Administrator
Group Policy Creator Owners:x:10001:Administrator
DnsUpdateProxy:x:10009:
zzz:x:10010:
BUILTIN%System Operators:x:10011:
BUILTIN%Replicators:x:10012:
BUILTIN%Guests:x:10013:
BUILTIN%Power Users:x:10014:
BUILTIN%Print Operators:x:10015:
BUILTIN%Administrators:x:10016:
BUILTIN%Account Operators:x:10017:
BUILTIN%Backup Operators:x:10018:
BUILTIN%Users:x:10019:

PDC组Users 的UID从10000开始。
能够看到这样的信息,表示配置工作已经完成了大半,winbind服务已经在正常工作了。

这里有一点需要注意,如果在PDC域中新建了用户或者为某个用户修改了密码,需要重新刷新samba服务和winbind服务,过程如下:

service smb stop
service winbind stop
rm -f /etc/samba/*.tdb
rm -f /var/cache/samba/*.tdb
net rpc join -S pig.tail -U Administrator
service smb start
service winbind start

才能重新抓取到PDC的更新信息。

9、建立用户的登录主目录
samba的配置文件中指定了template homedir的路径,我们先要建立这个目录
mkdir /home/TAIL
注意PDC域名要大写!

三、配置PDC用户登录的pam认证
1
、备份原来的pam认证文件

mkdir /home/backup
cp /etc/pam.d/login /home/backup
cp /etc/pam.d/system-auth


2、修改login文件
vi /etc/pam.d/login
这个文件最后一句是

session    optional     pam_console.so

在这句后面加上

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


3、修改system-auth文件

vi /etc/pam.d/system-auth

a、找到以“auth”字符串开头并调用“pam_unix.so”的语句,如下:

auth        sufficient    /lib/security/$ISA/pam_unix.so likeauth nullok

在这一句最后加上字符串“use_first_pass”,如下:

auth        sufficient    /lib/security/$ISA/pam_unix.so likeauth nullok  use_first_pass

然后在这一句上面加上语句:

auth        sufficient    /lib/security/pam_winbind.so


b、找到以“account”字符串开头并调用“pam_unix.so”的语句,如下:

account     required      /lib/security/$ISA/pam_unix.so

在这一句最后加上字符串“use_first_pass”,如下:

account     required      /lib/security/$ISA/pam_unix.so use_first_pass

然后在这一句上面加上语句:

account     sufficient    /lib/security/pam_winbind.so


四、用PDC用户登录测试
在linux中某个终端以PDC用户登录,能够看到$提示符,说明配置完成。