关于SAMBA和2003域控制器的配置
 
http://www.centeros.net华中网络技术联盟论坛)鉴于网络上的一些说明关于SAMBA和2003域控制器的配置的文章不是很全面,且安全级别大多是在SHARE和USER级别,不能满足企业安全级别(SERVER,DOMAIN,ADS)的需要,我花了一些时间去探索这方面的实践,得出了一些经验,和大家分享。
试验环境:一台PT600R(192.168.78.1,装有LINUX,内核为2.6.9-5.ELsmp;一台WINDOWS2003域控制器且同时也是DNS服务器(192.168.78.250);两者均在192.168.78.网段,且网路畅通。
因本文主要是介绍SAMBA方面的经验,关于AD就不再赘述。
1,SAMBA的安装。

1)准备工作:
www.samba.org上获得最新的samba-3.0.21c.tar.gz,samba文件放置的目为/tmp/samba/samba-3.0.21c.tar.gz;

2).编译、安装
首先进入/tmp/samba/samba-3.0.21c.tar.gz目录下,执行解包指令
[root@erp4 samba]# gunzip samba-3.0.21c.tar.gz
[root@erp4 samba]# tar -vxf samba-3.0.21c.tar
然后进入samba-3.0.21c目录下,在这个目录中有一个whatsnew.txt的文件,这个文件记录了samba-3.0.21c版本比以前几 个版本修正的错误,如果英文不成问题的情况下,建议看看.在此不在赘述,然后直接进入source目录下,samba在配置的时候提供了很多的参数,我们 一般用到的就是
      --with-smbmount
      --prefix=
好了,我们继续来编译
[root@erp4 samba-3.0.21c]# ./configure --with-smbmount --prefix=/usr/local/samba
执行make指令
[root@erp4 samba-3.0.21c]# make
这样就可以创建二进制程序和手册页了,然后再执行make install
[root@erp4 samba-3.0.21c]# make install
这样就将安装文件安装完了

2,SAMBA的配置。

   1)普通配置。
首先要将源代码包中/examples/smb.conf.default文件拷贝到/usr/local/samba/lib下,并将其改名为 smb.conf,然后通过运行/usr/local/samba/bin/testparm程序来测试smb.conf文件,如果testparm运行 OK就会列出可装载的服务项,否则给出出错信息.
然后进入/usr/local/samba/lib目录下,去修改smb.conf配置文件,如果只是实现简单需求的话,只需要更改相应的几个简单的
选项即可:
   security = share
找到security的地方,将默认security=user改为share,即共享
;[public]
; comment = Public Stuff
; path = /home/samba
; public = yes
; writable = yes
; printable = no
; write list = @staff
然后再找到上面配置的地方,将前面的;号去掉,将path=处改为你希望共享的目录.

以上只是最简单实现samba的方法,如果还需要其他的需求,可以根据自己的需求进行相应的设置
  
   2)高级配置。
笔者希望能将SAMBA加入到已经在域控制器192.168.78.250上配置好的FILESERVER.SCUT.EDU.CN里,故在[global]里做了如下的修改:
[global]
       workgroup = FILESERVER
       realm = FILESERVER.SCUT.EDU.CN
       netbios name = FILESERVER
       server string = FILESERVER
       security = ADS
       password server = 192.168.78.250
       passdb backend = tdbsam
       log file = /usr/local/samba/var/log.%m
       max log size = 10000
       dns proxy = No
       hosts allow = 202.112.18., 192.168.78., 127.

另外,由于WINDOWS2003上用的是KERBOROS的方式进行用户认证,故现在将SAMBA所在的LINUX也做相应的调整,具体就是运行 “setup",若乱码就unset LANG(在环境变量里除去语言的环境变量),然后进入”Authentication configuration“进行修改,防火墙也应该关闭。

最后配置krb5.conf文件,路径在/etc/krb5.conf,建议先备份一份,然后再去vi.注意:大小写要区别。
笔者的配置如下:

[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log

[libdefaults]
default_realm = FILESERVER.SCUT.EDU.CN
dns_lookup_realm = false
dns_lookup_kdc = false

[realms]
FILESERVER.SCUT.EDU.CN = {
   kdc = 192.168.78.250
   kdc = 192.168.78.250
   #admin_server = kerberos.example.com:749
   default_domain = fileserver.scut.edu.cn
}

FILESERVER.SCUT.EDU.CN = {
}

[domain_realm]
.example.com = FILESERVER.SCUT.EDU.CN
example.com = FILESERVER.SCUT.EDU.CN

[kdc]
profile = /var/kerberos/krb5kdc/kdc.conf

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

4,将samba加入到域控制器里。

1)连接2003服务器

kinit
administrator@FILESERVER.SCUT.EDU.CN

Kerberos 的 kinit 命令将测试服务器间的通信,后面的域名FILESERVER.SCUT.EDU.CN是你的活动目录的域名,必须大写,否则会收到错误信息:
kinit(v5): Cannot find KDC for requested realm while getting initial credentials.

如果通信正常,你会提示输入口令(为域控制器上对应用户的口令,此处对应管理员口令),口令正确的话,就返回 bash 提示符,如果错误则报告:
kinit(v5): Preauthentication failed while getting initial credentials.

2)加入域,共享WINDOWS上的信息。
若上一步操作成功,则将服务器加入活动目录: /usr/local/samba/bin/net ads join
去 Windows 2003 服务器检查上面的工作:打开活动目录用户和计算机,查看其中的条目,如果成功的话,就可以看到你的 Linux 服务器。
然后在 Linux 机器上,你就可以采用 smbclient 命令连接到 Windows 的共享文件夹(我的共享文件夹为:fileserver),而不需要输入口令(因为采用了Kerberos )。
/usr/local/samba/bin/smbclient //192.168.78.250/fileserver -k

3)WINDOWS访问SAMBA。
在HOST ALLOW所允许的IP段内的WIN的机器里,在运行里输入:\\192.168.78.18;会弹出一个对话框,实质上是到域控制器(192.168.78.250)上去认证.输入已经建立好的域里的用户名和密码,就可以进去了.
注意:因为用户名的输入格式为:域名\用户名,故域名必须在本机里必须可以解析,故建议在本机的首选和次选DNS里均写192.168.78.250,因为在搭建AD的同时,该机器也被搭建成了一个DNS服务器.

5,SAMBA的启动和停止.

这是一个需要注意的地方,在以前的版本,包括2.2.5,2.2.6,2.2.7,2.2.8和2.2.8a都是通过执行
    /usr/local/samba/bin/smbd -D
    /usr/local/samba/bin/nmbd -D
来启动服务,但是3.0.0以后的版本却将守护进程smbd和nmbd放到/usr/local/sambd/sbin/的目录下(更确切的说应该是samba3.0
将命令和系统服务的守护进程进行了分离来提高了它的安全性),
    这时就需要这样来启动服务了
    /usr/local/samba/sbin/smbd -D (UDP相关)
    /usr/local/samba/sbin/nmbd -D (TCP/IP相关)
    /usr/local/samba/sbin/winbindd -D (NT4和ADS DOMAIN相关,此处必须要!)
    如果希望开机时即运行samba服务,可以将服务启动的指令写道/etc/rc.d/rc.local的文件中,并在指令后边加入&,来将
程序放到后台运行.例如:
[root@erp4 lib]# vi /etc/rc.d/rc.local
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.

Touch /var/lock/subsys/local
/usr/local/samba/sbin/smbd -D &
/usr/local/samba/sbin/nmbd -D &
/usr/local/samba/sbin/winbindd -D &

停止的话就KILL相关进程,再起就可以了.