服务热线

136 0244 7383

利用winbind让windows和linux系统帐号同步

2021-02-12 18:50:38 2178

测试环境:
操作系统:redflagDC4.1 samba版本:samba-3.0.2a-9AX ip:172.16.100.2
需要安装的软件:samba samba-common krb5-libs krb5-workstation

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]段设置中有下面几行:
   workgroup = CN
   server string = %h (Samba Server)
   printcap name = /etc/printcap
   load printers = yes
   cups options = raw
   log file = /var/log/samba/%m.log
   max log size = 50
   security = user
   socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
   wins support = yes
   wins server = 192.168.0.13 192.168.0.14
   wins proxy = yes
   dns proxy = no
   acl compatibility = win2k
   idmap uid = 16777216-33554431
   idmap gid = 16777216-33554431
   password server = 192.168.0.14 192.168.0.13 192.168.0.23
   map to guest = bad user
   guest ok = no
   security = ADS
   realm = CN.EXAMPLE.COM
   encrypt passwords=yes
   winbind use default domain = yes
   template homedir = /home/%D/%U
   template shell = /bin/bash
 
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这样的用户名了。

4、设置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 = CN.EXAMPLE.COM
 dns_lookup_realm = false
 dns_lookup_kdc = false

[realms]
 CN.EXAMPLE.COM = {
  kdc = 192.168.0.14
  kdc = 192.168.0.13
  master_kdc = 192.168.0.23
#  admin_server = kerberos.example.com:749
  default_domain = CN.EXAMPLE.COM
 }

[domain_realm]
.cn.example.com = CN.EXAMPLE.COM
 cn.example.com = CN.EXAMPLE.COM

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

[appdefaults]
 pam = {
   debug = false
   ticket_lifetime = 36000
   renew_lifetime = 36000
   forwardable = true
   krb4_convert = false
 }

 
5、用samba的net join命令把这台机器加入到windows200x域中(samba3.0以上的版本可以支持)
#net rpc join -U Administrator   或
#net ads join -U Administrator
然后输入域管理员密码,也就是Administrator的密码。
如果有报错,就先kinit username@cn.exsample.com查看一下是否正常。
另外也可以使用authconfig直接添加

 
6、启动samba服务和winbindd服务
#service smb start
#service winbind start
 
7、用wbinfo命令查看用winbindd服务连接PDC抓到的域内的用户和组的信息
#wbinfo -u
 
8、检查PDC用户(组)转换为本地用户(组)UID和GIU情况:
#getent passwd
PDC用户Administrator的UID从10000开始。
 
#getent group
显示将PDC用户转换成系统用户的GID情况,显示最后类似如下信息:
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认证文件
 
2、修改/etc/pam.d/login文件
auth       required     pam_securetty.so
auth       required     pam_stack.so service=system-auth
auth       required     pam_nologin.so
account    required     pam_stack.so service=system-auth
password   required     pam_stack.so service=system-auth
session    required     pam_selinux.so close
session    required     pam_stack.so service=system-auth
session    required     pam_loginuid.so
session    optional     pam_console.so
session    required     pam_mkhomedir.so skel=/etc/skel umask=0022
session    required     pam_selinux.so open
 
 
3、修改/etc/pam.d/system-auth文件
auth    required      /lib/security/$ISA/pam_env.so
auth   sufficient    /lib/security/pam_winbind.so
auth   sufficient    /lib/security/$ISA/pam_unix.so likeauth nullok  use_first_pass
auth   required      /lib/security/$ISA/pam_deny.so
account     sufficient    /lib/security/pam_winbind.so
account     required      /lib/security/$ISA/pam_unix.so use_first_pass
account     sufficient    /lib/security/$ISA/pam_succeed_if.so uid < 100 quiet
account     required      /lib/security/$ISA/pam_permit.so
password    requisite     /lib/security/$ISA/pam_cracklib.so retry=3
password    sufficient    /lib/security/$ISA/pam_unix.so nullok use_authtok md5 shadow
password    required      /lib/security/$ISA/pam_deny.so
session     required      /lib/security/$ISA/pam_limits.so
session     required      /lib/security/$ISA/pam_unix.so
 
c 修改/etc/pam.d/sshd
auth sufficient /lib/security/pam_winbind.so
auth       required     pam_stack.so service=system-auth
auth       required     pam_nologin.so
account    sufficient   /lib/security/pam_winbind.so
account    required     pam_stack.so service=system-auth
password   required     pam_stack.so service=system-auth
session    required     pam_stack.so service=system-auth
session    required     pam_loginuid.so
session required /lib/security/pam_mkhomedir.so
 
 
四、用PDC用户登录测试
在linux中某个终端以PDC用户登录,能够看到$提示符,说明配置完成。