OpenLDAP:用ACL控制访问权限
2014-03-07 15:18
495 查看
用ACL控制授权
我们在LDAP中创建目录树后,最感兴趣的就是如何控制用户在目录树中的权限(读写)。谁在什么条件下有记录权限,我们有权限看到哪些信息。ACL(Access Control List)访问控制列表就是解决用户权限问题的。
我们要把ACL写在哪里?
ACL写在OpenLDAP的服务端全局配置文件slapd.conf中,如下这段即为其指令:
# access to dn.base="" by * read# access to dn.base="cn=Subschema" by * read# access to *#by self write#by users read#by anonymous auth
也可以写在一个单独的文件中,如access.conf,然后在全局配置文件slapd.conf中
调用,在配置文件中引入这个文件即可,如下:
include /etc/openldap/access.conf
include后面的路径为该文件的放置地址。
ACL语法基础
怎么看懂ACL指令?
首先看下ACL访问指令的格式:
################################################
access to [resources]
by [who] [type of access granted] [control]
by [who] [type of access granted] [control]
# More 'by' clauses, if necessary....
################################################
指令中包含1个to语句,多个by语句。
这个指令的大体意思是,通过access to约束我们访问的范围(resources),
通过by设定哪个用户(who)获取对这个约束范围有什么权限(type of access granted),
并控制(control)这个by语句完成后是否继续执行下一个by语句或者下一个ACL指令。
如果对ACL指令很熟悉的话,可以不必继续往下看,因为以下为详细的指令基础介绍。
现在对ACL指令分解成两大部分进行详细说明,一个是access to指令,一个是by指令。
先看看access to吧。
以上内容意思是,
dn.base:约束这个特定DN的访问。他和dn.exact和dn.baselevel是相同的意思。dn.one:约束这个特定的DN第一级子树的访问。dn.onelevel是同义词。dn.children:这个和dn.subtree类似,都是对其以下的子树访问权的约束。不同点在于,这个的约束是不包含自己本身DN。而subtree包含了本身的DN。#######################################################################
对于dn的约束条件还可以利用模糊约束,如下: access to dn.regex="uid=[^,]+,ou=Users,dc=example,dc=com"by * none dn.regex是用来做匹配(match)用的。这个指令将约束所有uid=(任何值),ou=Users,dc=example,dc=com的DN,其中的任何值是用[^,]+这个符号组合来表示的,他可以代表任何至少有1个字符,且字符当中没有逗号(,)的值。更明确点说,意思就是在ou=Users,dc=example,dc=com这个DN下的所有以uid为属性的一级子树都属于这个约束的范围。
2.通过约束attrs访问 对于DN的约束大多用在对某个层级的约束,而用attrs的话,就可以跨层级(或者说跨越父类树),通过属性来约束访问的范围。 access to attrs=homePhoneby * none 这个例子意思是,任何人都没有权限访问属性为homePhone的信息。在attrs后面的值可以多个,如access to attrs=homePhone,homePostalAddress如果想约束某个对象类(Object class)的所有属性,我们或许可以有这样的形式:
access to attrs = title, registeredAddress, destinationIndicator,……
但这个方法太耗时,也难以阅读,显得笨重,以下给出一个好的方法:
access to attrs=@organizationalPerson
by * none
用@的方法必须谨慎,这段指令不仅仅约束了organizationalPerson里的属性,也约束
了person对象类的属性。为什么?因为organizationalPerson对象类是person的子类,
因此,所有person中的属性就当然也是organizationalPerson的属性了。
如果想做除了organizationalPerson的其他对象类的约束,可以用!来表示:
access to attrs=!organizationalPerson
也可以加入属性的值,具体约束某个值:
access to attrs=givenName val="Matt"
这个指令也可以用模糊约束的方法,如下:
access to attrs=givenName val.regex="M.*" 最后给个一般情况下用到的利用属性约束的例子:access to attrs=member val.children="ou=Users,dc=example,dc=com"by * none
1.通过Filters访问
Filters提供一种支持条目记录匹配的方法,如下:access to filter="(objectClass=simpleSecurityObject)"by * none 这表示我们可以约束所有记录中包含对象类为simpleSecurityObject的信息。 与编程语言类似, ACL指令也有类似与或的条件判断,如下: access tofilter="(|(|(givenName=Matt)(givenName=Barbara))(sn=Kant))"by * none 这段代码过滤出givenName为Matt或者Barbara,或者surname为Kant的信息。
Access to [resources]
resources可以有多种形式,如DN,attrs, Filters.
以下即详细说明。
1.通过约束DN进行访问
如下所示, access to dn="uid=matt,ou=Users,dc=example,dc=com"
by * none
这个指令是指访问uid=matt,ou=Users,dc=example,dc=com这个DN,即把访问的
范围约束在这个DN中。
by * none是指对于任何人的访问都是拒绝的。
总体的意思就是,任何人都没有权限访问uid=matt,ou=Users,dc=example,dc=com这个DN,当然,服务器管理员是可以访问的,不然它无法维护这个OpenLDAP中的用户信息。 再来看一个, access to dn.subtree="ou=Users,dc=example,dc=com"by * none 在这个例子中,我们用了dn.subtree。在我们的目录信息树中,在ou=Users子树下可能有多个用户。举例来说,DN为uid=matt,ou=Users,dc=example,dc=com就是ou=Users, dc=example,dc=com的子树,当要试图访问他时,这个ACL指令就起了作用。总体的意思是,任何人都没有权限访问ou=Users,dc=example,dc=com以及其子树的信息。 #######################################################################※ 此处插播1个知识点 dn.base:Restrict access to this particular DN. This is the default, anddn.exactand dn.baselevel are synonyms of dn.base.dn.one: Restrict access to any entries immediately below this DN.dn.onelevelis a synonym.dn.children:Restrict access to the children (subordinate) entries of this DN.This is similar to subtree, except that the given DN itself is not restricted by the rule. 本文摘自:http://blog.csdn.net/corpsin/article/details/5048402
我们在LDAP中创建目录树后,最感兴趣的就是如何控制用户在目录树中的权限(读写)。谁在什么条件下有记录权限,我们有权限看到哪些信息。ACL(Access Control List)访问控制列表就是解决用户权限问题的。
我们要把ACL写在哪里?
ACL写在OpenLDAP的服务端全局配置文件slapd.conf中,如下这段即为其指令:
# access to dn.base="" by * read# access to dn.base="cn=Subschema" by * read# access to *#by self write#by users read#by anonymous auth
也可以写在一个单独的文件中,如access.conf,然后在全局配置文件slapd.conf中
调用,在配置文件中引入这个文件即可,如下:
include /etc/openldap/access.conf
include后面的路径为该文件的放置地址。
ACL语法基础
怎么看懂ACL指令?
首先看下ACL访问指令的格式:
################################################
access to [resources]
by [who] [type of access granted] [control]
by [who] [type of access granted] [control]
# More 'by' clauses, if necessary....
################################################
指令中包含1个to语句,多个by语句。
这个指令的大体意思是,通过access to约束我们访问的范围(resources),
通过by设定哪个用户(who)获取对这个约束范围有什么权限(type of access granted),
并控制(control)这个by语句完成后是否继续执行下一个by语句或者下一个ACL指令。
如果对ACL指令很熟悉的话,可以不必继续往下看,因为以下为详细的指令基础介绍。
现在对ACL指令分解成两大部分进行详细说明,一个是access to指令,一个是by指令。
先看看access to吧。
以上内容意思是,
dn.base:约束这个特定DN的访问。他和dn.exact和dn.baselevel是相同的意思。dn.one:约束这个特定的DN第一级子树的访问。dn.onelevel是同义词。dn.children:这个和dn.subtree类似,都是对其以下的子树访问权的约束。不同点在于,这个的约束是不包含自己本身DN。而subtree包含了本身的DN。#######################################################################
对于dn的约束条件还可以利用模糊约束,如下: access to dn.regex="uid=[^,]+,ou=Users,dc=example,dc=com"by * none dn.regex是用来做匹配(match)用的。这个指令将约束所有uid=(任何值),ou=Users,dc=example,dc=com的DN,其中的任何值是用[^,]+这个符号组合来表示的,他可以代表任何至少有1个字符,且字符当中没有逗号(,)的值。更明确点说,意思就是在ou=Users,dc=example,dc=com这个DN下的所有以uid为属性的一级子树都属于这个约束的范围。
2.通过约束attrs访问 对于DN的约束大多用在对某个层级的约束,而用attrs的话,就可以跨层级(或者说跨越父类树),通过属性来约束访问的范围。 access to attrs=homePhoneby * none 这个例子意思是,任何人都没有权限访问属性为homePhone的信息。在attrs后面的值可以多个,如access to attrs=homePhone,homePostalAddress如果想约束某个对象类(Object class)的所有属性,我们或许可以有这样的形式:
access to attrs = title, registeredAddress, destinationIndicator,……
但这个方法太耗时,也难以阅读,显得笨重,以下给出一个好的方法:
access to attrs=@organizationalPerson
by * none
用@的方法必须谨慎,这段指令不仅仅约束了organizationalPerson里的属性,也约束
了person对象类的属性。为什么?因为organizationalPerson对象类是person的子类,
因此,所有person中的属性就当然也是organizationalPerson的属性了。
如果想做除了organizationalPerson的其他对象类的约束,可以用!来表示:
access to attrs=!organizationalPerson
也可以加入属性的值,具体约束某个值:
access to attrs=givenName val="Matt"
这个指令也可以用模糊约束的方法,如下:
access to attrs=givenName val.regex="M.*" 最后给个一般情况下用到的利用属性约束的例子:access to attrs=member val.children="ou=Users,dc=example,dc=com"by * none
1.通过Filters访问
Filters提供一种支持条目记录匹配的方法,如下:access to filter="(objectClass=simpleSecurityObject)"by * none 这表示我们可以约束所有记录中包含对象类为simpleSecurityObject的信息。 与编程语言类似, ACL指令也有类似与或的条件判断,如下: access tofilter="(|(|(givenName=Matt)(givenName=Barbara))(sn=Kant))"by * none 这段代码过滤出givenName为Matt或者Barbara,或者surname为Kant的信息。
Access to [resources]
resources可以有多种形式,如DN,attrs, Filters.
以下即详细说明。
1.通过约束DN进行访问
如下所示, access to dn="uid=matt,ou=Users,dc=example,dc=com"
by * none
这个指令是指访问uid=matt,ou=Users,dc=example,dc=com这个DN,即把访问的
范围约束在这个DN中。
by * none是指对于任何人的访问都是拒绝的。
总体的意思就是,任何人都没有权限访问uid=matt,ou=Users,dc=example,dc=com这个DN,当然,服务器管理员是可以访问的,不然它无法维护这个OpenLDAP中的用户信息。 再来看一个, access to dn.subtree="ou=Users,dc=example,dc=com"by * none 在这个例子中,我们用了dn.subtree。在我们的目录信息树中,在ou=Users子树下可能有多个用户。举例来说,DN为uid=matt,ou=Users,dc=example,dc=com就是ou=Users, dc=example,dc=com的子树,当要试图访问他时,这个ACL指令就起了作用。总体的意思是,任何人都没有权限访问ou=Users,dc=example,dc=com以及其子树的信息。 #######################################################################※ 此处插播1个知识点 dn.base:Restrict access to this particular DN. This is the default, anddn.exactand dn.baselevel are synonyms of dn.base.dn.one: Restrict access to any entries immediately below this DN.dn.onelevelis a synonym.dn.children:Restrict access to the children (subordinate) entries of this DN.This is similar to subtree, except that the given DN itself is not restricted by the rule. 本文摘自:http://blog.csdn.net/corpsin/article/details/5048402
相关文章推荐
- OpenLDAP:用ACL控制访问权限
- OpenLDAP:用ACL控制访问权限
- 网络层访问权限控制技术-ACL详解 (2)
- 网络层访问权限控制技术-ACL详解 (3)
- 网络层访问权限控制技术-ACL详解
- 网络层访问权限控制技术-ACL详解 (1)
- acl访问权限控制
- LINUX 单个用户访问权限控制(ACL)
- ceph存储 网络层访问权限控制技术-acl(访问控制列表)
- 网络层访问权限控制技术-ACL详解 (2)
- 网络层访问权限控制技术 ACL详解
- Linux下使用ACL命令实现控制用户的目录访问权限
- 网络层访问权限控制技术-ACL详解 (1)
- 使用Hadoop ACL 控制访问权限
- 您未被授权查看该页 您不具备查看该目录或页面的权限,因为访问控制列表 (ACL) 对 Web 服务器上的该资源进行了配置
- 权限管理 访问控制模型ACL和RBAC
- linux系统对访问控制(ACL)权限的实现
- oracle 11g 发信需要赋予权限 ORA-24247: 网络访问被访问控制列表 (ACL) 拒绝
- 基于AOP实现权限管理:访问控制模型RBAC和ACL
- 网络层访问权限控制技术-ACL详解(转)