使用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协议是否可以正常运行。
遇到的一些问题:
一、
kinit(v5): Cannot find KDC for requested realm while getting initial credentials
原因:客户端主
DNS未指向域控制器
解决:
编辑文件
/etc/resolv.conf,将nameserver的值修改成域控制器的IP地址。
二、
[root@nn]# kinit administrator @ask.com
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
三、
kinit(v5): KDC reply did not match expectations while getting initial credentials
解决:使用大写的域名
[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