centos5.1 samba服务器加入windows 2003 AD活动目录总结

简介:
测试环境vmware
 
 
DC&DNS:Windows Server 2003 rc2 sp2 企业版. 计算机名为:DC myad.com 完整的计算机名为ms-aaaa   ip:192.168.20.148
Linux:CentOS 5.1    hostname为localhost.localdomain  ip: 192.168.20.170
域名:myad.com
2.试验目的:将Linux加入到Windows域,并实现Windows域帐户登陆Linux服务器.
3.准备工作:
   a.在一台机器上安装Windows Server 2003 rc2 ,并升级为DC,同时集成DNS服务.用运行里dcpromo来设置ad活动目录和dns。
   b.Linux的准备工作也很简单,主要是检查以下几个包是否被安装:
      #rpm -qa|grep samba
     samba-3.0.23c-2
     samba-common-3.0.23c-2
     samba-client-3.0.23c-2     //samba的相关包
     #rpm -qa|grep krb5
     krb5-libs-1.5-17
     krb5-workstation-1.5-17
     krb5-devel-1.5-17
     pam_krb5-2.2.11-1          //kerberos相关的软件包
   主要就用到这些包,由于各Linux发行版本的不同,包的版本或许会有差异.
4.配置步骤:
a.修改ip用系统的setup配置也可以用vi /etc/sysconfig/network-script/ifcfg-eth0和dns用vi /etc/resolv.conf.但是要注意防火墙(iptables)和SELinux.
  你可以把iptables规则清空,并禁用SELinux
  清空iptables规则命令如下:
   #iptables -F 
  禁用SELinux方式如下:cli下用setup命令配置
  #vi /etc/selinux/config
  将其中的  SELINUX=enforcing
  改成      SELINUX=disable  
b.修改/etc/krb5.conf文件,该文件是kerberos的配置文件, Kerberos 是大小写敏感的。

   典型的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 = MYAD.COM//修改windows的dc
  ticket_lifetime = 24000
 dns_lookup_realm = false
 dns_lookup_kdc = false
[realms]
 MYAD.COM = {
  kdc = ms-aaaa.myad.com:88
  admin_server = ms-aaaa.myad.com:749
  default_domain = myad.com
 }
[domain_realm]
 .myad.com = MYAD.COM
 myad.com = MYAD.COM
[kdc]
 profile = /var/kerberos/krb5kdc/kdc.conf
[appdefaults]
 pam = {
   debug = false
   ticket_lifetime = 36000
   renew_lifetime = 36000
   forwardable = true
   krb4_convert = false
 }

其中需要我们修改的地方很少,以我的例子为例,修改后的文件如下:
 
修改完毕后运行下面的命令查看kerberos文件是否有误:
    kinit  administrator@MYAD.COM
能遇到的几个常见错误:域名错误: 
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

其中administrator是域管理员账户,MYAD.COM是你的域名.
 
 
   回车键后,会提示你输入密码,如果没有什么错误.在你输入密码回车后,会自动返回到Linux命令提示符下.
   在这里要注意的小问题就是Linux本地的时间要和DC的时间差问题,我们都知道,在DC上的策略中,时间差允许的范围是5分钟,所以,在运行上述的命令前,最好先同步下Linux和DC的时间:
    ntpdate 192.168.20.148

c.这一步是最主要的步骤了,就是修改/etc/samba/smb.conf配置文件.samba的主配置文件选项很多,在加上各版本中默认的选项都有所差异,在这里我就不列举典型的smb.conf文件了,我的smb.conf文件帖出来顺便介绍一下smb.conf文件中参数的意思!
 
其中MyShare指定共享名,一般就是【网上邻居】里面可以看见的文件夹的名字。
comment 是对修改共享的备注。
path 指定共享的路径,可以配合Samba变量使用。例如可以指定path=/data/%m,这样如果一台计算机的NetBIOS名字是grind,它访问MyShare共享时就是进入/data/grind目录,而对于NETBIOS名是glass的计算机,则进入/data/glass目录。
allow hosts和deny hosts 和前面的全局设置的方法一样。
writeable 指定目录默认是否可写,也可以用readonly = no来设置可写。
user 设置所有可能使用该共享资源的用户,也可以用@group代表group组的所有成员,不同的项目之间用空格或逗号隔开。
valid users 能够使用该共享资源的用户和组。
invalid users 不能够使用该共享资源的用户和组。
read list 只能读取该共享资源的用户和组。
write list 能读取和写入该共享资源的用户和组。
admin list 能管理该共享资源(包括读写和权限赋予等)的用户和组。
public 该共享资源是否能被用户账号访问,这个开关有时候也叫guest ok,所以有的配置文件中出现guest ok = yes,其实和public = yes是一样的。
hide dot files 是否像UNIX那样隐藏以“.”号开头的文件。
create mode 新建立的文件的属性,一般是0755。
directory mode 新建立的目录的属性,一般是0755。
sync always 对该共享资源进行写操作后是否进行同步操作。
short preserve case 忽略文件名大小写。
preserve case 保持大小写。
case sensitive 是否区分大小写,一般选no,不然可能引起错误。
mangle case 混合大小写。
default case 默认的文件名是全部大写还是小写。
force user 强制建立文件的属主。如果有一个目录,让guest可以写,那么guest就可以删除,如果使用force user= grind强制建立文件的属主是grind,同时限制create mask = 0755,这样guest就不能删除该目录了。
wide links 是否允许共享外符号连接,比如共享资源里有个连接指向非共享资源里的文件或目录,如果设置wide links = no将使该连接无法使用。
max connections = n 设置同时连接数是n。
delete readonly 能否删除共享资源里面已经被定义为只读的文件。
 
 
    
[global]
   workgroup = MYAD//这个是你域名MYAD.COM点前面的东东。                    //需要加入的域的netbios名,注意是域的netbios名,要大写
   netbios name = centos                //本机器的netbios名,有的版本没有这一项会没有这个,
                                            要手动添加
   server string = Samba Server            //对该服务器的描述
   printcap name = /etc/printcap
   load printers = yes
   cups options = raw
   log file = /var/log/samba/%m.log
   max log size = 50
   security = ads                     //ads验证方式必须有realm项
   realm = MYAD.COM                //增加这一行,注意这里是域名.
   password server = ms-aaaa.myad.com           //这里是DC的FQDN,也可以写ip,但是有时候会出
                                                问题,建议写FQDN
   encrypt passwords = yes                 //加密在网络上传输的用户密码
   socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
   dns proxy = no

   winbind separator = /                  //用户的域名和用户名之间的间隔,用什么随你心情
   idmap uid = 1000000-2000000         
   idmap gid = 1000000-2000000            //域用户映射成Linux本地用户时所有的uid和gid范围.
   template home = /home/%D/%U            //与home文件夹中定义的作用相同.两者定义一个就行
   template shell = /bin/bash             //用户登陆后所使用的shell
   winbind use default domain = yes       //用户登陆使用默认的域
   winbind enum users = yes
   winbind enum groups = yes              //有人说是自动创建用 getent passwd[group]看到的
                                            用户和组的信息.具体有什么用,我也说不清楚          
                                        
[homes]
   comment = Home Directories
   browseable = no
   writable = yes
   create mode = 0777
   directory mode = 0777   //创建的文件和目录的默认权限
   path = /home/%D/%U     //用户主目录的相关设置
[printers]
   comment = All Printers
   path = /var/spool/samba
   browseable = no
   guest ok = no
   writable = no
   printable = yes

以上红色的部分都是要修改的,其余的都保持默认就行.好了,修改完成后,保存退出.然后用下面的命令测试 smb.conf是否有误:
  # testparm 测试一下

在这里注意两个地方就行,一个是  Loaded services file OK.      //说明你的配置文件没有错
                       还有一个就是:Server role:ROLE_DOMAIN_MEMBER  //说明你的服务器已经是域的
                                                               "准"成员了.
好了,做了这些测试后,先把smb和winbind两个服务开启成随系统自动启动:
   #chkconfig smb on  //也可以用ntsysv来开机启动
   #chkconfig winbind on//也可以用ntsysv来开机启动。
然后重启samba服务:
   # service smb restart      //写到这里,我想起一点好玩的事来, 在fedora 9中(其他版本我不知道),
                               smb和nmb服务是分开的,也就是说你用这条命令只能重启动smb,不能重
                               启nmb,你还要打service nmb restart才行.....

然后就可以加入域了:
  net ads join -W MYAD.COM -S dc  -U administrator
然后会要求你输如管理员的password,输入后,正常情况下会提示加入域成功.

 
 在这里我插一句,有时候用net ads join 会不好使,这时候就试试net rpc join 这种方式.

到这里,我们就已经把samba服务器加入到域里了,这时,在DC上,computers这个OU里就应该可以看到你的samba服务器了.
 
这时,我们重启winbind服务:
service winbind restart
重启完成后,我们就可以用下面的几条命令来进行测试了:
 
 
   wbinfo -t                 //测试该samba服务器与域的信任关系
 

  wbinfo -u                  // 查看域用户的映射信息
 

  wbinfo -g
 

  有时候会出现这样的错误信息,解决办法如下:
  先停掉winbind和smb服务:
  service smb stop
  service winbind stop
  然后删除下面两个目录里的.tdb文件:         /etc/samba   和   /var/cache/samba
    据我理解,这些应该是在加入域过程中,产生的一些缓存
  文件,但是有时候这些缓存会造成一些错误信息,就象我们刚才看到的那样,删除后,重启服务,让他重新
  生成就行了.
  fedora10 会稍有不同,目录我记不太清楚了,好像是 /var/lib/samba  你可以用命令搜索下:
  find / -name *.tdb
  删除完成后,重新启动 smb服务.
  service smb start
  在次运行加入域的命令:
  net ads join -W MYAD.COM -S dc  -U administrator
  重启动winbind服务.
   service winbind start
  然后在用命令查看信息就OK了.
 
 

 
         到这里呢,我们的samba服务器就成功的加入到域里了,但是呢,却还不能实现域账户在Linux终端上的登陆.想要实现这个目的,其实也很简单,只需要修改下面几个文件就可以了:
   /etc/nsswitch.conf           //修改这个文件,影响Linux查找用户,组,和他们密码的行为
   修改项如下:
    passwd:    winbind files 
    shadow:    winbind files
    group:     winbind files
   /etc/pam.d/sysconfig-auth    //让pam认证支持以winbind为源进行用户的查找和匹对.
    修改项如下:
    auth        sufficient    /lib/security/pam_winbind.so          //增加这一行
    auth        required      /lib/security/$ISA/pam_env.so
    auth        sufficient    /lib/security/$ISA/pam_unix.so likeauth nullok
    auth        required      /lib/security/$ISA/pam_deny.so
    auth        sufficient      /lib/security/pam_winbind.so

    account     sufficient    /lib/security/pam_winbind.so       //增加这一行,注意这两行的位置
    account     required      /lib/security/$ISA/pam_unix.so
    account     sufficient    /lib/security/$ISA/pam_succeed_if.so uid < 100 quiet
    account     required      /lib/security/$ISA/pam_permit.so

    password    requisite     /lib/security/$ISA/pam_cracklib.so retry=3
    password    sufficient    /lib/security/$ISA/pam_unix.so nullok use_authtok md5 shadow
    password    required      /lib/security/$ISA/pam_deny.so
    session     required      /lib/security/$ISA/pam_limits.so
    session     required      /lib/security/$ISA/pam_unix.so

  修改完毕后,根据上面smb.conf文件的配置,我们就可以实现用户的登陆了,不过还有一点要说明,就是在用户登陆前,必须手动创建他们的登陆主目录,并且赋予他们完全控制的权限.
    比如,我想让administrator用户登陆Linux,实现步骤如下:
    cd /home
    mkdir MYAD
    cd MYAD
    mkdir administrator
    chown administrator administrator      //在home目录下创建YANCHUN域目录,并在该目录下创建
                                             要登陆用户administrator的目录,更改目录权限.
    这样在终端上就可以实现域用户账户的登陆了.

     还有就是用户登陆Linux平台后,权限控制的问题.默认情况下,这种方式登陆到Linux平台的用户只有对自己主目录有完全控制权限,其余的文件均为只读.
     可以通过下面的方法来实现对域用户权限的控制:
     1.更改/etc/nsswitch.conf文件.
     passwd:    winbind files
     shadow:    files winbind
     group:     winbind files
细心的朋友也许已经注意到了这个文件与上面那个文件的不同.就是shadow的查找顺序.为什么这么改,呵呵,先卖个关子,接着往下看.
     2.然后先把winbind 服务停掉.
     建立与要登陆Linux的域用户账户的同名Linux账户.
     3.重启winbind服务.用域账户登陆.这时会发现,登陆后域用户的登陆点不是在/home/%D/%U下了,而是在/home/%U下.为什么呢?
     这是因为nsswitch.conf文件影响的结果.就是域用户在输入自己的登陆名时,Linux系统并不认为是域用户,而认为该用户是一个本地用户,而shadow项的设置,是先去DC进行密码的查询.于是就造成了一种假象,就是域用户用自己的用户名和密码登陆了Linux.所以其登陆目录为/home/%U.
     既然,Linux认为该登陆用户是一个本地用户,那么我们就可以很方便的对他赋予权限了.
     但是,如果要登陆Linux的用户非常多,那么作为管理员,我们的工作量会非常大,这也是我下面要提出的用LDAP想法的原因. 
 
    我在这个试验过程中所碰到的问题如下:
    1. net rpc join  和 net ads join 命令在作用上有什么区别.
    2. 有时候配置文件没有错,但是在加入域时会提示错误信息,如NT_STATUS开头的一些错误信息,具体是什么原因,还望有高手指教.我在网上搜索相关错误提示的帖子,也没有能找到真正解决问题的方法.
    NT_STATUS_ACCESS_DENIED (0xc0000022)
    NT_STATUS_NO_TRUST_SAM_ACCOUNT (0xc000018b)
    NT_STATUS_INVALID_COMPUTER_NAME
    3.有时候会出现unable to find a suitable server .提示找不到合适的服务器,不知道问题出在什么地方.
    4.另外,我还有一种想法,能不能在Linux上搭建LDAP服务,然后用他去同步Windows的活动目录数据库,然后激活samba的LDAP数据库认证功能,实现域用户账户访问samba服务器的认证问题.有做过相关试验的朋友请给小弟一点指点.感激不尽.
    5.至于自动为登陆Linux平台的域用户创建宿主目录,和自动加入某一Linux本地组,等我熟了SHELL编程在说吧,呵呵~
    6.有时候会出现类似于Winbind服务启动起来后,显示该服务已经假死的现象,这时候可以通过查找/var/log/messages或者/etc/log/samba/winbind.log查找相关的错误信息。我碰到过的一个问题是:Winbind Dead but subsys lock的东东,解决办法是关闭SELinux就可以了,针对这个问题在相关的日志错误信息中显示的是:open secrets.tdb error。据我个人理解,应该是SELinux的开启造成了Winbind无法访问/etc/samba/secrets.tdb文件的缘故,只要disable SELinx 重启计算机后,应该就可以正常的启动和停止Winbind服务了。
磁盘配额   
  在/etc/fstab中加入   
  LABEL=/       /       ext3       defaults,usrquota,grpquota     1   1   
    
  启动磁盘配额(重启后仍有效)   
  touch   /aquota.group   
  touch   /aquota.user   
  chmod   644   /aquota.group   
  chmod   644   /aquota.user   
  /sbin/quotacheck   –avugm   
  /sbin/quotaon   –avug   
  设定test用户的配额为   20M(1000用户共用20000M)   
  setquota   -u   test   20000   20000   0   0   /   
    
    
    
  repquota   –a  


本文转自zh888 51CTO博客,原文链接:http://blog.51cto.com/zh888/327852,如需转载请自行联系原作者

相关文章
|
28天前
|
Shell Windows
Windows服务器 开机自启动服务
Windows服务器 开机自启动服务
14 0
|
4天前
|
安全 Unix Linux
Windows如何远程连接服务器?服务器远程连接图文教程
服务器操作系统可以实现对计算机硬件与软件的直接控制和管理协调,任何计算机的运行离不开操作系统,服务器也一样,服务器操作系统主要分为四大流派:Windows Server、Netware、Unix和Linux。今天驰网飞飞将和你分享Windows server远程连接图文教程,希望可以帮助到你
20 4
Windows如何远程连接服务器?服务器远程连接图文教程
|
15天前
|
Linux
centos 查看服务器信息 版本cpu
centos 查看服务器信息 版本cpu
12 0
|
23天前
|
Ubuntu Linux 虚拟化
【Linux】ubuntu安装samba服务器
【Linux】ubuntu安装samba服务器
|
1月前
|
Linux 数据安全/隐私保护 Docker
linux和windows中安装emqx消息服务器
linux和windows中安装emqx消息服务器
37 0
|
1月前
|
Oracle 关系型数据库 Linux
服务器Centos7 静默安装Oracle Database 12.2
服务器Centos7 静默安装Oracle Database 12.2
85 0
|
1月前
|
存储 Windows
windows server 2019 云服务器看不见硬盘的解决方案
windows server 2019 云服务器看不见硬盘的解决方案
|
1月前
|
数据安全/隐私保护 Windows
Windows Server 各版本搭建终端服务器实现远程访问(03~19)
左下角开始➡管理工具➡管理您的服务器,点击添加或删除角色点击下一步勾选自定义,点击下一步蒂埃涅吉终端服务器,点击下一步点击确定重新登录后点击确定点击开始➡管理工具➡计算机管理,展开本地用户和组,点击组可以发现有个组关门用来远程登录右键这个组点击属性,点击添加输入要添加的用户名,点击确定添加成功后点击确定打开另一台虚拟机(前提是在同一个局域网内),按 WIN + R 输入 mstsc 后回车输入 IP 地址后点击连接输入用户名及密码后点击确定连接成功!
37 0
|
1月前
|
Windows
Windows Server 各版本搭建 Web 服务器实现访问本地 Web 网站(03~19)
Windows Server 各版本搭建 Web 服务器实现访问本地 Web 网站(03~19)
57 2
|
1月前
|
数据安全/隐私保护 Windows
Windows Server 2003 搭建邮件服务器实现自建邮箱域名及账户并连接外网
Windows Server 2003 搭建邮件服务器实现自建邮箱域名及账户并连接外网
30 0