暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

gbase 8d 全局配置(一)

快乐很简单 2022-07-25
200


1.1.1. 通用全局配置

1.1.1.1. access

指定访问控制项.

语法如下:

  <access directive> ::= access to <what>

  [by <who> <access> <control>]+

  <what> ::= * |

  [dn[.<basic-style>]=<regex> | dn.<scope-style>=<DN>]

  [filter=<ldapfilter>] [attrs=<attrlist>]

  <basic-style> ::= regex | exact

  <scope-style> ::= base | one | subtree | children

  <attrlist> ::= <attr> | <attr> , <attrlist>

  <attr> ::= <attrname> | entry | children

  <who> ::= * | [anonymous | users | self

  | dn[.<basic-style>]=<regex> |

dn.<scope-style>=<DN>]

  [dnattr=<attrname>]

 

[group[/<objectclass>[/<attrname>][.<basic-style>]]=<regex>]

  [peername[.<basic-style>]=<regex>]

  [sockname[.<basic-style>]=<regex>]

  [domain[.<basic-style>]=<regex>]

  [sockurl[.<basic-style>]=<regex>]

  [set=<setspec>]

  <access> ::= [self]{<level>|<priv>}

  <level> ::= none | disclose | auth | compare | search | read |

{write | add | delete} | manage

  <priv> ::= {=|+|-}{0|d|x|c|s|r|{w|a|z}|m}+

  <control> ::= [stop | continue | break]

详解:

n 指定目标

现在我们看看目标,access 短语的<what>部分:

<what> ::= * | [dn[.<style>]=<dnspec>] [filter=<ldapfilter>] [attrs=<attrlist>]

目标分成三部分.第一部分定义了基础部分的条件,位于目录信息树(DIT)

或是匹配的条目分辨名. 第二部分定义了必须实现的条目的属性和作为 LDAP

过滤器定义的条件.第三部分定义了对访问整个条目(不存在的话)或仅仅是一

部分,access 短语是否生效.此匹配的分辨名可以是如下的 styles:

<style> ::= regex | base | one | subtree | children

缺省风格是 regix,意思是值应该解析成正则表达式,表示匹配的条目分辨名.

选择匹配的字符串的一部分,保留匹配的部分用在以后作替换是可能的.我们使

用闭括号完成此部分.以后我们会称第一个匹配的部分为$1,第二个匹配部分为

$2,依此类推.

多数 access 短语不需要完整的正则表达式,而用正则表达式写是令人讨厌

的.基于此原因,提供其他一些风格:base 是你的访问是对于提供的条目名有效

的,one 代表提供的条目的所有直接子条目,subtree 代表所选条目加上所有的子

条目,children 代表所有子条目但不包括所选条目自己.代替使用 dn=part,你可

以简单定义星号,这比等价于 dn.regex=.*.的形式更易于理解.

以上是 access 短语可以成为整个条目或一部分前的情况.后面的情况在我

们指明一个属性列表时出现,

<attrlist> ::= <attr> | <attr> , <attrlist>

<attr> ::= <attrname> | entry | children

你需要每一个对条目有效的操作的条目访问控制.特别的,你从条目中获取

值时需要 read 访问权限,如果你要代表此条目需要 auth 访问权限.显然,你不需

要 entry 访问权限以修改条目自身的值.

你需要 write访问权限,以实现对子条目增删或重命名,包括改变条目的上级,

你需要 write 访问权限修改老的和新的上级.

n 指定接受者

现在我们来指定接受者,即指定由谁来获得给定目标的访问权限.

<who> ::= [ * | anonymous | users | self | dn[.<style>]=<regex> ]

[dnattr=<attrname>]

  [group[/<objectclass>[/<attrname>][.<style>]]=<regex>]

  [peername[.<style>]=<regex>] [sockname[.<style>]=<regex>]

  [domain[.<style>]=<regex>] [sockurl[.<style>]=<regex>]

  [set=<setspec>]

这是一个复杂的定义,所以我们慢慢来检查.首先,我们有一个分辨名规范,我们已

经熟悉了使用通配符* 和 dn=.后者可以使用一个样式作为目标规范.

术语 users 代表用户同一些条目绑定的用户,术语 anonymous 代表没有绑定或空绑定.

术语 dnattr 允许赋予基于包含条目自身的数据的访问权限.匹配这个术语的

目标存储在具有给定的 attrname 属性的条目中.通常用来给定特殊的所有权限,

其标识存储在 attrname 中.

术语 group 选择那些列在目录中的其他一些条目的目标.group 条目对象类

必须是<objectclass>(缺省为:groupOfNames),必须从属性类型为<attrname>(缺

省:member)中取得目标对象列表.匹配风格 style 缺省为 regex.此时,<regex>中的值作一个变量替换,结果为目标对象的条目分辨名列表.如果 style是 exact,则不进行变量替换,给定的值就是接收的目标对象列表.

术语<peername>和<sockname>用来指明远端和本地的目录连接,语法上相

同,通常使用型如 IP=<ip-address>:<port>的字符串.我们可以使用这些术语用基

于客户 IP 地址的方式控制目录的访问.

术语<domain>用来从一些 DNS 域中选择连接的内容.如果<style>是 exact,指明<regex>被作为大小写敏感的文本字符串进行比较.如果<style>是 regex(缺省),将进行变量替换,并按正则匹配进行比较.

术语<sockurl>用来依照用来连接的特定监听器来选择内容.如果<style>是

exact,指明<regex>被作为大小写敏感的文本字符串进行比较.如果<style>是

regex(缺省),将进行变量替换,并按正则匹配进行比较.

组访问控制的例子

考虑一组名称,带"member"和"owner"属性.我们要"owner"能够管理组,"members"能自由地加入和退出,而且应用程序能读取"members"以完成工作.可能的解决是:

access to dn.exact="cn=My Group,ou=Groups,dc=example,dc=com"

  attrs=member

  by dnattr=owner write

  by dnattr=member selfwrite

  by dn.regex="cn=[^,]+,ou=Apps,dc=example,dc=com" read

  by * none

n 权限和特权

<access> ::= [self]{<level>|<priv>}

<level> ::= none | auth | compare | search | read | write

<priv> ::= {=|+|-}{w|r|s|c|x}+

有两种方式定义访问权限.第一种方法是基于权限分级的概念,只在老的版本中使用.每一级访问级别被包含在下一级中.例如,读权限包含了查询权限. 访问级别的名称或多或少地描述自己的含义,只有 auth 是用来向目录绑定.

大部分情况下,访问等级正是你所需要的.无论如何,是存在某些不能用访问等级快速设置的访问策略的,比如有写权限但拒绝其他访问. 密码等认证信息经常是这样的:给拥有者写权限,给匿名者认证权限,拒绝其他访问.你不能通过访问等级做到这点.

你可以使用第二种方法,它基于离散的特权:每个特权独立地赋予或不赋予其他人.共有 5 种离散特权: w (写), r (读), s (查询), c (比较) 和 x (认证) ,以字母指明.

如果把你的特权列在=之前, 特权将被按给定的内容重新设置.也可以用加号(+)和减号(-)在你已有的特权上增减一种或多种特权.

但是,我们说,一旦匹配,对访问控制的分析就停止了.怎样增减特权呢?好的,我们说这是使用下面内容之前的缺省情况.

我要允许我的应用程序的用户创建1个用户组.然后,他们可以修改他们的组,等等…我想下面这行是正确的,其实不然.我想,当 1 个用户试图创建新组,他还不是拥有者,所以没有访问权.那么,是否有 1 种给新数据创建者的特殊访问权?你能帮我吗?

# 只要记住组的成员能够列出组的信息

access to dn=".*,dc=groups,dc=appli"

by dnattr=owner write

by group="cn=admin,dc=groups,dc=appli" write

by group="cn=designer,dc=groups,dc=appli" read

by dnattr=member read

n 控制在匹配之后做什么

在执行了<access>规范之后,该指定如何执行了.选项如下:

<control> ::= [ stop | continue | break ]

默认是 stop,意思是结束访问控制的执行,不管到目前为止,得到的访问权限为什么.

然而,如果用 continue 代替,将处理其他的<who> 子句.你也能停止本子句(the <who>)的执行,但继续读取其他的 access 子句,可以指定break 来完成此功能.如果你想要在找到匹配的目标之后,添加和删除特权,这一选项将会很有用.这个指令准许一个或多个请求者(由<who>指明)对一组条目和/或属性(由<what>指明)进行访问(由<access>指明).

比较常见的配置如下:

access to *

  by anonymous read

  by * write

1.1.1.2. allows

allows <特性>

允许某些特性.多个特性以空格分隔.缺省是 none.可选的特性如下:

特性 含义

bind_v2 LDAPv2 绑定

bind_anon_cred 密码为空的简单绑定

bind_anon_dn DN为空的简单绑定

1.1.1.3. argsfile

argsfile <文件名>

把启动目录服务器的命令行参数写入<文件名>指定的文件中.

1.1.1.4. attributetype

语法如下:

AttributeTypeDescription = LPAREN WSP

  numericoid ; OID

  [ SP "NAME" SP qdescrs ] ; 名称

  [ SP "DESC" SP qdstring ] ; 描述

  [ SP "SUP" SP oid ] ; 父类

  [ SP "EQUALITY" SP oid ] ; 用于相等过滤的匹配规则

  [ SP "ORDERING" SP oid ] ; 用于排序过滤的匹配规则

  [ SP "SUBSTR" SP oid ] ; 用于子串过滤的匹配规则

  [ SP "SYNTAX" SP noidlen ] ; 值的语法

  [ SP "SINGLE-VALUE" ] ; 是否单值(缺省多值)

  [ SP "NO-USER-MODIFICATION" ] ; 是否允许用户修改(缺省允许用户修改)

  [ SP "USAGE" SP usage ] ; 用法,缺省 userApplications

  extensions WSP RPAREN ; 扩展

定义属性类型.具体使用方法可以参见系统 schema 文件.我在这里只举一个简单的例子:

attributetype ( 0.9.2342.19200300.100.1.9 NAME 'host'

EQUALITY caseIgnoreMatch

SUBSTR caseIgnoreSubstringsMatch

SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} )

1.1.1.5. defaultaccess

defaultaccess { none | authc | compare | search | read | write }

指明当没有设置访问控制时,对请求者给予的缺省访问权限级别.任何给出的访问权限级别暗含着所有较低的级别.例如,读权限包含查询权限、比较权限和认证权限,但不包含写权限.

注意:因为 defaultaccess 比较隐晦,使用中容易造成安全漏洞,所以建议通过设

置访问控制来显式地指明访问权限.

缺省:

defaultaccess read

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论