本文实现了
samba
服务被访问的时候经过
windows
域服务器进行用户名和密码验证
;
认证经过的用户能够自动分配
500M
的共享空间
;
在用户经过
windows
域登录系统的时候能够自动把这块空间映射成一块硬盘。
环境说明:
文件服务器用的
Centos5.3
,域控用的
Win2k3 sp2
,
Domain
是
rainbird.net
。
Centos5.3:
Name:Filesrv
IP:192.168.1.245
Dns:192.168.1.241
Samba:
3.0.33
-3.7.el5
Win2k3:
Name:ad1
Ip:192.168.1.241
Dns:192.168.1.241
Ok,let’s move!
由于是服务器配置,因此本文的操做都是在字符界面下直接编辑文件。固然为了提升工做效率其中一部分配置是能够在图形界面下配的。前提是你必须是
redhat/centos
系统。若是是的话,能够参考我上一篇文章
<<
linux加入windows域之完美方案
>>
来作
J
1.samba
服务器软件需求
krb5-workstation-
1.2.7
-19
pam_krb5-1.70-1
krb5-devel-1.2.7-19
krb5-libs-1.2.7-19
samba-3.0.5-2
[root@filesrv CentOS]# rpm -qa|grep krb5
krb5-auth-dialog-0.7-1
krb5-libs-
1.6.1
-25.el5
krb5-devel-
1.6.1
-25.el5
pam_krb5-
2.2.14
-1
krb5-workstation-
1.6.1
-25.el5
[root@filesrv CentOS]# rpm -qa|grep samba
samba-swat-
3.0.28
-0.el5.8
samba-common-
3.0.28
-0.el5.8
samba-client-
3.0.28
-0.el5.8
samba-
3.0.28
-0.el5.8
若是
centos
在安装的时候没有取消默认选中的
”Base”,
则
krb5
的包是默认所有安装
若是没有选择安装
samba
能够这样安装
[root@filesrv CentOS]# rpm -ivh xinetd-
2.3.14
-10.el5.i386.rpm
[root@filesrv CentOS]# rpm -ivh --aid samba*.rpm
2.
配置
kerberos(
关键
)
下面配置参数让
Kerberos
进程知道处理活动目录服务器,对
/etc/krb5.conf
作适当的修改,修改时须要注意的是
Kerberos
是大小写敏感的。
这是个人
krb5.conf
配置文件:
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
ticket_lifetime = 24000
default_realm =
RAINBIRD.NET
//
默认域名
dns_lookup_realm = false
dns_lookup_kdc = false
[realms]
RAINBIRD.NET
= {
kdc = 192.168.1.241:88
//
域服务器
ip
# admin_server = kerberos.example.com:749
default_domain = RAINBIRD.NET
}
[domain_realm]
. rainbird.net = RAINBIRD.NET
rainbird.net = RAINBIRD.NET
[kdc]
profile = /var/kerberos/krb5kdc/kdc.conf
[appdefaults]
pam = {
debug = false
ticket_lifetime = 36000
renew_lifetime = 36000
forwardable = true
krb4_convert = false
}
3.
测试
kerberos
kinit administrator@RAINBIRD.NET
kinit
命令将测试服务器间的通讯,
administrator
为域内存在的用户,
RAINBIRD.NET
是你的活动目录的域名,必须大写。
正确操做的提示
:
[root@filesrv~]# kinit administrator@RAINBIRD.NET
Password for administrator@RAINBIRD.NET: (
正确输入密码后直接返回
)
[root@filesrv~]#
可能遇到的几个常见错误
:
域名错误:
kinit(v5): Cannot find KDC for requested realm while getting initial credentials.
密码错误,验证失败:
kinit(v5): Preauthentication failed while getting initial credentials.
用户不存在
:
kinit(v5): Client not found in Kerberos database while getting initial credentia
时间不一致
:
kinit(v5): Clock skew too great while getting initial credentials
4.
修改
/etc/nsswitch.conf
passwd: files
winbind
shadow: files
winbind
group: files
winbind
5.
配置
samba
修改
/etc/samba/smb.conf
以下几行
workgroup = RAINBIRD
server string = Filesrv
password server = AD1.RAINBIRD.NET
//
域服务器
,
能够用
ip
也能够用域名
realm = RAINBIRD.NET
//
活动目录服务器域名
security = ads
//
采用活动目录认证方式
idmap uid = 16777216-33554431
idmap gid = 16777216-33554431
template shell = /sbin/nologin
template homedir = /home/%U
winbind use default domain = true
winbind offline logon = true
winbind enum groups = yes
winbind enum users = yes
winbind separator = /
红色部分是要修改的,蓝色部分是要新增的。建议直接把已经存在的注释掉,把这里列出来的东西,直接放进去,这样在一块方便查找。
咱们如今把
samba
服务器加入
windows
域。
[root@filesrv1 samba]# net ads join -U administrator@RAINBIRD.NET
administrator@RAINBIRD.NET's password:
Using short domain name -- RAINBIRD
Joined 'FILESRV1' to realm 'RAINBIRD.NET'
提示是
”Joined”
哟
~
加入失败可能的缘由
:
两台机器的时间不一致!
从新启动服务
service smb restart
service winbind restart
设定服务开机自动启动
chkconfig smb on
chkconfig winbind on
我们去
Windows 2003
服务器上检查一下:打开活动目录用户和计算机,查看其中的条目,若是成功的话,就能够看到你的
Linux
服务器。
这里样你能够用
wbinfo
作一些测试
验证
Samba
主机已成功加入
AD
[root@filesrv samba]# wbinfo -t
checking the trust secret via RPC calls succeeded
说明主机信任已成功创建
使用
wbinfo –u
能够列出
AD
中注册的账号信息
[root@filesrv samba]# wbinfo -u
administrator
guest
support_388945a0
krbtgt
rainbird
rainbow
a
a1
a2
root
a3
a4
a5
a6
a7
a8
a9
a10
Wbinfo –g
能够返回
AD
中的组信息
[root@filesrv samba]# wbinfo -g
domain computers
domain controllers
schema admins
enterprise admins
domain admins
domain users
domain guests
group policy creator owners
dnsupdateproxy
可能的错误
若是你
wbinfo –t
测试的时候提示以下:
[root@filesrv samba]# wbinfo -t
checking the trust secret via RPC calls failed
error code was (0x0)
Could not check secret
说明你
winbind
服务没起动,重启一下就
OK
了
固然了有必要说一下,
winbind
若是提示启动成功但没有启动的话,有多是由于你没有加入到域,因此严格按本文的操做步骤来作,你不会错过
J
6.
自动建立用户目录
细心的朋友可能发现从开篇一直到如今除了操做方式不必定之外,所作的事情和
<<
linux加入windows域之完美方案
>>
没有太大的区别。嗯,笔者不置能否,估且这么理解吧。但愿有点小细节您注意到了,在
smb.conf
中,有一句
template shell = /sbin/nologin
。是的,
samba
服务器,咱们只但愿他提供
samba
服务,不但愿有用户登录。在上一篇文章中解决用户登录时主目录不存在的问题,用的是
pam_mkhomedir.so
这个东东。在文件共享这块,笔者意外的发现,这个文件,对于经过
samba
访问过来的请求不会建立主目录!这可如何是好?这就是脚本
mkhome.sh
存在的缘由。
#!/bin/bash
user=$1
group=$2
home=/home/$1
if [ ! -d $home ] ; then
mkdir -p $home
chown $user $home
chgrp $group $home
chmod 700 $home
edquota -p administrator -u $user
fi
这个脚本接受两个参数,一个是用户名,一个是组名。而后给这个用户建立目录,并分配权限,而后再给分配一下用户空间。
Ok,
回头看一下
smb.conf
文件。
[homes]
comment = Home Directories
path = /home/%U //
共享的目录
valid users = rainbird.net/%U //
认证的用户,前面必须加
rainbird.net
哟
read only = No
browseable = No
root preexec = /root/mkhome.sh %U %G //
执行建立目录的操做。
这段配置中最帅的就是这个
mkhome.sh
的存在。由于这个脚本的执行者是
root,
因此咱们脚本的权限设置
700
便可。再往下咱们将继续探索它的神奇魔力。写完这段保存一下,重启
smb:service smb restart
。这样,在一台
xp
的机器上,用域用户登录,而后访问
\\192.168.1.246,
是否是看到了一个以你登录的域用户名命名的一个文件夹呢?没错,就是它!你如今能够试下删写文件了。怎么有问题?有问题就本身检查一下,为何吧
J
7.
设置磁盘配额
由于磁盘配额只能在一块单独的分区上启用,因此笔者专门添加了一块分区挂载到
home
目录下,这点要注意。
编辑
fstab
[root@filesrv1 ~]#vi /etc/fstab
/dev/hdb1 /home ext3 defaults,usrquota,grpquota
选择分区,将defaults选项改成:“defaults,usrquota,grpquota”(针对用户和组作磁盘配额)或“defaults,usrquota"(针对用户作磁盘配额 )或"defaults,grpquota"(针对组作磁盘配额)
从新挂载文件系统:
[root@filesrv1 ~]#mount –o remount /home
建立配额文件
[root@filesrv1 ~]#quotacheck –cmug /home
启动配额
[root@filesrv1 ~]#quotaon -av
配额设置
[root@filesrv1 ~]# edquota -u administrator
Disk quotas for user administrator (uid 16777216):
Filesystem blocks quota limit grace files quota limit grace
/dev/sdb1 0 500000 512000 10 0 0
(其中:blocks,已用磁盘空间;soft,磁盘空间软限制,hard:磁盘空间硬限制;
inodes
: 已写多少个文件;soft:磁盘文件数量软限制;hard:磁盘文件数量硬限制)
查看磁盘配额状况
[root@filesrv1 home]#quota -u administrator
分析:使用磁盘限额有一点不爽的地方就是它不是默认给全部的用户设置限额。也就是说,若是你想给哪一个用户启用磁盘限额,你必须先创建那个用户,而后再针对那个用户进行限制。但是在域里,咱们全部的用户已经创建好了?怎么一个一个的给进行磁盘限额呢?还好edquota提供了这么一个特性,就是你能够以一个用户为模板,把配置复制给新用户,这样就简单了,若是要手动给用户分配限额的话,这样就能够搞定:wbinfo –u|xargs|
edquota -p administrator –u
。这样咱们就把
administrator
这个用户的配额状况
”
分发
”
给了全部用户!
还记得咱们的mkhome.sh吗?是的,就是它,里面有这第一句
edquota -p administrator -u $user
,这句话的意思就是以
administrator
为模板给用户设置磁盘限额。这样写在脚本里,不但省去了手工执行,新添加用户也不怕了
J
8.
域用户登录自动挂载本身的共享文件夹
嘿嘿,能作到这步,已经很不容易了,若是你作到了,那么恭喜你,由于终点就在眼前了。到这一步,你已经成功完成了samba经过ad域进行验证,并给验证用户分配500M的固定空间,如今就让咱们一气呵成,将这个优雅的高难度动做画个完美的句号吧J
咱们知道windows有个“映射网络驱动器”的功能。今天用到的东东就是它。其实原理很简单,就是咱们写个批处理,这个批处理的功能是得到登录用户的用户名,而后去链接共享。而用户登录的时候就自动执行这个批处理。是否是很好玩呢?
这个操做在域服务器上进行。在服务器上有个路径C:\WINDOWS\SYSVOL\sysvol\rainbird.net\scripts,把你想要域用户登录执行的脚本放在这个文件里就能够了。
Share.cmd里面的内容是:
@echo off
if exist P: net use P: /del /y
这个文件的权限要设置成everyone读取。否则后域用户登录的时候会报错的哟。这样还不算完。再配置一下。打开“active directory 用户和计算机”找到users,多选你要分配空间的用户,如图,选择属性。
找到“配置文件”选中“登录脚本”,在后面的框里输入“share.cmd”
这样,被选中的用户下次再登录的时候就被“强制”执行这样脚本。固然这个策略不知道要多长时间才能分发下去。若是你如今就想让它生效,那么:gpupdate /force!
域用户登录之后在个人电脑就会看到这块共享盘
就是FileSrv那个了。双击打开,就像操做本地硬盘同样方便。
能够添加修改文件。至于空间是否是限定了500M,那就本身试一下吧J(或者去linux quota查询也能够哟~~)
Samba的故事到这里就讲完了。再下一步就是samba群集了。Move on ,Let’s go!
相关连接: