工作需求,需要samba服务器使用Active Directory来进行身份认证。折腾了一段时间,终于配置起来了。

Windows 2003域环境的搭建不多说了,网上很多教程,而且都是点鼠标的操作,没啥技术含量,着重讨论Linux的Samba服务器支持域认证的配置过程。

Win 2003 Server作为域控制器,客户端提交的认证请求和授权的过程是通过Kerberos5协议来完成的,所以要让Linux的samba服务器支持域认证,首先需要将Kerberos配置好。看我的配置文件

[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
default_realm = MNKW.COM  #指定域
dns_lookup_realm = false
dns_lookup_kdc = true
ticket_lifetime = 24h
forwardable = yes
[realms]
MNKW.COM = {
kdc = 192.168.6.37:88  #设置密钥分发中心的接口,即域控制器的IP
admin_server = 192.168.6.37:749
default_domain = MNKW.COM
}
[domain_realm]
.mnkw.com = MNKW.COM  #指定域
mnkw.com = MNKW.COM     #指定域
[appdefaults]
pam = {
debug = false
ticket_lifetime = 36000
renew_lifetime = 36000
forwardable = true
krb4_convert = false
}

在配置好以上之后,需要执行kinit来验证和初始化kerberos协议是否可以正常运行。

遇到的一些问题:

一、

[root@Gh0st CentOS]# kinit test111@mnkw.com
kinit(v5): Cannot find KDC for requested realm while getting initial credentials

原因:客户端主DNS未指向域控制器

解决:

编辑文件/etc/resolv.conf,将nameserver的值修改成域控制器的IP地址。

二、

[root@Gh0st CentOS]# kinit test111@mnkw.com
Password for test111@mnkw.com:
kinit(v5): Clock skew too great while getting initial credentials

原因:

客户端与认证服务器的时间差距太大,将客户端与认证服务器的时间同步即可

解决:

安装ntp软件,执行ntpdate  –b 192.168.6.37(域控制器的IP),时间被同步

[root@Gh0st CentOS]# ntpdate  -b 192.168.6.37
17 Sep 12:32:05 ntpdate[10302]: step time server 192.168.6.37 offset 2537.194742 sec

三、

[root@Gh0st CentOS]# kinit test111@mnkw.com
Password for test111@mnkw.com:
kinit(v5): KDC reply did not match expectations while getting initial credentials

解决:使用大写的域名

[root@Gh0st CentOS]# kinit administrator@MNKW.COM
Password for administrator@MNKW.COM:
[root@Gh0st CentOS]#

至此,kerberos的协议已经配置完成。

下面,需要将samba服务器加入域,看配置过程:

首先配置/etc/nsswitch,使之作为winbind组建运行。

passwd:     files winbind
shadow:     files
group:      files winbind

编辑samba服务的配置文件/etc/samba/smb.conf

[global]
workgroup = MNKW #指定工作组名
server string = Samba Server Version %v
# Insert Start –snowkey
display charset = gb2312
dos charset     = gb2312
unix charset    = gb2312
# Insert End   –snowkey
# logs split per machine
log file = /var/log/samba/%m.log
# max 50KB per log file, then rotate
max log size = 50
# ———————– Domain Members Options ————————
#
# Security must be set to domain or ads
#
security = domain  #设置安全等级,只能为domain或者ads
realm = MNKW.COM #认证服务器域名,所有认证信息都将由该服务器来提供。
password server = 192.168.6.37 #密码服务器地址,用于存放身份信息
encrypt passwords = yes
# ———————– Browser Control Options —————————-
os level = 20
#—————————– Name Resolution ——————————-
# DNS Proxy – tells Samba whether or not to try to resolve NetBIOS names
# via DNS nslookups.
dns proxy = no
# ————————— Printing Options —————————–
#
# Load Printers let you load automatically the list of printers rather
# than setting them up individually
#
load printers = yes
cups options = raw
# —————– winbind  drinkey added—————-#
netbios name = KWSystem-S  #设置NetBIOS名称,注意不能重名,其他都可使用如下值
idmap uid = 15000-20000
idmap gid = 15000-20000
winbind enum groups = yes
winbind enum users = yes
winbind separator = /
template homedir = /data1/file/smbs/%U
template shell = /bin/bash
#============= Share Definition================
[homes]
comment = Home Directories
path= /data1/%U  #通过身份认证的用户的家目录
browseable = no  #是否能够浏览其他用户的共享
writable = yes    #是否可写
valid users = %D/%U  #允许的用户
create mode = 0777
directory mode = 0777
root preexec = /shell/mkhome.sh %U %G #登录成功后,执行该脚本,用于给第一次登录成功的用户创建家目录。

打印机配置,可以不用管,不需要的话可以删掉 或者注释掉。

[printers]
comment = All Printers
path = /var/spool/samba
browseable = no
guest ok = no
writable = no
printable = yes

配置好这些,SAMBA可以支持域认证了,但是还是没有办法使用。

为了让用户在本地拥有对应的家目录,使用一个脚本来实现认证成功的用户创建目录。

#!/bin/bash
user=$1
group=$2
home=/data1/$1
if [ ! -d $home ];then
mkdir -p $home
chown $user $home
chgrp $group $home
chmod 777 $home
fi

重启smb和winbind

service smb restart
service winbind restart

接下来使samba加入域

[root@Gh0st samba]# net rpc join -U administrator
Password:
Joined domain MNKW.

测试加入域是否成功。

[root@Gh0st samba]# net rpc testjoin
Join to ‘MNKW’ is OK

建立主机信任关系。

#wbinfo -t
checking the trust secret via RPC calls failed
error code was (0x0)
Could not check secret

重新运行winbind即可

#wbinfo -u
Error looking up domain users

没有设置首选DNS

编辑/etc/reslov.conf

添加nameserver 192.168.6.37

最后,需要将winbind设为开机启动

chkconfig –level 3 winbind on

此后,重启了系统之后,winbind会初始化协议,加入域,并与域控制器建立信任关系即可成功使用域账号登陆系统。

91ri.org评:我今天折腾了一天的linux加入windows域,各种出错各种蛋疼,现在终于解决了,考的就是这篇文档,下载于百度文库,文章作者匿名,虽然不知道作者是谁但是还是特别感谢一下作者!同时刚才下载文档的时候遇到了没有百度积分的问题,发到几个群里有好多朋友很热情的就直接给我秒下来了,在这里感谢一下他们!表着人人为我 我为人人的口号 发文章出来与大家共享 希望能帮到跟我一样遇到这种蛋疼问题的人。