• UID25
  • 登录2016-05-02
  • 粉丝9
  • 关注2
  • 发帖80
  • 主页
  • 金币1445枚
社区居民
原创写手
billy 发布于2015-12-07 18:43
0/957

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

楼层直达
Samba通过ad域进行认证并限制空间大小

本文实现了 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

0人打赏
您需要登录后才可以回帖
发表回复
极贡献
技术问答
专题荟萃
程序人生
视觉设计
Android开发
iOS开发
编程语言
前端开发
后端开发
服务器架构
软件测试
运维方案
创业路上



最热文章墙

  • 80957/379   【精品推荐】200多种Android动画效果的强悍框架,太全了,不看这个,再有动画的问题,不理你了^@^

  • 45952/191   情人节福利,程序员表白的正确姿势:改几行代码就变成自己的表白了

  • 45588/0   Python爬虫:常用浏览器的useragent

  • 42130/261   【精品推荐】Android版产品级的音乐播放器源码,功能太强大了,最好的产品原型有木有?

  • 39096/145   省时省力的Android组件群来了,非常棒的原型参考

  • 30566/143   2016抢红包软件及源码

  • 29596/71   原创表白APP,以程序员的姿势备战新年后的7夕,持续完善中!

  • 29488/2   超全!整理常用的iOS第三方资源

  • 24860/161   Android版类似UC浏览器:非常赞,产品级的源码

  • 23073/31   麻省理工的一帮疯子,真的实现了随意操控万物!(绝对黑科技)

  • 22768/26   Android工程师面试题大全

  • 22734/27   2016程序员跳槽全攻略

  • 22089/10   GitHub上排名前50的iOS项目:总有一款你用得着

  • 21088/21   码魂:程序员的牛B漫画

  • 19329/85   Android小而全的博客源码:非常适合全面掌握开发技巧

  • 19327/74   【持续更新中】Android福利贴(二):资料源码大放送

  • 19183/43   一个绚丽的loading动效分析与实现!

  • 19115/10   2016年最全的Android面试考题+答案 精编版

  • 18895/3   吐槽那些程序员的搞笑牛逼注释

  • 17885/45   惊艳的App引导页:背景图片切换加各个页面动画效果

  • 17811/104   Android带弹幕的视频播放器源码,来自大名鼎鼎的Bilibili弹幕网站

  • 17766/82   仿京东商城客户端Android最新版,不错的原型和学习资料

  • 17756/1   iOS 动画总结

  • 17411/25   个人收集的Android 各类功能源代码

  • 16922/5   新一代Android渠道打包工具:1000个渠道包只需要5秒

  • 16895/23   Android福利第三波【Android电子书】

  • 16712/1   iOS中文版资源库,非常全

  • 16707/81   【精品推荐】类似360安全卫士安Android源码:非常赞的产品原型

  • 16655/54   基于瀑布流的美女图片浏览App,有注释的源代码

  • 16519/18   用JavaScript 来开发iOS和Android 原生应用:React Native开源框架中文版来啦

  • 16500/10   女程序员的梦,众网友的神回复

  • 16226/23   珍藏多年的素材,灵感搜寻网站

  • 16221/11   年会上现场review代码是怎么样的体验!

  • 15876/19   65条最常用正则表达式,你要的都在这里了

  • 14999/16   基于Android支付宝支付设计和开发方案

  • 14413/11   有木有这样一张酷图帮你集齐所有git命令超实用

  • 14358/18   什么是真正的黑客:收获12200+Stars,人气远超微软开源VS

  • 14155/47   在线音乐播放器完整版(商用级的源码):非常赞,可听免费高品质专辑

  • 13975/62   【技巧一】搭配Android Studio,如何实现App远程真机debug?

  • 13840/0   GitHub iOS 库和框架Top100 

  • 13689/7   用程序员的姿势抢过年的火车票

  • 13663/7   一张图搞定iOS学习路线,非常全面

  • 13310/10   成为Java顶尖程序员 ,看这11本书就够了

  • 13242/10   微信支付终于成功了(安卓,iOS),在此分享

  • 13124/18   一张图搞定Android学习路线,非常全面

  • 12980/29   【持续更新中】Android福利贴(一):资料源码

  • 12886/4   基于Node.js的强大爬虫,能直接发布抓取的文章哦

  • 12703/4   46 个非常有用的 PHP 代码片段

  • 12161/3   即时通信第三方库

  • 11578/9   流媒体视频直播方案

  • 11549/18   八个最优秀的Android Studio插件

  • 11390/9   B站建开源工作组:APP想支持炫酷弹幕的看过来

  • 11227/2   【精品推荐】高质量PHP代码的50个实用技巧:非常值得收藏

  • 11152/9   烧了5亿美金,这家神秘的公司即将颠覆人类未来!

  • 11083/12   中国黑客的隐秘江湖:攻守对立,顶尖高手月入千万美元

  • 10586/1   基于node-webkit跨平台应用案例集之(一)

  • 10336/6   开箱即用!Android四款系统架构工具

  • 10132/11   十大技巧快速提升Android应用开发性能

  • 10121/4   10款GitHub上最火爆的国产开源项目——可以媲美西半球

  • 10079/2   Android性能优化视频,文档以及工具

  • 返回顶部