使用kerberos实现windowsAD账户和linuxsamba服务的结合

 使用Active Directory来进行身份认证,主要是通过linux下的kerberos服务器来认证windows下的用户,达到windows AD域用户在linux下的使用,实现windows域控下的账户在linux各种服务上认证,同一管理账号,方便samba、postfix、FTP等。如使用AD域下的aa账户登录linux下的samba(aa的samba目录)或ftp,或发送邮件等。首先要把linux主机也加入到windows域中。

主机名   系统                                             ip地址                   用途 
aa-kk       windows server2003 AD     192.168.40.199       AD域控制器,用于账号管理
nn            centos 或RHEL 5.5             192.168.40.175      搭建各个服务,如samba、postfix、FTP等
qq           xp                                         192.168.40.20        客户端,用于测试samba、postfix等,实现windows域控制的账户和linux服务之间的结合。
环境如下:
aa-kk是域名为ASK.COM的域控制器,dns指向自己。linux下的dns也指向改域控制器的ip地址,且linux下可以ping通aa-kk.ask.com的出来的ip地址是192.168.40.199.也就是说解析正反向地址成功。还有最重要的是时间同步

先来理解几个概念:
PDC:主域控制器,一般用来做验证
BDC:备份域控制器,一般用于和主域做同步帐号等操作
KDC:密钥分发中心,说白了,就是kerbrose服务器。这个需要对kerbrose有一定的了解,这里不多说了
PAM:可插拔认证模块,这玩意就是使用不同的验证方法来验证你所需要的服务,比如sshd,login,ftp等。这些服务都对应一个配置文件,这个配置文件位于/etc/pam.d/下。而支持这些验证的动态库位于/lib/security/下。
SRV:服务器定位资源记录,要使 活动目录正常工作,DNS必须支持SRV。活动目录客户端和域控制器使用SRV记录决定域控制器的ip地址。使用SRV记录决定域控制器的ip地址,具体请参见 http://www.linuxidc.com/Linux/2009-12/23261p4.htm

Win 2003 Server作为域控制器,客户端提交的认证请求和授权的过程是通过Kerberos5协议来完成的,所以要让Linux的samba服务器支持域认证,
首先需要将Kerberos配置好。需要的软件包有
yum install samba samba-swat samba-client krb5* gcc ntp pcre-devel gmp-devel -y配置yum安装完成
[root@nn ~]# cat /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 = ASK.COM                                          ##指定域名
 dns_lookup_realm = false
 dns_lookup_kdc = true
[realms]
ASK.COM = {                                                               ##指定域名
  kdc = 192.168.40.199:88                                              ##指定域名的ip地址
  admin_server = 192.168.40.199:749                              ##指定域名的ip地址
  default_domain = ask.com                                              ##指定域名
 }
[domain_realm]
 .resoft.css.com.cn = ASK.COM                                     ##指定域名
 resoft.css.com.cn = ASK.COM                                      ##指定域名
[kdc]
 profile = /var/kerberos/krb5kdc/kdc.conf                        ##指定配置文件的路径

[appdefaults]
 pam = {
   debug = false
   ticket_lifetime = 36000
   renew_lifetime = 36000
   forwardable = true
   krb4_convert = false
 }
[root@nn ~]#
 
在配置好以上之后,需要执行 kinit来验证和初始化kerberos协议是否可以正常运行。
遇到的一些问题:
一、
[root@nn]# kinit [email protected]
kinit(v5): Cannot find KDC for requested realm while getting initial credentials
原因:客户端主 DNS未指向域控制器
解决:
编辑文件 /etc/resolv.conf,将nameserver的值修改成域控制器的IP地址。
 
二、
[root@nn]# kinit administrator @ask.com
Password for [email protected]:
kinit(v5): Clock skew too great while getting initial credentials
原因:
客户端与认证服务器的时间差距太大,将客户端与认证服务器的时间同步即可
 
解决:
安装 ntp软件,执行ntpdate  –b 192.168.40.199(域控制器的IP),时间被同步
[root@nn]# ntpdate  -b 192.168.40.199
17 Sep 12:32:05 ntpdate[10302]: step time server 192.168.6.37 offset 2537.194742 sec
 
三、
[root@nn]# kinit [email protected] 
Password for [email protected]:
kinit(v5): KDC reply did not match expectations while getting initial credentials
 
解决:使用大写的域名
[root@nn]# kinit [email protected]
Password for [email protected]:
[root@nn]#

例子:使用windows AD域账户使用linux下的samba
配置samba的配置文件 /etc/samba/smb.conf
[root@nn ~]# cat /etc/samba/smb.conf
[global]
   workgroup = ASK                                              ###工作组
   netbios name = nn.ask.com                                 ###网络的显示名
   server string = Samba Server                              ###服务器描述
   printcap name = /etc/printcap
   load printers = yes
   cups options = raw
   log file = /var/log/samba/%m.log
   max log size = 50
   security = domain                                              ###使用域认证方式
   realm = ASK.COM                                          ###制定的域名
   password server = aa-kk.ask.com                     ###密码验证的服务器名字
   encrypt passwords = yes
   socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
   dns proxy = no
   winbind separator = /
   idmap uid = 1000000-2000000
   idmap gid = 1000000-2000000
   template homedir = /home/%D/%U                  ###用户的家目录有在/home/ask/用户名
   template shell = /bin/bash
   winbind use default domain = yes 
   winbind enum users = yes
   winbind enum groups = yes
[homes]
   comment = Home Directories
   browseable = no
   writable = yes
   create mode = 0777
   directory mode = 0777
   path = /home/%D/%U
   valid users = ask.com/%U
   read only = No
   browseable = No
   root preexec = /root/mkhome.sh %U %G        ###创建家目录的脚本是mkhome.sh
[printers]
   comment = All Printers
   path = /var/spool/samba
   browseable = no
   guest ok = no
   writable = no
   printable = yes
[root@nn ~]#

注释:valid users = %D/%U  这里记得把域名带上,否则你用ad帐号访问samba服务器时输入正确的ad帐号和密码仍然不能访问共享目录
 

启动smb服务以及winbind服务
service smb start
service winbind start

让linux加入到域控制中

1、使用net加入AD域
[root@leeldap pam.d ]# net rpc join -S aa-kk.ask.com -U administrator
Password:
Joined domain ASK
2、测试是否加入成功
重启winbind服务
wbinfo -t 或 wbinfo -u 或wbinfo -g等或者查看windows的AD域下的computer里面是否多出来了一个主机名为nn.ask.com的主机,该主机为linux。
[root@leeldap pam.d]# net rpc testjoin
Join to 'ASK' is OK
[root@leeldap pam.d]# wbinfo -t
checking the trust secret via RPC calls succeeded
[root@leeldap pam.d]# wbinfo -u
3、配置 /etc/nsswitch.conf    使用账户、密码和组信息认证账户
passwd:      files winbind
shadow:      files winbind
group:         files winbind
4、接下来我们要修改几个配置文件完成linux下的各个服务的认证 /etc/pam.d/system-auth
4.1、配置samba服务的  (注意两行的位置)
auth        required      pam_env.so
auth        sufficient    /lib/security/pam_winbind.so
auth        sufficient    pam_unix.so nullok try_first_pass
auth        requisite     pam_succeed_if.so uid >= 500 quiet
auth        required      pam_deny.so

account     required      pam_unix.so
account     sufficient    /lib/security/pam_winbind.so
account     sufficient    pam_succeed_if.so uid < 500 quiet
account     required      pam_permit.so

password    requisite     pam_cracklib.so try_first_pass retry=3
password    sufficient    pam_unix.so md5 shadow nullok try_first_pass use_authtok
password    required      pam_deny.so

session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so
测试:客户端xp的运行里输入 \\192.168.40.175  然后弹出对话框输入用户名和密码。
启动smb和winbind服务
service smb reload   #加这一句是用来解决有时候samba启动不了的问题 
service smb start
service winbind start

 

下面的脚本是自动建立AD账户的个人目录
#vi /root/mkhome.sh
#!/bin/bash
user=$1
group=$2
home=/home/ASK/$1
 
if [ ! -d $home ] ; then
mkdir -p $home
chown $user $home
chgrp $group $home
chmod 700 $home
edquota -p administrator -u $user        ####建立和administrator相同的属性,如磁盘配额,家目录
fi
更改文件权限设置:
# chmod 700 /root/mkhome.sh
建立脚本需要的模板目录administrator。
# mkdir /home/ASK
# mkdir /home/ASK/administrator
# chown administrator /home/ASK/administrator

这个脚本接受两个参数,一个是用户名,一个是组名。然后给这个用户创建目录,并分配权限,然后再给分配一下用户空间。Ok,回头看一下smb.conf文件。
建立各个磁盘配额功能
启动配额功能

编辑fstab
[root@filesrv1 ~]#vi /etc/fstab
/dev/sdb1               /        ext3    defaults,usrquota,grpquota 1 1
可以重启机器也可以使用 mount -o remount / 来生效
创建配额文件
#quotacheck -cmug /  然后会在该目录下产生aquota.user和aquota.group两个文件
启动配额
#quotaon -av
/dev/sdb1 [/]: group quotas turned on
/dev/sdb1 [/]: user quotas turned on
配额设置
# edquota -u administrator
Disk quotas for user administrator (uid 1000002):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/sda3                         0          0          0          0        0        0
其中:blocks,已用磁盘空间;soft,磁盘空间软限制,hard:磁盘空间硬限制;单位为K
        inodes 已写多少个文件;soft:磁盘文件数量软限制;hard:磁盘文件数量硬限制

建立域用户登录自动挂载自己的共享目录
在windows的AD域的 C:\WINDOWS\SYSVOL\sysvol\ask.com\scripts目录下建立share.cmd文件内容如下
@echo off
if exist P: net use P: /del /y
net use P: \\192.168.40.175\%USERNAME%   并且该这个文件的权限为everyone:读取
再配一下AD,打开“active directory用户和计算机”找到“users”多选你要分配空间的用户,右键单击属性——找到“配置文件”选中“登录脚本”,输入“share.cmd”
最后在运行里输入“狗pupdate /force”运行后。当用户登录计算机时,默认出现fileser的盘符。
参考文档:http://rainbird.blog.51cto.com/211214/197794

 

 

 

 

 

 

你可能感兴趣的:(samba,kerberos,windowsad)