首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

将 LDAP 目录用于 Samba 认证-配置 Samba

将 LDAP 目录用于 Samba 认证-配置 Samba

配置在完成 LDAP 部分的配置之后,所剩下的工作就只是告知 Samba 执行用户认证时要使用 LDAP 目录服务而不是自身的密码文件 smbpasswd。这是个相对简单的过程,尤其是当假定了这样的起点:我们已经有一个配置正确、功能正常的 Samba PDC。首先,给出一些背景知识说明:
  • Samba 将其所有的配置信息存储在一个文件中,这就是 smb.conf。这个文件的位置因安装选项而异;缺省目录是 /usr/local/samba/lib。
  • 我们的服务器正在进行域认证的域名为 SYROIDMANOR(smb.conf 中的“workgroup =”选项)。
  • 该服务器的 NETBIOS 名是 THOR。
  • 该服务器被配置成该网络的“主浏览器(master browser)”。
  • 该服务器被配置成提供“漫游”概要;它们存储在 /home/samba/profiles 下。
  • 当用户登录时,位于 /home/netlogon 目录中的任何脚本都将运行。
下一步是添加必需的特定于 LDAP 的选项。这些选项都放置在 smb.conf 的 [global] 节中。
LDAP 服务器详细说明下列配置片段显示了“引导”Samba 将目录服务用于用户认证所需的特定于 LDAP 的选项:
1
2
3
4
5
6
;LDAP-specific settings
   ldap admin dn = "cn=Manager,dc=syroidmanor,dc=com"
   ldap server = localhost
   ldap port = 389
   ldap ssl = no
   ldap suffix = "ou=Users,dc=syroidmanor,dc=com"




  • 第一行告知 Samba 谁是 LDAP 目录的管理员;即 Samba 在添加、删除或修改用户帐户时的登录用户。注:这一项必须与 slapd.conf 文件的 rootdn 项匹配(要完全匹配 ― 注意大小写!)。
  • 下一行指定了主管 LDAP 目录的计算机的名称。在本教程提供的案例中,Samba 和 OpenLDAP 位于同一系统中。如果在您的网络拓扑结构中 LDAP 驻留在另一个系统上,则用该计算机的名称替换 localhost。也可以使用静态 IP 代替计算机名称。
  • 第三行是配置 LDAP 服务器“侦听”的端口。端口 389 是标准的非加密端口;636 是标准的加密端口。如果将下一行设置成 ldap ssl = on,则 Samba 会自动尝试与端口 636 上的目录服务器通信。
  • ldap ssl 选项决定是否对 PDC 和 LDAP 服务器之间的通信加密。如果您正在使用 SSL 加密,则将 ldap ssl = no 更改成 yes(或“on”)。我们不设置成加密通信,因为两种服务都基于同一服务器。
  • ldap suffix 是在搜索目录时使用的基本 DN。如果除去该选项,则 LDAP 将从树顶(即 dc=syroidmanor,dc=com)开始所有搜索。将这个选项设置成常用搜索点(如“Users”)会加快查找时间。
上一节还可以再添加一条选项:ldap root passwd =。如果有其它选项存在,那么将管理员密码原封不动地留在配置文件中就决不是一个好主意(在 /etc/openldap/slapd.conf 情况下,不存在其它选项)。在这种情况下我们确实另有选择 ― 可以将它作为秘密隐藏在 tdb 数据库中。
管理秘密整个练习的目的是将所有用户认证信息存储到一个中央资源库(也即 LDAP 目录)中。但是 Samba 守护程序必须代表 LDAP 管理员更改那里存储的信息。这意味着 Samba 必须知道管理员的密码。我们加密了该密码并将它储存在只有 Samba 能够访问的 tdb 数据库中,而不是将该密码放在他人可能“闯入”的文件中。完成这一操作的命令是:
1
smbpasswd -w




这一操作将创建一个名为 secrets.tdb 的文件,在缺省安装的情况下该文件存储在目录 /usr/local/samba/private 中。注:您在上述操作中输入的密码必须与 /etc/openldap/slapd.conf 中包含的“秘密”密码匹配。
脚本更新我们需要对 smb.conf 作的最后的更改是两个选项行,其中一行允许用户从客户机更改其密码,另一行允许在必要时自动添加机器帐户。下面是这两个选项行:
1
2
3
4
5
6
7
8
9
;password sync
   passwd program = /usr/local/sbin/smbldap-passwd.pl -o %u
   passwd chat = *New*password* %n\n *Retype*new*password*
   %n\n *passwd:*all*authentication*tokens*updated*
   unix password sync = Yes

;automatically add trust accounts
   add user script = /usr/local/sbin/smbldap-useradd.pl
   -m -d /dev/null -g computers -s /bin/false




如您所见,我们只是用本教程中先前安装的 Perl 脚本替换了 /usr/local/samba/bin/smbpasswd 命令。之所以这样更改,是因为 smbpasswd 不知道如何与 LDAP 服务器交互;而取代它的 Perl 脚本则知道。下一页是完整的 smb.conf 清单。
完整的 smb.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# /usr/local/samba/lib/smb.conf
# samba configuration file
# last updated: 4/19/2002 by tms

[global]

   ;basic server settings      
   workgroup = SYROIDMANOR
   netbios name = THOR
   server string = Samba-LDAP PDC running %v
   socket options = TCP_NODELAY IPTOS_LOWDELAY SO_SNDBUF=8192 SO_RCVBUF=8192

   DC and master browser settings
   os level = 64
   preferred master = yes
   local master = yes
   domain master = yes
   wins support = yes

   ;security and logging settings
   security = user
   encrypt passwords = yes
   log file = /var/log/samba/log.%m
   log level = 2
   max log size = 50
   hosts allow = 127.0.0.1 192.168.1.0/255.255.255.0

   ;password sync
   passwd program = /usr/local/sbin/smbldap-passwd.pl -o %u
   passwd chat = *New*password* %n\n *Retype*new*password* %n\n
   *passwd:*all*authentication*tokens*updated*
   unix password sync = Yes

   ;LDAP-specific settings
   ldap admin dn = "cn=Manager,dc=syroidmanor,dc=com"
   ldap server = localhost
   ldap port = 389
   ldap ssl = no
   ldap suffix = "ou=Users,dc=syroidmanor,dc=com"

   ;user profiles and home directory
   logon home = \\%L\%U\
   logon drive = H:
   logon path = \\%L\profiles\%U
   logon script = netlogon.bat
   
   ;automatically add trust accounts
   add user script = /usr/local/sbin/smbldap-useradd.pl
   -m -d /dev/null -g computers -s /bin/false

# ==== shares ====

[homes]
  comment = Home Directories
  valid users = %S
  browseable = no
  writeable = yes
  create mask = 0664
  directory mask = 0775

[profiles]
  path = /home/samba/profiles
  writeable = yes
  browseable = no
  create mask = 0600
  directory mask = 0700

[netlogon]
  comment = Network Logon Service
  path = /home/netlogon
  read only = yes
  browseable = no
  write list = tom




扔掉开关……关键时刻已经来到……现在是测试您手艺的时候了。在控制台(或控制台窗口中)以 root 用户输入(在 Red Hat 系统上,一些分发版对其初始化脚本使用不同的布局):
1
/etc/init.d/smb start [或者如果 Samba 已经运行,restart]




使用 Samba 总是很容易知道您是否拼错了选项或参数 ― 守护程序将在没有任何错误警告的情况下启动和退出。这就是为什么总是在 ps -ef | grep smb 命令后面跟上 Samba start|restart 是个好主意的原因。您应该看到至少一个 smbd 和一个 nmbd 守护程序正在运行。
如果 Samba 启动失败:
  • 输入 testparm(或者 /usr/local/samba/bin/testparm,因 Samba 安装而异)并检查输出。如果有语法错误,testparm 将指出它出现的行号。
  • 检查您的网络连接(以 root 用户运行 ifconfig -a);Samba 在运行之前需要检查活动的网络接口。
  • 检查 Samba 日志以获取任何内部信息。日志位置也是取决于构建时的配置;在缺省编译上,您会在 /usr/local/samba/var 下找到它们。
接下来我们将研究使用 IDEALX 脚本编制实用程序进行帐户管理。
返回列表