将 LDAP 目录用于 Samba 认证-用户管理
- UID
- 1066743
|
将 LDAP 目录用于 Samba 认证-用户管理
管理 Samba 用户在开始执行将用户添加到 LDAP 目录的实际操作之前,迅速复习一下与用户/机器帐户有关的 Samba 规则以及这些规则是如何在访问 LDAP 存储时规范 Samba 的行为,这样做是没有坏处的。
- 规则一:在可以将用户添加到 smbpasswd 密码文件之前,该用户必须在托管 Samba 服务的系统上拥有 UNIX/Linux 帐户(通常存储在 /etc/passwd 中)。如果您尝试使用 /usr/local/samba/bin/smbpasswd 实用程序添加用户帐户,则会被告知这种情况。如果您尝试用 smbldap-useradd.pl 脚本添加用户(我们将稍后讨论它),则不会获得这一情况的警告。
- 规则二:如果您尝试用前面提到的 Perl 脚本添加用户帐户(对于用户,我的意思是说用户帐户或机器帐户),则会为上述用户在 LDAP 目录中创建 POSIX 帐户。然后,该用户就能够登录到通过该 LDAP 服务器进行认证的任何基于 POSIX 的机器上。这个用户将不能访问任何由该 LDAP 服务器认证并由 Samba 服务器托管的 Samba 共享。这是因为该用户存在于 LDAP 树的 posixAccount 分支中,而不是在 sambaAccount 分支中。
- 规则三:(该规则是上述的规则一和二的结合),如果希望用户同时在 LDAP 服务器上具有 POSIX 帐户和 Samba 帐户,则首先确保它们在 Samba 服务器上拥有现成的系统帐户,然后用 smbldap-useradd.pl 将它们添加到 LDAP 目录。
LDAP 的帐户结构迄今为止,我们对 LDAP 帐户结构的大多数讨论,都太过理论化了。为了进一步了解 LDAP 下的 POSIX 帐户和 Samba 帐户的差异,同时为了更详细地说明前一页中讨论的帐户创建过程,让我们研究一个示例。下面显示了一位用户的 LDIF(LDAP 目录信息文件,LDAP Directory Information File)输出,该用户是用下列命令创建的:/usr/local/sbin/smbldap-useradd.pl -m -P tom (“-m”基于 /etc/skel 中包含的模板创建用户目录和概要;“-P”在添加了该用户之后提示输入密码)。要产生实际 LDIF 输出:/usr/local/sbin/smbldap-usershow.pl tom
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| [root@thor sbin]# /usr/local/sbin/smbldap-usershow.pl tom
dn: uid=tom,ou=Users,dc=syroidmanor,dc=com
objectClass: top
objectClass: account
objectClass: posixAccount
cn: tom
uid: tom
uidNumber: 500
gidNumber: 100
homeDirectory: /hometom
loginShell: /bin/bash
gecos: User
description: User
userPassword:: e1NTSEF9bWxBL1RHZFNoTkREEWlGTndZOFlCWUVUdWp3MGgrbTc=
|
接下来,让我们将另一个用户添加到同一用户项,并执行下列操作:
1
2
3
4
5
6
7
| root@thor root # useradd -p test tom2
root@thor root # /usr/local/samba/bin/smbpasswd tom2
New SMB password: typesecretpassword
Retype new SMB password: typesecretpassword
User added
All authentication tokens updated
root@thor root #
|
现在,如果输入 /usr/local/sbin/smbldap-usershow.pl tom,则获得下列输出:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| dn: uid=tom,ou=Users,dc=syroidmanor,dc=com
objectClass: top
objectClass: account
objectClass: posixAccount
objectClass: sambaAccount
cn: tom
uid: tom
uidNumber: 500
gidNumber: 100
homeDirectory: /hometom
loginShell: /bin/bash
gecos: User
description: User
userPassword:: e1NTSEF9bWxBL1RHZFNoTkREEWlGTndZOFlCWUVUdWp3MGgrbTc=
lmPassword: 552902031BEDE9EFAAD3B435B51404EE
pwdCanChange: 0
pwdMustChange: 2147483647
ntPassword: 878D8014606CDA29677A44EFA1353FC7
pwdLastSet: 1010179230
rid: 2000
|
如您所见,用户 tom 的 LDIF 现在同时具有 posixAccount 详细信息和 sambaAccount 信息。
侧栏:uid、gid 和 RID您也许在 Samba 文档或者可能是在 LDAP 帐户的输出中见到过对术语 RID 的引用。那么什么是 RID 呢?UNIX 操作系统(包括象 Linux 这样的派生物)通过整数 uid(用户标识,User ID)唯一地标识用户,并通过整数 gid(组标识,Group ID)唯一地标识组。当以某一用户登录时,通过输入 id 即可访问这个信息。
当前的 Microsoft 操作系统通过称为 RID 的值唯一地标识用户和组,该值通常是一个用十六进制表示的整数。在 UNIX 下,用户和组存在于独立的名称空间中。而在 Microsoft 操作系统上,用户和组存在于一个名称空间中。
Samba 使用下列公式将 UNIX uid 和 gid 映射为 RID:
1
2
| rid = 2 (uid) + 1000
rid = 2 (gid) + 1001
|
因此,如果工作在 Red Hat 系统上的用户 tom,其 uid 为 500,gid 为 500,则映射到 Microsoft 域中的 RID 分别为 2000 和 2001。 |
|
|
|
|
|