本文实现了samba服务被访问的时候通过windows域服务器进行用户名和密码验证;认证通过的用户可以自动分配500M的共享空间;在用户通过windows域登陆系统的时候可以自动把这块空间映射成一块硬盘。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
环境说明:
文件服务器用的Centos5.3,域控用的Win2k3 sp2,Domain是rainbird.net。
Centos5.3:
Name:Filesrv
IP:192.168.1.245
Dns:192.168.1.241
Samba:<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />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 服务器。
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
这里样你可以用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
net use P: \\192.168.1.246\%USERNAME%
       这个文件的权限要设置成everyone读取。不然后域用户登陆的时候会报错的哟。这样还不算完。再配置一下。打开“active directory 用户和计算机”找到users,多选你要分配空间的用户,如图,选择属性。
找到“配置文件”选中“登陆脚本”,在后面的框里输入“share.cmd”
这样,被选中的用户下次再登陆的时候就被“强制”执行这样脚本。当然这个策略不知道要多长时间才能分发下去。如果你现在就想让它生效,那么:gpupdate /force!
域用户登陆以后在我的电脑就会看到这块共享盘
就是FileSrv那个了。双击打开,就像操作本地硬盘一样方便。
可以添加修改文件。至于空间是不是限定了500M,那就自己试一下吧J(或者去linux quota查询也可以哟~~)
       Samba的故事到这里就讲完了。再下一步就是samba群集了。Move on ,Let’s go!
 
 
相关链接:
        linux加入windows域之完美方案

转载于:https://blog.51cto.com/rainbird/197794

Samba通过ad域进行认证并限制空间大小相关推荐

  1. Samba通过ad域进行认证并限制空间大小《转载》

    本文实现了samba服务被访问的时候通过windows域服务器进行用户名和密码验证;认证通过的用户可以自动分配500M的共享空间;在用户通过windows域登陆系统的时候可以自动把这块空间映射成一块硬 ...

  2. 2021-07-22 CentOS7.6 Samba使用AD域控认证(winbind),亲测有效。

    CentOS7.6 Samba使用AD域控认证(winbind),亲测有效. centos7: https://www.freesion.com/article/44621398696/ cetnos ...

  3. Java实现AD域登录认证

    最近公司派遣去乙方公司做项目开发,之前做好了的登录模块,按理来说是可以完全复用的,但是乙方客户提出要求,要用AD域登录认证的方式进行登录我们开发的Java Web系统,于是上网搜集了相关的资料,并运用 ...

  4. ad域文件服务器迁移到samba,将AD域漫游用户配置文件放在samba服务器中

    书接上回https://www.cnblogs.com/jackadam/p/11448497.html 我们已经将linux服务器设置为域成员,启动samba服务后,已经实现了使用域账号验证,自动创 ...

  5. 【逗老师带你学IT】Windows Server NPS服务构建基于AD域控的radius认证

    目录 一.Windows Server Network Policy Service(NPS)安装 1.添加角色和功能 2.安装网络策略和访问服务 二.Windows NPS配置 1.NPS服务器加域 ...

  6. 华为外部Portal认证 Radius认证计费 实现基于Mac快速认证的Mac无感知认证和结合CAS单点登录统一认证平台和AD域LDAP对接配置

    华为外部Portal认证 Radius认证计费 实现基于Mac快速认证的Mac无感知认证 结合CAS单点登录统一认证平台 AD域LDAP对接配置 实现用户名密码实名认证 访客短信认证 二维码扫码 钉钉 ...

  7. ad域管理与维护_U-Mail邮件系统LDAP/AD同步极大提升办公效率

    每一位办公族,可能都遇到过这样的问题: 1.随着信息化高速发展和企业"互联网+"的深入,越来越多的办公平台和软件被开发出来,正如移动互联网端APP应用层出不穷一样,给人们带来了极大 ...

  8. 集成AD域,前端实现免登录

    转载自添加链接描述 javaweb应用程序与AD域身份认证 首先,要做统一身份认证,也就是说,要java应用程序去ad域验证这个人的用户名密码是否存在于ad域,这个比较简单,只有一个坑,直接上代码吧. ...

  9. java修改AD域用户密码使用SSL连接方式

    正常情况下,JAVA修改AD域用户属性,只能修改一些普通属性, 如果要修改AD域用户密码和userAccountControl属性就得使用SSL连接的方式修改, SSL连接的方式需要操作以下步骤: 1 ...

  10. Centos 7加入Windows AD域及搭建基于Windows AD域(即ldap)认证的samba共享

    在我的windows server系列的文章中已经搭建好了windows AD域,现在要求Centos 7服务器加入AD域并实现基于AD认证的samba共享. 物理环境: Windows Server ...

最新文章

  1. Excel报表配置说明
  2. Python爬虫开发教程,一看就懂!
  3. android 解决小米手机上选择照片路径为null的问题
  4. 性能测试工具比较:LoadRunner vs JMeter - 测试结果数据比较
  5. css 盒模型的属性
  6. 0710 mux协议的作用(ppp拨号时如何和gprs进行at指令交互)
  7. java中map的遍历方法_Java中Map的三种遍历方式
  8. 关于符号Symbol第一篇
  9. ​TCP和UDP的135、137、138、139、445端口的作用?​
  10. 【教程】如何批量将记事本文件或word文本转换成简体/繁体中文,下面教你方法
  11. [转载]李开复:什么是领导力
  12. gstreamer(三) 常用命令集锦
  13. 知名人脸搜索引擎惹众怒:仅需一张照片,几秒钟把你扒得底裤不剩
  14. MATLAB常用命令总结
  15. 魔鬼R包—SNPassoc的下载与安装
  16. GWL_WNDPROC 、GWL_USERDATA、GWL_HINSTANCE未定义
  17. 最新TCGA数据下载与整理
  18. 怎样看服务器是什么操作系统,如何看服务器是什么操作系统
  19. 十亿设备撑腰 TalkingData解读14年国内移动互联网
  20. xss for u7 BOM

热门文章

  1. Angular4记账webApp练手项目之四(在Angular4项目中用echarts绘制图表)
  2. HDFS 命令深入浅出
  3. windous和Linux桌面版的比较
  4. sqlserver 登录失败——孤立用户
  5. 一些Python的惯用法和小技巧:Pythonic
  6. EMS邮箱数据库常用命令(二)
  7. DVWA 黑客攻防演练(十二) DOM型 XSS 攻击 DOM Based Cross Site Scripting
  8. linux mysql添加用户名并实现远程访问
  9. HTML5之2D物理引擎 Box2D for javascript Games 系列 第二部分
  10. c++ public protected private 继承