【 tulaoshi.com - Linux 】
也许你公司的服务器大多是windows200x的,而且已经建了WIN200x的域来对公司的所有机器及用户做管理,而且这个域工作得很不错,所有用户的权限设置的也已经十分的合理。这时你想加一台linux或BSD的机器进去,来为公司的用户提供如ftp、samba等服务,因为在linux及BSD下的这些软件比在windows下的工作效率更高,更安全。你也许会碰到的一个问题是,在每台新架的linux及BSD服务器上都得重新加入很多用户,设置这些用户的权限、密码,如果你公司的员工很多的话,这个活还是很累人的。 但既然已经在域中有了所有用户的认证信息,为什么不好好的利用它呢:)。SAMBA3中的winbind服务就为我们提供了这样的一个途径。首先你把这linux台服务器加到win200x域中,成为域中的成员服务器,然后用winbind服务把认证信息发给PDC,由PDC来做用户的认证。只要适当的设置winbind服务、PAM,你就能通过PDC来为你linux或BSD服务器上的ftp、samba、ssh服务来做认证,是不是很不错呢? 下面是我在redhat7.3上用winbind+PAM实现对sshd、samba服务PDC认证的过程:
1、使用的相关软件: samba-3.0.7 pam-0.75-32 (这些软件的安装过程我就不讲了,参考CU上的相关文件吧:) 2、实现方法: 1) 在samba安装完成后,考贝libnss_winbind.so库到/lib目录下 cp ../samba/source/nsswitch/libnss_winbind.so /lib ln -s /lib/libnss_winbind.so /lib/libnss_winbind.so.2 2) vi /etc/nsswitch.conf 做如下修改,使winbind成为passwd及group的认证信息源 passwd: files winbind shadow: files group: files winbind 3)用ldconfig命令来使winbind使用libnss_winbind.so库,这样就不用重启机器了,如果不行,就重启一下机器 。 /sbin/ldconfig -v | grep winbind 4)vi smb.conf ,在[global]设置中加入下面几行 # separate domain and username with '/', like DOMAIN+username winbind separator = / # use uids from 10000 to 20000 for domain users idmap uid = 10000-20000 # use gids from 10000 to 20000 for domain groups idmap gid = 10000-20000 # allow enumeration of winbind users and groups winbind enum users = yes winbind enum groups = yes # give winbind users a real shell (only needed if they have telnet access) template homedir = /home/%D/%U template shell = /bin/bash winbind separator是域名与用户名和组名之间的分隔符,我设成’/’, idmap uid 和 idmap gid是设置winbind把win200x域用户、组map成本地用户、组所使用的ID号范围,如果你的用户很多,可以加大这两个值之间的差。Template homedir是用户登录后的主目录,我设置成/home/域名/用户名。Template shell是用户登录后的shell,如果你想用PDC给你的sshd做认证,就可以加上这个,给用户一个shell,不错吧。 5)用samba3的net join命令把这台机器加入到windows200x域中 /usr/local/samba/bin/net rpc join -S PDC -U Administrator 然后输入域管理员密码,administrator是域管理员帐号。PDC是你的域名,可以用NETBIOS名。 6)启动winbindd服务 /usr/local/samba/sbin/winbindd 7)用wbinfo 命令查看你用winbindd服务连接PDC抓到的域内的用户和组的信息。 引用:[root@LogBack wy]# wbinfo -u WY/Administrator WY/Guest WY/krbtgt WY/wuying WY/wy 其中’/’前的是域名,我这是WY,’/’后的是域用户名。 引用:[root@LogBack wy]# wbinfo -g BUILTIN/System Operators BUILTIN/Replicators BUILTIN/Guests BUILTIN/Power Users BUILTIN/Print Operators BUILTIN/Administrators BUILTIN/Account Operators BUILTIN/Backup Operators BUILTIN/Users WY/Domain Admins WY/Domain Users WY/Domain Guests WY/Domain Computers WY/Domain Controllers WY/Cert Publishers WY/Schema Admins WY/Enterprise Admins WY/Group Policy Creator Owners WY/DnsUpdateProxy 其中’/’前的是域名,我这是WY,’/’后的是域组名。 用getnet passwd 和getnet group你可以看到本地服务器及域服务器上所有的用户及组的信息。 到这儿,我们的工作已经完成一大半了。Winbindd服务已经可以正常工作了:) 8)到samba-3.0.7的源码目录source下,编译pam_winbind.so认证模块,CP到/lib/security下: make nsswitch/pam_winbind.so cp ../samba/source/nsswitch/pam_winbind.so /lib/security 9)下面是设置PAM了,在设置前请先备份你的/etc/pam.d目录。如果是设sshd等关建登入服务的PAM,改错了,可能ssh就登不进去,所以要小心操作。 下面是我改过的/etc/pam.d/sshd的配置文件: 引用:[root@LogBack wy]# cat /etc/pam.d/sshd #%PAM-1.0 auth sufficient /lib/security/pam_winbind.so auth required /lib/security/pam_stack.so service=system-auth auth required /lib/security/pam_nologin.so account sufficient /lib/security/pam_winbind.so account required /lib/security/pam_stack.so service=system-auth password required /lib/security/pam_stack.