Dec
13
最近在学习《Samba-HOWTO-Collection》,其中多次提到Samba+LDAP配置方法,以实现PDC及BDC等NT4 Style Domain。该方案待我整理后再写。先来学学基础,就是LDAP服务。
Windows的活动目录(Active Directory)是运用LDAP最完美的实现,使用它可以把大量验证方式统一到在一个后台数据库里面,极大的方便管理员的管理。对于普通用户来说,也可以简化很多。有点像网易的“通行证”。
而在红旗DC Server 5.0系统里面,也有很多套件是加入了对LDAP的支持,从开始的系统登陆(PAM),到常用的应用服务(FTP、Samba)等。我们这次不讲配置,讲原理,讲组织结构。
一、什么是LDAP
LDAP是Lightweight Directory Access Protocol的简写,中文是轻型目录服务。它是基于X.500标准的,但支持TCP/IP,而且简单很多,并可根据需要定制。优点包括:
二、什么情况下使用
LDAP中的数据(成为entry,条目),一般是按照地理位置和组织关系进行组织的,常用于存放需要从不同地点读取,但是不需要经常更新的数据。大多数的LDAP服务器都为读进行了优化,在读的性能对比上,LDAP服务器会比关系数据库快一个数量级,但LDAP不适合存储需要经常改变的数据。所以,LDAP和关系数据库是有区别的。但也有后台使用关系数据库,中间架设LDAP服务器作为应用接口的情况,以加快用户获取信息的速度。好像常见的企业级邮件服务器就是这种。
三、LDAP的结构
LDAP中目录是按照树型结构组织的,目录由条目(entry)组成,条目相当于关系数据库中的表;而条目是包含区别名(DN,Distiguished Name)的属性(Attribute)集合,而DN相当于关系数据库中的关键字(Primary Key),是区别的标识;属性就由类型(Type)和多个值(Values)组成,相当于关系数据库中的域是由域名和数据类型组成,只是不同在于其中的值不像关系数据库中为了降低数据冗余性必须不相关。
◎基准DN的常用格式是用DNS域名的不同部分组成,类似:
这种方式比较灵活,而且也是Windows 活动目录使用的格式
◎在根目录下,使用容器(OU,Oraganization Unit)从逻辑上把数据区分开,例如:
◎在容器下面,就是由类型和属性组成对象类(objectclass ),而属性是可以自己定制的
以红旗DC Server 5.0带的OpenLDAP为例,一个条目的属性必须要遵循 /etc/openldap/schema/ 模式文件中定义的规则。规则包含在条目的 objectclass 属性中。
※这个不容易理解,看看nis.schema中的posixAccount objectclass
下面是对 uidNumber 属性的描述:
在所有的属性类型都已经定义了,它们被收集到 posixAccount objectclass 中:
上面就是用类型定义属性,cn、uid、uidNumber等就是属性,用属性加入对象类。
在/etc/slapd.conf中加入不同的schema,可以定义不同的属性、对像类。而shema可以根据RFC的相关标准进行定制。
四、一条LDAP记录
目录信息树
dn就是dc=linuxfly,dc=org,容器ou就是People、Groups,下面就是属性uid=ldapuser等。
LDAP 目录条目和 Linux 密码文件
ldapuser条目:具有一个识别名属性 dn,它用作用户名,并与 userPassword 等一起用来在 LDAP 目录中记录信息,或与 LDAP 目录绑定在一起使用。
五、LDAP 数据交换格式LDIF
LDAP LDIF 格式,是数据库信息的一种文本格式的表示。这种格式是行界定、冒号分隔的属性-值对。通过它,可以很方便的导入、导出LDAP条目。
# extended LDIF
#
# LDAPv3
# base <> with scope sub
# filter: (objectclass=*)
# requesting: ALL
#
# linuxfly.org
dn: dc=linuxfly,dc=org
dc: linuxfly
objectClass: top
objectClass: domain
# People, linuxfly.org
dn: ou=People,dc=linuxfly,dc=org
ou: People
objectClass: top
objectClass: organizationalUnit
# Group, linuxfly.org
dn: ou=Group,dc=linuxfly,dc=org
ou: Group
objectClass: top
objectClass: organizationalUnit
# ldapuser, Group, linuxfly.org
dn: cn=ldapuser,ou=Group,dc=linuxfly,dc=org
objectClass: posixGroup
objectClass: top
cn: ldapuser
gidNumber: 500
# ldapuser, People, linuxfly.org
dn: uid=ldapuser,ou=People,dc=linuxfly,dc=org
uid: ldapuser
cn: ldapuser
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 500
gidNumber: 500
homeDirectory: /home/ldapuser
gecos: test2
# search result
search: 2
result: 0 Success
# numResponses: 6
# numEntries: 5
Windows的活动目录(Active Directory)是运用LDAP最完美的实现,使用它可以把大量验证方式统一到在一个后台数据库里面,极大的方便管理员的管理。对于普通用户来说,也可以简化很多。有点像网易的“通行证”。
而在红旗DC Server 5.0系统里面,也有很多套件是加入了对LDAP的支持,从开始的系统登陆(PAM),到常用的应用服务(FTP、Samba)等。我们这次不讲配置,讲原理,讲组织结构。
一、什么是LDAP
LDAP是Lightweight Directory Access Protocol的简写,中文是轻型目录服务。它是基于X.500标准的,但支持TCP/IP,而且简单很多,并可根据需要定制。优点包括:
引用
1、可以在任何计算机平台上运行;
2、通过简单的“推”或“拉”的方式即可复制部分或全部数据,比常见的关系数据库简单很多;
3、主要是面向数据的查询服务,速度比关系数据库快很多;
4、可以使用ACI(类似ACL,访问控制列表)控制对数据的读、写管理,并且是在LDAP服务器内部实现的,不用担心应用程序Bug问题(相对Web架构来说);
5、使用类似DNS树的目录树结构,方便多级服务器的连接和管理;
2、通过简单的“推”或“拉”的方式即可复制部分或全部数据,比常见的关系数据库简单很多;
3、主要是面向数据的查询服务,速度比关系数据库快很多;
4、可以使用ACI(类似ACL,访问控制列表)控制对数据的读、写管理,并且是在LDAP服务器内部实现的,不用担心应用程序Bug问题(相对Web架构来说);
5、使用类似DNS树的目录树结构,方便多级服务器的连接和管理;
二、什么情况下使用
LDAP中的数据(成为entry,条目),一般是按照地理位置和组织关系进行组织的,常用于存放需要从不同地点读取,但是不需要经常更新的数据。大多数的LDAP服务器都为读进行了优化,在读的性能对比上,LDAP服务器会比关系数据库快一个数量级,但LDAP不适合存储需要经常改变的数据。所以,LDAP和关系数据库是有区别的。但也有后台使用关系数据库,中间架设LDAP服务器作为应用接口的情况,以加快用户获取信息的速度。好像常见的企业级邮件服务器就是这种。
三、LDAP的结构
LDAP中目录是按照树型结构组织的,目录由条目(entry)组成,条目相当于关系数据库中的表;而条目是包含区别名(DN,Distiguished Name)的属性(Attribute)集合,而DN相当于关系数据库中的关键字(Primary Key),是区别的标识;属性就由类型(Type)和多个值(Values)组成,相当于关系数据库中的域是由域名和数据类型组成,只是不同在于其中的值不像关系数据库中为了降低数据冗余性必须不相关。
◎基准DN的常用格式是用DNS域名的不同部分组成,类似:
引用
dc=linuxfly,dc=org
这种方式比较灵活,而且也是Windows 活动目录使用的格式
◎在根目录下,使用容器(OU,Oraganization Unit)从逻辑上把数据区分开,例如:
引用
ou=people,ou=groups
◎在容器下面,就是由类型和属性组成对象类(objectclass ),而属性是可以自己定制的
以红旗DC Server 5.0带的OpenLDAP为例,一个条目的属性必须要遵循 /etc/openldap/schema/ 模式文件中定义的规则。规则包含在条目的 objectclass 属性中。
※这个不容易理解,看看nis.schema中的posixAccount objectclass
下面是对 uidNumber 属性的描述:
引用
attributetype ( 1.3.6.1.1.1.1.0 NAME 'uidNumber'
DESC 'An integer uniquely identifying a user in an administrative domain'
EQUALITY integerMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
DESC 'An integer uniquely identifying a user in an administrative domain'
EQUALITY integerMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
在所有的属性类型都已经定义了,它们被收集到 posixAccount objectclass 中:
引用
objectclass ( 1.3.6.1.1.1.2.0 NAME 'posixAccount' SUP top AUXILIARY
DESC 'Abstraction of an account with POSIX attributes'
MUST ( cn $ uid $ uidNumber $ gidNumber $ homeDirectory )
MAY ( userPassword $ loginShell $ gecos $ description ) )
DESC 'Abstraction of an account with POSIX attributes'
MUST ( cn $ uid $ uidNumber $ gidNumber $ homeDirectory )
MAY ( userPassword $ loginShell $ gecos $ description ) )
上面就是用类型定义属性,cn、uid、uidNumber等就是属性,用属性加入对象类。
在/etc/slapd.conf中加入不同的schema,可以定义不同的属性、对像类。而shema可以根据RFC的相关标准进行定制。
四、一条LDAP记录
目录信息树
dn就是dc=linuxfly,dc=org,容器ou就是People、Groups,下面就是属性uid=ldapuser等。
LDAP 目录条目和 Linux 密码文件
ldapuser条目:具有一个识别名属性 dn,它用作用户名,并与 userPassword 等一起用来在 LDAP 目录中记录信息,或与 LDAP 目录绑定在一起使用。
五、LDAP 数据交换格式LDIF
LDAP LDIF 格式,是数据库信息的一种文本格式的表示。这种格式是行界定、冒号分隔的属性-值对。通过它,可以很方便的导入、导出LDAP条目。
# ldapsearch -x
引用
# extended LDIF
#
# LDAPv3
# base <> with scope sub
# filter: (objectclass=*)
# requesting: ALL
#
# linuxfly.org
dn: dc=linuxfly,dc=org
dc: linuxfly
objectClass: top
objectClass: domain
# People, linuxfly.org
dn: ou=People,dc=linuxfly,dc=org
ou: People
objectClass: top
objectClass: organizationalUnit
# Group, linuxfly.org
dn: ou=Group,dc=linuxfly,dc=org
ou: Group
objectClass: top
objectClass: organizationalUnit
# ldapuser, Group, linuxfly.org
dn: cn=ldapuser,ou=Group,dc=linuxfly,dc=org
objectClass: posixGroup
objectClass: top
cn: ldapuser
gidNumber: 500
# ldapuser, People, linuxfly.org
dn: uid=ldapuser,ou=People,dc=linuxfly,dc=org
uid: ldapuser
cn: ldapuser
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 500
gidNumber: 500
homeDirectory: /home/ldapuser
gecos: test2
# search result
search: 2
result: 0 Success
# numResponses: 6
# numEntries: 5
那可以这样么:
搭建nfs文件服务器,在上面做LDAP
指定用户名和登陆后的目录
在windows客户端通过这样WEB登陆的方式
能直接象使用本地硬盘一样
读取和写入文件么
其次,Samba+LDAP就可以做到你说的目的,实现后非常的方便,我也已经测试通过了,但没时间整理,如果你有时间,可以先看看前面一篇的:
[原]用Samba做主域服务器
后面再熟悉Samba+LDAP就很容易了。
搭建域后,用户登陆就有本地盘和网络盘,很方便。