TIPS:本文共有 7508 个字,阅读大概需要 16 分钟。
“Samba通过Windows域认证及磁盘配额”是一篇介绍如何在Samba网络中实现Windows域认证和磁盘配额管理的技术文章。该文章将介绍如何配置Samba,使其能够与Windows域进行认证对接,实现统一的用户管理和权限控制。同时,文章还将详细介绍如何设置磁盘配额,限制用户在Samba共享文件系统中的存储空间使用,从而有效管理存储资源。通过本文,读者将了解在Samba网络中如何实现对Windows域用户的认证和权限控制,以及如何应用磁盘配额来优化存储资源的使用。
本文大部分来源于互联网,可能是大家转载多次,已经无法追踪到原创人。在这里对原创表示感谢!也有一些内容是本人加入的(当然是来自),希望贴到这里对大家有帮助。
本文实现了samba服务被访问的时候通过windows域服务器进行用户名和密码验证;
环境说明:
文件服务器用的Centos5.5,域控用的Win sp2,Domain是
Centos5.5:
Name:cl
IP:192.168.1.111
Dns:192.168.1.135
Samba:3.0.33
Win:
Name:pdc
Ip:192.168.1.135
Dns:192.168.1.135
因为是服务器配置,所以本文的操作都是在字符界面下直接编辑文件。当然为了提高工作效率其中一部分配置是可以在图形界面下配的。前提是你必须是redhat/centos系统。
1.samba服务器软件需求
krb5-devel-1.6.1-36.el5_5.5
pam_krb5-2.2.14-15
krb5-auth-dialog-0.7-1
krb5-libs-1.6.1-36.el5_5.5
krb5-workstation-1.6.1-36.el5_5.5
[root@cl CentOS]# rpm -qa|grep krb5
krb5-devel-1.6.1-36.el5_5.5
pam_krb5-2.2.14-15
krb5-auth-dialog-0.7-1
krb5-libs-1.6.1-36.el5_5.5
krb5-workstation-1.6.1-36.el5_5.5
[root@clCentOS]# rpm -qa|grep samba
samba-3.0.33-3.29.el5_5.1
samba-client-3.0.33-3.29.el5_5.1
samba-swat-3.0.33-3.29.el5_5.1
samba-common-3.0.33-3.29.el5_5.1
system-config-samba-1.2.41-5.el5
如果centos在安装的时候没有取消默认选中的”Base”,则krb5的包是默认全部安装,如果没有选择安装samba可以这样安装
[root@clCentOS]# rpm -ivh xinetd-2.3.14-10.el5.i386.rpm
[root@clCentOS]# 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 = //默认域名
dns_lookup_realm = false
dns_lookup_kdc = false
[realms]
= {
kdc =:88 //域服务器FQDN
admin_server = :749
default_domain =
}
[domain_realm]
. =
=
[kdc]
profile = /var/kerberos/krb5kdc/kdc.conf
#红色字体部分不是配置文件内容,只是给大家介绍如何添加kdc所指向的文件
#[kdc这项在安装Kerberos后没有,看了网上的资料自己加上的,没明白为什么没有
修改Kdc.conf
#vi /var/kerberos/krb5kdc/kdc.conf
[kdcdefaults]
v4_mode = nopreauth
kdc_tcp_ports = 88
[realms]
= {
#master_key_type = des3-hmac-sha1
acl_file = /var/kerberos/krb5kdc/kadm5.acl
dict_file = /usr/share/dict/words
admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab
supported_enctypes = des3-hmac-sha1:normal arcfour-hmac:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal des-cbc-crc:v4 des-cbc-crc:afs3
}
[appdefaults]
pam = {
debug = false
ticket_lifetime =36000
renew_lifetime =36000
forwardable = true
krb4_convert = false
}
3.测试kerberos
kinit administrator@
kinit 命令将测试服务器间的通信,administrator为域内存在的用户, 是你的活动目录的域名,必须大写。
正确操作的提示:
[root@cl~]# kinit administrator@
Password for administrator@: (正确输入密码后直接返回)
[root@cl~]#
可能遇到的几个常见错误:
域名错误:
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
group: files winbind
5.配置samba
修改/etc/samba/smb.conf如下几行
workgroup = CX
server string = CL
password server = //域服务器,可以用ip也可以用域名
realm = //活动目录服务器域名
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 = /
然后将机器加入至域
正确的命令:net rpc join -U administrator
之前也用过net ads join –U administrator@怎么也加进不去,用上面的命令就可顺利的加。当然要确保两机器之间的时间相差不要超过五分钟。
加入失败可能的原因: 两台机器的时间不一致!
重新启动服务
service smb restart
service winbind restart
你可能需要运行 chkconfig winbind on 让winbind 自动运行
设定服务开机自动启动
chkconfig smb on
chkconfig winbind on
咱们去Windows 服务器上检查一下:打开活动目录用户和计算机,查看其中的条目,如果成功的话,就可以看到你的 Linux 服务器。
这里样你可以用wbinfo做一些测试
验证Samba主机已成功加入AD
[root@cl samba]# wbinfo -t
checking the trust secret via RPC calls succeeded#说明主机信任已成功建立
使用wbinfo –gu可以列出AD中注册的组和用户信息
[root@cl bin]# wbinfo -gu
BUILTIN+administrators
BUILTIN+users
domain computers
domain controllers
schema admins
enterprise admins
domain admins
domain users
domain guests
group policy creator owners
dnsupdateproxy
administrator
guest
krbtgt
dd
aa
tt
可能的错误:如果你wbinfo -t 测试的时候提示如下:
[root@cl samba]# wbinfo -t
checking the trust secret via RPC calls failed
error code was (0x0)
Could not check secret
说明你winbind服务没起动,重启一下就OK了
当然了有必要说一下,winbind如果提示启动成功但没有启动的话,有可能是因为你没有加入到域,你在回顾看看一下配置过程
如果上面测试都ok说明你已经加入域名成功了
然后测试一下看你是不是在linux能不能看到AD上面用户在linux上的映射
[root@cl bin]# getent passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
.
..
..
..
avahi-autoipd:x:100:104:avahi-autoipd:/var/lib/avahi-autoipd:/sbin/nologin
xfs:x:43:43:X Font Server:/etc/X11/fs:/sbin/nologin
gdm:x:42:42::/var/gdm:/sbin/nologin
mos:x:500:500:mosquito:/home/mos:/bin/bash
administrator:*:16777000:16777000:Administrator:/home/CX/administrator:/bin/bash
guest:*:16777001:16777001:Guest:/home/CX/guest:/bin/bash
krbtgt:*:16777002:16777000:krbtgt:/home/CX/krbtgt:/bin/bash
dd:*:16777003:16777000:dd:/home/CX/dd:/bin/bash
aa:*:16777004:16777000:aa:/home/CX/aa:/bin/bash
tt:*:16777005:16777000:tt:/home/CX/tt:/bin/bash
如果有类似上面蓝色部分,说明你成功了 。马上去windows上试试...........
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 = /%U //认证的用户,前面必须加
read only = No
browseable = No
root preexec = /root/mkhome.sh %U %G //执行创建目录的操作。注意空格不可少
这段配置中最帅的就是这个mkhome.sh的存在。因为这个脚本的执行者是root,所以我们脚本的权限设置700即可。再往下我们将继续探索它的神奇魔力。写完这段保存一下,重启smb:service smb restart。这样,在一台xp的机器上,用域用户登陆,然后访问\\192.168.1.111,是不是看到了一个以你登陆的域用户名命名的一个文件夹呢?
7.设置磁盘配额
因为磁盘配额只能在一块单独的分区上启用,所以笔者专门添加了一块分区挂载到home目录下,这点要注意。
编辑fstab
[root@cl ~]#vi /etc/fstab
/dev/hdb1 /home ext3 defaults,usrquota,grpquota
选择分区,将defaults选项改为:“defaults,usrquota,grpquota”(针对用户和组做磁盘配额)或“defaults,usrquota"(针对用户做磁盘配额 )或"defaults,grpquota"(针对组做磁盘配额)
重新挂载文件系统:
[root@cl ~]#mount –o remount /home
创建配额文件
[root@cl ~]#quotacheck –cmug /home
启动配额
[root@cl ~]#quotaon -av
配额设置
[root@cl ~]# edquota -u administrator
Disk quotas for user administrator (uid 16777000):
Filesystemblocks soft hard inodes soft hard
/dev/hdb1 508 500 5208 3 0
(其中:blocks,已用磁盘空间;soft,磁盘空间软限制,hard:磁盘空间硬限制;
inodes: 已写多少个文件;soft:磁盘文件数量软限制;hard:磁盘文件数量硬限制)
分析:使用磁盘限额有一点不爽的地方就是它不是默认给所有的用户设置限额。也就是说,如果你想给哪个用户启用磁盘限额,你必须先建立那个用户,然后再针对那个用户进行限制。可是在域里,我们所有的用户已经建立好了?怎么一个一个的给进行磁盘限额呢?还好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\\scripts,把你想要域用户登陆执行的脚本放在这个文件里就可以了。
C:\WINDOWS\SYSVOL\sysvol\\scripts
Share.bat里面的内容是:
@echo off
if exist P: net use P: /del /y
net use P: \\192.168.1.246\%USERNAME%
这个文件的权限要设置成everyone读取。不然后域用户登陆的时候会报错的哟。这样还不算完。再配置一下。打开“active directory 用户和计算机”找到users,多选你要分配空间的用户.如题
因为我只给用户分配的是520KB的额度。
经过测试,成功!
赶快去试试了
小编关于《利用Samba实现Windows域认证及磁盘配额管理》就分享到这儿了,如果内容对你有帮助,记得点赞加收藏哦!