免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 20703 | 回复: 28
打印 上一主题 下一主题

[samba] 从Windows到Linux迁移之文件服务器(Samba和AD完美结合) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-07-29 12:36 |只看该作者 |倒序浏览
经过在网上查找好多资料,现在终于搞定了Samba的用户管理由AD 域控制器来执行,也就是说把samba 服务器加入到AD 域中,使之成为AD中的member server,这样就可以逐步把Windows的文件服务器向linux的(samba)文件服务器进行迁移,(我的目的就是要把WIN往linux上面迁移!呵呵,这样就是提高服务器的安全性和稳定性,在前期我做过使用desktop OS也换成linux,但是对我来说是可以的,而对大多数非专业人员、或者说企业内部人员,这是很难做到,所以最终可以在资金和安全方面考虑,把企业里面的服务器换成linux OS,这样是可以做到的,当然,有人也会说,把AD也换成Samba,不过我还没有去试过,以后再去试,再说,现在大多数企业环境还是离不开回win吧,呵呵,所以我认为把Samba加入到域是最好的一种方式,以后可以把ISA换成squid,exchange换成sendmail或是qmail等,最终还是要用AD来实现全网统一用户管理,所以我们要走的路还很长!在chinaunix 上面的已经有高手这样做到了,看来我要加油)

Samba有两种方法来动态增加系统用户帐号

一、添加用户脚本

使用添加用户脚本可能是两种方法里面最简单的一种,因为它只需要一个配置选项。

添加用户脚本这个Samba配置选项可以在/etc/samba/smb.conf文件的[global]项里使用。

下面是一个示例:

# if you only want the accounts created but do not want the users to have a real

# login shell or their own home directory on the server, use something like this:

# add user script = /usr/sbin/useradd -g smbusers -s /bin/false -d /dev/null -M %u

# if you want to the domain users to have a real login shell and a home directory

# on the server, use something like this instead:

add user script = /usr/sbin/useradd -g smbusers -s /bin/bash %u

对一个连接用户,如果他成功通过身份认证,并且帐户在/etc/passwd里并不存在,添加用户脚本将为其创建一个系统帐户。除非被配置成其他的目录名,用户主目录将被创建成/home/<username>。

二、使用Windbind

详情参看《Samba有两种方法来动态增加系统用户帐号》

我的实际例:可以参看http://romexp.blog.163.com/blog/static/3610065200762614516829

1.        实现环境
Fedora 7 + Squid 2.6 + Samba 3.0 + Krb5
2.        软件包安装
Samba及Krb5均通过yum安装最新版本。
3.        Kerberos配置
Win2003系统默认通过Kerberos做身份验证,Kerberos验证需要安装Krb5软件包。配置文件及测试都很简单。Krb5的配置文件为/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 = TEST.COM
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 24h
forwardable = yes

[realms]
TEST.COM = {
  kdc = 192.168.1.200:88
  admin_server = 192.168.1.200:749
  default_domain = TEST.COM
}

[domain_realm]
.test.com = TEST.COM
test.com = TEST.COM

[appdefaults]
pam = {
   debug = false
   ticket_lifetime = 36000
   renew_lifetime = 36000
   forwardable = true
   krb4_convert = false
}


我使用winbind方法同步AD帐号:

samba.conf配置如下:

[global]:
         workgroup = TEST
         netbios name = fedora
         server string = Samba Server
         security = domain
         password server = win2k3.test.com
         preferred master = no
         domain master = no
         domain logons = no
   idmap uid = 15000-20000
   idmap gid = 15000-20000
   winbind enum groups = yes
   winbind enum users = yes

注:此二行表示为是否在linux下添加AD帐号,只有加了此二行,在使用getent passwd和gentent group才能显示AD上面的帐号和组
   winbind separator = /
   winbind use default domain = yes
   template homedir = /homes/%D/%U 注:此处为homes而不是home,我在此处就走了很多弯路,当然也可以自己设定在/home/%D/%U
   template shell = /bin/bash


[homes]
         comment = User's Home Directories
        path = /homes/%D/%U  和上面 template homedir的值一样
        browseable = no
        valid users = %U

特别注意:此二处为一定要是%U,而不能使用%S ,%U 需要的客户端用户名即登录用户名,而%S是 当前共享名
         writable = yes


这些设置的一个简单的说明如下:

- idmap uid - 指定一个uid范围,该范围内的uid被用来映射UNIX用户到windows用户SID,而且要确保这个id范围内没有被本地或者NIS用户占用,winbind启动以后,也不能在该ID范围内添加用户。

- idmap gid - 指定一个gid范围,该范围内的gid被用来映射UNIX用户到windows的组SID,而且要确保这个id范围内没有被本地或者NIS组占用,winbind启动以后,也不能在该ID范围内添加新组。

- winbind separator - 指定一个字符作为分隔符,winbind将使用该分隔符来用户或组名。使用该配置将使得域用户表示为 "MYDOMAIN+username",域组被表示为"MYDOMAIN+Domain Users"

- winbind enum groups和winbind enum users - 指定winbind是否在系统上创建域的组/用户,一般情况下都要设置为yes,除非你处于某种原因希望关闭该功能。

- template homedir - 用来指定为域用户产生主目录。上面的示例中使用了变量替换,将使得winbind把用户主目录设置为/homes/MYDOMAIN/username。

需要注意的是如果希望特定域或者所有域用户在samba目录有主目录,那么管理员必须手工创建,虽然template homedir控制samba在哪里寻找域用户的主目录,但是不会自动创建,所以要自己手动创建,并设定权限。

然后,管理员需要手工编辑/etc/nsswitch.conf文件,这样winbind能实现使用域上的用户。在红帽知识库中有其他文章讨论该问题。 http://www.redhat.com.cn/kbase/4760.php

使用 net rpc join -S win2k3.test.com -U administrator 把linux主机加入到域中

重新启动samba
       service smb restart

同时winbind也要重新启动。

service winbind restart

确认Samba主机帐号在AD中正确注册


root# wbinfo –t

checking the trust secret via RPC calls succeeded

说明主机信任已成功建立

使用wbinfo –u 可以列出AD中注册的帐号信息。Wbinfo –g可以返回AD中的组信息。

配制NSS

Nss为Name Service Switch,控制帐号的验证。编辑/etc/nsswitch.conf,如下

     passwd: files winbind

    group: files winbind


检查PDC用户(组)转换为本地用户(组)UID和GIU情况:

      getent passwd

显示将PDC用户转换成系统用户的GID情况,显示最后类似如下信息:

      getent group

此时可以看到AD帐号已经加到linux的系统用户列表中 uid和gid


总结:到目前为止,现在可以用AD的用户进行samba ,并且home目录也都可以访问自己的家目录了!比如:现在我在AD上新增user2 ,并设定

了password,能后需要在linux下面 mkdir /home/TEST/user2 再使用

# chown 'TEST\user2':'TEST\domain users'  /home/TEST/user2  改变目录所有者,就可以登录使用了。

要设定share folds 就可以使用以下代码:

[user2' Directory]
        comment = user2's Directory
        path = /homes/TEST/user2
        ;browseable = no
        valid users = TEST/user2
        writable = yes
        create mode = 0777
        directory mode = 0777  这二种方式还是需要合用chown 来改变目录所有者才可以,还要研究!

以上为我使用 samba的winbind来对AD和samba的完美整合,使用用户脚本方式,我还没有去研究测试,我是在借鉴别人很多技术分享才得以成

功的,当然可能还会有很多纰漏,还请大家多多指正,这也是我要把服务器逐步换为linux OS的第一步!请关注我的blog

http://romexp.blog.163.com)后续还会有我的第二步。

我的MSN:rome_xp@msn.com

具体的可以查看我的 http://romexp.blog.163.com/blog/static/36100652007629115755400/

[ 本帖最后由 romexp 于 2007-7-29 16:51 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-07-29 16:18 |只看该作者
用AD做有它的好处,不过如果就单单只用一个AD功能,那就有一些浪费了。

Sendmail用AD验证身份没试过,可能有一定的难度。LDAP也是不错的选择。

论坛徽章:
0
3 [报告]
发表于 2007-07-29 16:55 |只看该作者

回复 #2 szkingrose 的帖子

是啊。我去研究啊。呵呵,,看到有人能做了,所以还是要试试呢

论坛徽章:
0
4 [报告]
发表于 2007-08-01 23:52 |只看该作者
有不有人用过不使用winbind,而使用net user script自动加用户和主目录啊,我查看了好多资料,也没有找到啊。。。郁闷ing   

add user script 总是不能自动加入user和home目录

所以现在只有用winbind了

论坛徽章:
0
5 [报告]
发表于 2007-08-02 23:29 |只看该作者
最近正好也在研究这个东东。和楼主的获得的结果差不多,但我有几个疑问没搞明白。

问题1:我用wbinfo -u中 AD的帐号为什么登录不了linux系统呢?反之,我用linux下的帐号为什么不能登录window呢

问题2:我可以用net rpc join 继续添加其它AD服务器,但是我的wbinfo -u/-g还是显示第一个被添加的AD服务器的数据。。有没有办法在原有基础上追加新的AD服务器的数据啊?

[ 本帖最后由 lzl8146 于 2007-8-2 23:33 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2007-08-03 10:15 |只看该作者
原帖由 lzl8146 于 2007-8-2 23:29 发表
最近正好也在研究这个东东。和楼主的获得的结果差不多,但我有几个疑问没搞明白。

问题1:我用wbinfo -u中 AD的帐号为什么登录不了linux系统呢?反之,我用linux下的帐号为什么不能登录window呢

问题2:我 ...



对于第一个问题:AD帐号不能登入linux,你要查看 getent passwd /getent group 看AD帐号是否在linux passwd上面创建了,如果没有的话就要检查一下winbind的设定了,对于你说的反之,可以就没有必要了吧,,呵,要不就一个一个在AD上建立linux帐号了,(实现是没有必要)
对于第二个问题:net rpc join 继续添加其它AD服务器,你要先删除/etc/samba/secrets.tdb ,你可以试下,(我觉得你这个功能也是不太现实,怎么会让一台member 服务器 成为二个AD域的服务器呢?呵呵)

论坛徽章:
0
7 [报告]
发表于 2007-08-04 09:40 |只看该作者
谢谢romexp的回复。。
第一个问题,AD帐号通过getent passwd查看时已经存在了。是DOMAIN+AD帐号的形式,我用DOMAIN+AD登录时不能登录linux,有可能是什么原因?

第二个问题,我想知道lmember 服务器(或者说成员服务器),在域环境下它的作用?我一直认为只是成员机器而已。据我了解,一个大的网络应该存在多个域控制器(装有AD的机器),比如不同的分公司,而有台linux需要提供一些服务,这二个域控制器所管辖的机器都要用到,这个时候难道不要把这台linux主机分别加入到这二个域中去吗?还是所在域控制器这一级进行处理?

谢谢您的关注

论坛徽章:
0
8 [报告]
发表于 2007-08-05 10:44 |只看该作者

回复 #7 lzl8146 的帖子

NO1 :查看你linux的share 目录的权限设定,要要真正能浏览到linux上的文件要三方面的权限设定:1、AD用户能在linux上登陆,(你已经做到了),2、使用chmod和chown更改linux上面的权限,3、firewall的设定是否正确
NO2:总公司和分公司之间是域林之间的关系,一般是信息关系,我没有做过测试,但是在原理上,如果linux已经成为一个服务器的成员服务器,而且二个域之间是根域与子域的关系(或是信息关系),应该是可以,不过要测试哟,你测试下,再说吧

论坛徽章:
0
9 [报告]
发表于 2007-08-06 18:15 |只看该作者
请问我把valid users 设为某个ad的用户时,就可以登陆,但如果valid users或valid groups 为ad组时组里的成员就怎样都登陆不了,为什么呢???

在线等~~~~~

论坛徽章:
0
10 [报告]
发表于 2007-08-06 22:24 |只看该作者
原帖由 chenny123 于 2007-8-6 18:15 发表
请问我把valid users 设为某个ad的用户时,就可以登陆,但如果valid users或valid groups 为ad组时组里的成员就怎样都登陆不了,为什么呢???

在线等~~~~~



看看这里的说明吧,http://romexp.blog.163.com/blog/static/36100652007730299312
或者对你会有帮助
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP