收藏 分销(赏)

linux加入windows域之完美方案.doc

上传人:二*** 文档编号:4575314 上传时间:2024-09-30 格式:DOC 页数:34 大小:931KB 下载积分:5 金币
下载 相关 举报
linux加入windows域之完美方案.doc_第1页
第1页 / 共34页
本文档共34页,全文阅读请下载到手机保存,查看更方便
资源描述
linux加入windows域之完美方案 笔者这几天在研究samba服务通过ad域进行用户验证。在查资料的过程中发现。关于linux加入windows域,网上资料不少,但是按着网上的说法做大多不成功,甚至很多人估计都不知道自己在说什么,最后一个net ads join就认为已经成功加入到域了,可是然后呢?作为域内的一个成员,普通的机器要可以提供域内的用户登陆;作为samba服务要把共享加入到目录中,这样才起到加入域的作用嘛。笔者经过反复实验,终于把linux加入到windows域一些细节记录下来,不敢独享,特拿出。 笔者用的linux为centos5.3。ad域为win2k3 sp2。域为:R Win2k3: Name:ad1 Ip:192.168.1.241 Dns:192.168.1.241 Centos5.3: Name:Filesrv Ip:192.168.1.246 Dns:192.168.1.241 Ok,let’s go! 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和samba 因为笔者用的系统为centos所以为保证一次成功的准确率,这里就使用字符界面下的图形工具来配置了。 运行setup工具 认证配置 选择: “use winbind” “use kerberos” “use winbind authertication” 删除admin server 其余的改成真实情况 Realm为域名,KDC为域服务器的ip 配置winbind Domain为你的域的,左面第一个”.”前面的东东 选择”join domain”,提示是否先保存配置信息,肯定是yes了。 嘿嘿,看到这个画面是不是想到了xp机器加入到域的情景?没错就是那个!输入ad域的管理员密码吧J 不出意外的话,你就到达了最后一个界面,肯定ok,然后退出了。 一般来说,只要两台机器的时间上下不差五分钟,且项都配置正确的话,你就会看到下面这个图片。看到这个图片说明你的linux成功加入到ad域啦! OK,用图形的好处就是方便快捷,但是这样只适合rh系统。别的linux系统咋办呢?别急。这个工具其实就是编辑以下三个配置文件: /etc/nsswitch.conf passwd: files winbind(就是先读files 然后再通过winbind认证) shadow: files winbind group: files winbind /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 = RAINBIRD.NET(默认的域名) dns_lookup_realm = false dns_lookup_kdc = false ticket_lifetime = 24h forwardable = yes [realms] EXAMPLE.COM = { kdc = :88 admin_server = :749 default_domain = } RAINBIRD.NET = { kdc = 192.168.1.241:88(域服务器) kdc = 192.168.1.241 } [domain_realm] = EXAMPLE.COM = EXAMPLE.COM = RAINBIRD.NET = RAINBIRD.NET [appdefaults] pam = { debug = false ticket_lifetime = 36000 renew_lifetime = 36000 forwardable = true krb4_convert = false } /etc/samba/smb.conf workgroup = RAINBIRD//域名 password server = 192.168.1.241//域服务器 realm = RAINBIRD.NET security = ads//必须启用 idmap uid = 16777216-33554431 idmap gid = 16777216-33554431 template shell = /bin/bash winbind use default domain = false (改成true) winbind offline logon = false(改成true) template homedir = /home/%U winbind separator = / winbind enum users = Yes winbind enum groups = Yes 红色部分就是工具自动修改的了,但是smb.conf修改的不彻底,还不能满足我们的要求,怎么办呢?手动把蓝色部分加上,并把那两个false改成ture,然后设置samba的开机自动启动chkconfig smb on,service smb on启动服务,然后就是手工把linux加入到windows了 [root@filesrv ~]# net ads join -U administrator@RAINBIRD.NET administrator@RAINBIRD.NET's password: The workgroup in /etc/samba/smb.conf does not match the short domain name obtained from the server. Using the name [RAINBIRD] from the server. You should set "workgroup = RAINBIRD" in /etc/samba/smb.conf. Using short domain name -- RAINBIRD Joined 'FILESRV' to realm 'RAINBIRD.NET' 提示“Joined”哟,不是这个提示就是有问题,再仔细检查。 OK,重启linux,这时候用一个域用户登陆linux如果提示用户或密码验证失败,说明你重启之前的东西没配置对。仔细检查一下哪里不对呢? 如果提示如下,那么恭喜你,可以继续下一个话题了。 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的故事就讲完了。而samba服务器通过ad域认证并实现每个用户500M的共享空间,且当用户登陆windows域的时候自动挂载已经成型,近期放出,敬请期待。 本文实现了samba服务被访问的时候通过windows域服务器进行用户名和密码验证;认证通过的用户可以自动分配500M的共享空间;在用户通过windows域登陆系统的时候可以自动把这块空间映射成一块硬盘。 环境说明: 文件服务器用的Centos5.3,域控用的Win2k3 sp2,Domain是。 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 = :749 default_domain = RAINBIRD.NET } [domain_realm] . = 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 = //认证的用户,前面必须加哟 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\\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! 相关链接:
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 通信科技 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服