从Windows到Linux迁移之文件服务器(Samba和AD完美结合)
mpuPosi
|
1#
mpuPosi 发表于 2008-01-01 10:29
从Windows到Linux迁移之文件服务器(Samba和AD完美结合)
经过在网上查找好多资料,现在终于搞定了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的第一步! |