实例分析——samba的域功能

1803阅读 0评论2009-03-23 sjhf
分类:LINUX

在某公司已有的windowsPDC环境中,添加一台linux文件服务器,用windowsPDC中的用户名帐号就可以访问文件服务器,,每个用户都有自己的主目录。
我们的分析一下,在这个项目中,由于是使用windowsPDC服务器对用户进行认证,那么可以将samba server运行在server级别上。
但是还有一个问题,windowsPDC已有的用户帐号与linux用户的帐号不同,而samba帐号又必须基于系统帐号,这意味着我们需要在linux系统上建立所有同名的windowsPDC上的帐号,再将这些帐号一一转成samba的帐号。
为了减少samba server上用户帐号配置的工作量,我们可以考虑在smb.conf配置文件中使用username map参数,这个参数可以设置一个用于用户名映射的文件,这个文件默认的/etc/samba/smbusers--我们现在又接触到了一个新的关于samba配置文件;这个文件相当于给samba用户帐号设置一个别名,别名和windowsPDC帐号相同。例如,windowsPDC有帐号administrator,而在linux中设定系统帐号是root,转换成samba用户帐号也仍是root,而在映射文件中,我们可以将samba用户帐号root的别名指定为administrator。
好的,问题解决了,下面可以进行配置,WindowsPDC的域名是tail,主机名是pig,用户帐号有administrator、user1、user2、user3,首先,我们在linux系统上建立几个和win2000域用户帐号对应的系统用户帐号root、smbuser1、smbuser2、smbuser3,然后将它们一一转换为samba用户帐号。
在/etc/samba/smbusers文件中做映射,映射的格式是:
真实samba帐号 = 帐号别名
确保有以下内容:
         root = administrator
         smbuser1 = user1
         smbuser2 = user2
         smbuser3 = user3
注意,左边写smb用户的名称,右边写对应的win2000域用户的名称。
修改smb.conf配置文件:
[global]
         workgroup = TAIL
         netbios name = redflag
         security = server
         password server = pig.tail  #samba运行在server或domain级别时,对帐号进行验证的的服务器netbios名
         username map = /etc/samba/smbusers  #帐号映射文件
接着,再建立各个用户的主目录
[homes]
         comment = User's Home Directories
         browseable = no
         valid users = %S
         writable = yes
这样就满足了最基本的功能,如果还需要其他权限的目录,既可以继续添加。

运行在server级别的解决方案并不适用于用户数量多,和帐号增减频繁的windowsPDC,即使在建立samba文件服务器的时候,我们能不怕繁琐,一一建立帐号映射,但是在日后的服务器维护中,用户帐号管理不能同步,一旦添加或者删除了一个帐号,要在widnowsPDC、linux系统,sambaserver和映射文件中分别进行维护,仍然给管理员带来很大的工作量和不便。

同步windowsPDC帐号

Samba3.0以上的版本提供了winbind服务,这个服务可以支持将连接windowsPDC,将widnowsPDC的组以及帐号“抓取”过来,并负责将这些帐号转换成linux系统帐号和samba帐号。
WindowsPDC的域名是tail,主机名是pig。Samba server的共享名是redflag。
下面我们来看一下具体的配置过程:
修改nsswitch.conf文件
修改/etc/nsswitch.conf文件,使winbind成为passwd及group的认证信息源 passwd: files winbind shadow: files group: files winbind
修改smb.conf文件
然后看一下smb.conf文件中的修改
[global]
         workgroup = TAIL
         netbios name = redflag
         server string = Samba Server
         security = domain
         password server = pig.tail
         preferred master = no
         domain master = no
         domain logons = no
         idmap uid = 10000-20000  #idmap uid和idmap gid是设置winbind把win2000域用户、组map成本地用户、组所使用的ID号范围,如果用户很多,可以加大这两个值之间的差。
         idmap gid = 10000-20000
         template shell = /bin/bash  #指定用户登录后的shell,在linux系统中给用户一个登录shell。
          template homedir = /home/%D/%U  #指定用户登录后的主目录,设置成/home/域名/用户名。
         winbind separator = %  #获取帐号的时候,域名与用户名之间的分隔符,比如tail%work
          winbind use default domain = yes  #设置它为yes是在显示的时候屏蔽掉域名与用户名之间的分隔符,否则用户在登录linux系统的时候,就要很烦琐地键入类似tail%work这样的用户名了。
基本上在smb.conf文件中需要修改的部分就完成了。
加入widnowsPDC域
samba3.0以上的版本提供了加入windowsPDC域的命令net join,现在我们要用它把samba server加入windowsPDC: net rpc join -S pig.tail -U Administrator 然后输入域管理员密码,也就是windowsPDC中Administrator的密码。
系统会有一个加入正确的提示,类似下面:
joined TAIL domain
然后启动服务:
         #service smb start

         #service winbind start



查看抓取到的windowsPDC用户帐号信息和组帐号信息
用wbinfo命令查看用winbindd服务连接PDC抓到的域内的用户和组的信息
        #wbinfo -u

可以看到类似如下winbind抓取到的PDC用户信息:
Administrator
Guest
huaijinyang
jack
krbtgt
laohuai
user1
user2
user3
user4
user5
work 再执行:
         #wbinfo -g

可以看到类似如下winbind抓取到的PDC组信息:
BUILTIN%System Operators
BUILTIN%Replicators
BUILTIN%Guests
BUILTIN%Power Users
BUILTIN%Print Operators
BUILTIN%Administrators
BUILTIN%Account Operators
BUILTIN%Backup Operators
BUILTIN%Users
Domain Admins
Domain Users
Domain Guests
Domain Computers
Domain Controllers
Cert Publishers
Schema Admins
Enterprise Admins
Group Policy Creator Owners
DnsUpdateProxy
zzz

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

显示将PDC用户转换成系统用户的UID情况,显示最后类似如下信息:
Administrator:x:10000:10000::/home/TAIL/Administrator:/bin/bash
Guest:x:10001:10000::/home/TAIL/Guest:/bin/bash
huaijinyang:x:10002:10000:huai:/home/TAIL/huaijinyang:/bin/bash
jack:x:10003:10000:jack:/home/TAIL/jack:/bin/bash
krbtgt:x:10004:10000::/home/TAIL/krbtgt:/bin/bash
laohuai:x:10010:10000:laohuai:/home/TAIL/laohuai:/bin/bash
user1:x:10005:10000:user1:/home/TAIL/user1:/bin/bash
user2:x:10006:10000:user2:/home/TAIL/user2:/bin/bash
user3:x:10007:10000:user3:/home/TAIL/user3:/bin/bash
user4:x:10008:10000:user4:/home/TAIL/user4:/bin/bash
user5:x:10011:10000:user5:/home/TAIL/user5:/bin/bash
work:x:10009:10000:work:/home/TAIL/work:/bin/bash
PDC用户Administrator的UID从10000开始。

         #getent group

显示将PDC组转换成系统组的GID情况,显示最后类似如下信息:
Domain Admins:x:10003:Administrator
Domain Users:x:10000:Administrator,Guest,krbtgt,work,jack,user1,user2,user3,user4,huaijinyang,user5,laohuai
Domain Guests:x:10005:Guest
Domain Computers:x:10006:CALL-CENTER$,hjy$,localhost$,lishen$,HUAIJINYANG$,smb1$,rfas41$,lux$
Domain Controllers:x:10007:PIG$
Cert Publishers:x:10008:
Schema Admins:x:10002:Administrator
Enterprise Admins:x:10004:Administrator
Group Policy Creator Owners:x:10001:Administrator
DnsUpdateProxy:x:10009:
zzz:x:10010:
BUILTIN%System Operators:x:10011:
BUILTIN%Replicators:x:10012:
BUILTIN%Guests:x:10013:
BUILTIN%Power Users:x:10014:
BUILTIN%Print Operators:x:10015:
BUILTIN%Administrators:x:10016:
BUILTIN%Account Operators:x:10017:
BUILTIN%Backup Operators:x:10018:
BUILTIN%Users:x:10019:
PDC组Users 的UID从10000开始。
能够看到这样的信息,表示配置工作已经完成了大半,winbind服务已经在正常工作了。

建立登录用户帐号主目录
samba的配置文件中指定了template homedir的路径,我们先要建立这个目录
         #mkdir /home/TAIL


widnowsPDC帐号登录认证
我们已经通过winbind实现了自动同步windowsPDC帐号,下面我们将为每个用户帐号建立登录主目录。

配置PDC用户登录的pam认证
最好将原来的pam认证文件备份一下
       
         #mkdir /home/backup
         #cp /etc/pam.d/login /home/backup
         #cp /etc/pam.d/system-auth

修改login文件
这个文件最后一句是
session    optional     pam_console.so
在这句后面加上
session    required     pam_mkhomedir.so skel=/etc/skel umask=0022

修改system-auth文件
vi /etc/pam.d/system-auth
1、找到以“auth”字符串开头并调用“pam_unix.so”的语句,如下:
auth        sufficient    /lib/security/$ISA/pam_unix.so likeauth nullok
在这一句最后加上字符串“use_first_pass”,如下:
auth        sufficient    /lib/security/$ISA/pam_unix.so likeauth nullok  use_first_pass
然后在这一句前面加上语句:
auth        sufficient    /lib/security/pam_winbind.so

如下:
auth        sufficient    /lib/security/pam_winbind.so
auth        sufficient    /lib/security/$ISA/pam_unix.so likeauth nullok  use_first_pass

2、找到以“account”字符串开头并调用“pam_unix.so”的语句,如下:
account     required      /lib/security/$ISA/pam_unix.so
在这一句最后加上字符串“use_first_pass”,如下:
account     required      /lib/security/$ISA/pam_unix.so use_first_pass
然后在这一句前面加上语句:
account     sufficient    /lib/security/pam_winbind.so

如下:
account     sufficient    /lib/security/pam_winbind.so
account     required      /lib/security/$ISA/pam_unix.so use_first_pass

用PDC用户登录测试
在linux中某个终端以PDC用户登录,能够看到$提示符,说明配置完成。
这里的登录是必须的,因为在登录过程中,会生成PDC用户在/home目录同域名目录中的用户主目录,比如:
/home/TAIL/user1
这个目录存在,以及保留/etc/smb.conf文件中的[homes]段,同时决定了PDC用户在登录文件服务器时,是否可以登录自己的主目录。
保留/etc/smb.conf文件中的[homes]段,在用PDC用户帐号登录的时候,就能看到这个用户的主目录,如果对文件服务器的还有特殊特殊要求,可以继续配置samba相应属性的字段。

上一篇:读书笔记:linux常用命令
下一篇:Linux快速构建apache web服务器