魏春兵 2008-08-27 (此文章是总结网上大量AD结合samba的实例加上自己亲身试验所做笔记)
环境:
Windows 2003 Server R2 Linux Samba's Server
IP地址 192.168.0.254 192.168.0.251
DNS 192.168.0.254 192.168.0.254
hostname Limaoco-dc Server1
域 Limaoco.com
一、 先安装samba服务器
这里事前配置好了本地的yum仓库
Yum –y install samba*
二、再编辑krb5
vim /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 = LIMAOCO.COM
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 24h
forwardable = yes
[realms]
EXAMPLE.COM = {
kdc = 192.168.0.254:88
admin_server = 192.168.0.254:749
default_domain = LIMAOCO.COM
}
[domain_realm]
.limaoco.com = LIMAOCO.COM
limaoco.com = LIMAOCO.COM
[appdefaults]
pam = {
debug = false
ticket_lifetime = 36000
renew_lifetime = 36000
forwardable = true
krb4_convert = false
}
然后调整系统时间,使系统时间与域控时间不能相统一,时间相差不能超过半小时
Ntpdate 192.168.0.254
调整完时间利用Kinit工具测试krb5的设置是否正确
kinit administrator@LIMAOCO.COM
password :
输入password 后返回success 字符或直接返回命令行表示成功通信,其它的信息表明不能正常通信。
klist 可以查看有效凭证时间
三、然后编辑samba与域用户相结合
vim /etc/samba/smb.conf
[global]
workgroup = CJJM
idmap gid = 10000-20000
idmap uid = 10000-20000
password server = 192.168.0.254
security = ads
realm = LIMAOCO.COM
winbind enum users = yes
winbind enum groups = yes
socket ōptions = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
log file = /var/log/samba/%m.log
winbind separator = +
winbind use default domain = yes
os level = 33
interfaces = 192.168 eth0
bind interfaces ōnly = true
printing = cups
printcap name = /etc/printcap
load printers = yes
可根据自身网络需求加入如下语句:
include = /etc/samba/conf/smb.%G.%G.conf
注意:在共享目录的时候 切忌权限问题。
可使用 create mask = 0766
Directory mask = 0777
等的umask 权限
以上语句是做文件服务器的时候针对用户,组设置的动态共享
注意:如这里使用
config file = /etc/samba/conf/smb.%G.%U.conf
可能会出现AD用户无法登陆samba的现象。
(conf目录可自定义,且smb.%G.%U.conf需要用户按照个人需求自行建立共享目录和路径,%G必须和AD的组名一直,注意大小写)
以上可根据自已的实际情况而修改
重启samba、winbind,然后将机子加入windows域。
/etc/init.d/smb restart
/etc/init.d/winbind restart (failed) ?????
winbind 为什么会起动不了?
答案是应先执行samba重启,然后再将机子加入域,然后才重启winbind
net ads join -U administrator@LIMAOCO.COM
[2008/04/03 08:17:38, 0] libads/kerberos.c:create_local_private_krb5_conf_for_domain(651)
create_local_private_krb5_conf_for_domain: failed to create directory /var/lib/samba/smb_krb5. Error was 权限不够
如果加入域的时候出现这样的错误,估计是selinux的问题,将selinux禁止吧!
vim /etc/sysconfig/selinux
change to SELINUX=disabled
再一次执行 net ads join -U administrator@LIMAOCO.COM
Using short domain name – LIMAOCO-DC
Failed to set servicePrincipalNames. Please ensure that
the DNS domain of this server matches the AD domain,
Or rejoin with using Domain Admin credentials.
Deleted account for 'SERVER1' in realm 'LIMAOCO.COM'
Failed to join domain: Type or value exists
又失败??看到原因了吧,是主机名的问题,怎办?那就改呗!
vim /etc/sysconfig/network
加入 HOSTNAME=server1.limaoco.com
vim /etc/hosts
192.168.0.248 server1.limaoco.com server1
好了,重启机子吧!
重启后再执行 net ads join -U administrator@LIMAOCO.COM
终于OK了,
administrator@LIMAOCO.COM's password:
Using short domain name – LIMAOCO.COM
Joined 'SERVER1' to realm 'LIMAOCO.COM'


现在重启samba 、winbind 吧
etc/init.d/smb restart
/etc/init.d/winbind restart
OK,全部都正常restart了!
用以下命令测试一下
wbinfo -t 测试通信成功与否 checking the trust secret via RPC calls succeeded (返回此信息表示成功了)
wbinfo -u 查看域用户
wbinfo -g 查看组用户
getent group 查看在/etc/group 里生成映射域组用户 (看不到?)
getent passwd 查看在/etc/passwd 里生成映射域用户 (看不到?)
要先配制NSS
Nss为Name Service Switch,控制账号的验证。编辑/etc/nsswitch.conf,如下
vim /etc/nsswitch.conf
passwd: files winbind
shadow: files winbind
group: files winbind
再执行 getent group /getent passwd 就可以看到了!



通过ntlm验证程序来测试之前所做的配置是否正确
ntlm_auth --username=administrator
返回
NT_STATUS_OK: Success (0x0)
说明域账号administrator已经通过了AD的认证
修改以下内容 (通过samba访问的时候需要注意的)
[home]
path = /home/%D/%U
browsable = no
writable = yes
create mask = 0664
directory mask = 0775
前面不是看到/home/%D/%U 不过这里比较麻烦,AD账号的个人目录必须要手工的去创建,而不能说自动的检测是否已存在,不存在自动创建.不知道哪个高手能够说说有什么方法解决,我想到用脚本去做.但还在测试中...大家说说你们的高见
#mkdir /home/LIMAOCO-DC
#chmod -R 777 /home/LIMAOCO-DC
3.自动创建用户目录.
用到的文件pam_mkhomedir.so
在/etc/pam.d/sysconf-auth文件中的sesson部分添加一行
session required pam_mkhomedir.so silent skel=/etc/skel umask=0077
silent不打印创建目录信息
skel 告诉pam_mkhomedir.so拷贝/etc/skel里的文件到新创建的目录里.
umask 是创建的目录的权限
创建哪个目录是在smb.conf里的template homedir定义的
如图:
保存退出,重启一下X-window。再次用域用户登陆,是不是成功看到了久违的linux桌面呢?
Ok,到此为止,linux加入windows域的故事就讲完了。