OpenLDAP權限配置

安裝好了openldap以後,就是對它進行配置了,其中一項就是設置訪問控制,限制普通用戶只能修改/訪問他們能修改/訪問的項。這就是ACL須要作的事情。linux


設置方法

一、能夠將 include行放在/etc/openldap/slapd.conf 的頂部,指向一個單獨的文件(例如, include /etc/openldap/slapd.access.conf) 
二、或者能夠將 ACL 直接添加到 slapd.conf。這徹底由您選擇 ― Mandrake 一般使用 include 行;Red Hat 將 ACL 添加到配置文件。slapd.conf文件路徑:/etc/openldap/slapd.conf正則表達式

ACL設置語法

1.語法

access to what: 
by who access control
 
其中,access to指示啓用訪問控制,上句大體能夠理解爲: 
access to <對什麼目標進行控制>[by <做用於哪些訪問者> <授予什麼樣的訪問權限><採起什麼樣的匹配控制動做>]+dom

2.剖析

2.1 控制目標 what

這一域主要是實現對ACL應用對象的指定,對象能夠是記錄和屬性。選擇ACL目標記錄的方法通常有兩種:DN和filter,語法爲:ssh


what ::= * | 
[dn[.basic-style]=regex | dn.scope-style=DN] 
[filter=ldapfilter] [attrs=<attrlist>] 
ui

2.1.1 指定全部的記錄

access to *code

2.1.2 經過DN指定

語法以下:server

to dn[.basic-style]=regex 
basic-style ::= regex | exact 
to dn.scope-style=DN 
scope-style ::= base | one | subtree | children
對象

第一種方法是使用正則表達式(dn.regex)或精確匹配(dn.style)的方式來匹配符合條件的記錄(這個好像不像想象的那麼簡單,實現起來頗爲費腦筋),例如:it

access to dn="^.*,uid=([^,]+),ou=users,(.*)$"test

第二種方法經過「區域」選擇的方法進行目標記錄的選取,對以指定的DN開始的目錄樹區域進行目標記錄匹配。匹配區域的方式共有四種: 
base 只匹配DN自己一條記錄 
one 匹配以給定DN爲父目錄的全部記錄 
subtree 匹配以給定DN爲根目錄的全部子樹內的記錄 
children 匹配給定DN下的全部記錄,但應該不包括以DN直接命名的那條記錄(參見例子的解釋)

例如:對於 
0: dc=mydomain,dc=org 
1: cn=root,dc=mydomain,dc=org 
2: ou=users,dc=mydomain,dc=org 
3: uid=samba,ou=users,dc=mydomain,dc=org 
4: cn=Administator,uid=samba,ou=users,dc=mydomain,dc=org 
5: uid=guest,ou=users,dc=mydomain,dc=org

規則 dn.base=」ou=users,dc=mydomain,dc=org」 只會匹配記錄2 
規則 dn.one=」ou=users,dc=mydomain,dc=org」 匹配記錄3和記錄5,記錄4是記錄3的子目錄,故不算在內 
規則 dn.subtree=」ou=users,dc=mydomain,dc=org」 匹配記錄二、三、四、5 
規則 dn.children=」ou=users,dc=mydomain,dc=org」 匹配記錄三、四、5,由於記錄0、1和2都是以DN直接命名的,故不匹配

2.1.3 經過filter匹配記錄

經過filter指定過濾規則進行記錄過慮,語法以下:

access to filter=ldap filter

其中filter指定的爲search的過濾規則,這類同於linux系統中grep的匹配方式。如:

access to filter=(objectClass=sambaSamAccount)

也能夠結合使用DN和filter進行記錄的匹配,例如:

access to dn.subtree=」ou=users,dc=mydomain,dc=org」 filter=(objectClass=posixAccount)

2.1.4 經過attrs選取匹配記錄

語法: 
attrs=attribute list

例如: 
access to attrs=uid,uidNumber,gidNumber

也能夠結合使用DN和attrs進行記錄的匹配,例如: 
access to dn.subtree="ou=users,dc=mydomain,dc=org" attrs=uid

2.2 被用來受權的訪問者的指定

指定被受權的用戶範圍的方法大體有如下幾種: 
* 全部的訪問者,包括匿名的用戶 
anonymous 非認證的匿名用戶 
users 認證的用戶 
self 目標記錄的用戶自身 
dn[.<basic-style>]=<regex> 在指定目錄內匹配正則表達式的用戶 
dn.<scope-style>=<DN> 指定DN內的用戶

例如: 
by dn.subtree="ou=users,dc=domain,dc=org"="^samba*"

2.3 被授予的權限access

當選取好ACL做用的目標記錄並選取好用戶範圍後,就該給這些用戶授予他們應該獲得的權限了。大體的權限(由低到高)有如下幾類: 
none 無權限,即拒絕訪問 
auth 訪問bind(認證)設置的權限;前提是須要用戶提交一個DN形式的用戶名並能經過認證 
compare 比較屬性的權限;(例如:對照查看某用戶的telephoneNumber值是否是158 8888 8888),但並不具備搜索的權限 
search 利用過慮條件進行搜索的權限,但這並不必定具備可讀取搜索結果的權限 
read 讀取搜索結果的權限 
write 更改記錄屬性值的權限

能夠在slapd.conf文件中經過defaultaccess指定默認的權限級別,如: 
defaultaccess search

2.4 採起什麼樣的匹配控制動做control

在進行記錄的匹配時,若是有多條規則存在,那麼在第一次匹配產生後是否還進行後續的匹配或採起其它的動做將取決於此項的設置;控制方式共有如下三種:

stop 這個是默認值,這表示在一次匹配產生後將再也不進行下一個匹配,全部後續的匹配將會中止。 
continue 不管匹配是否已經發生,繼續進行直到全部的規則所有進行完匹配檢查 
break 一個匹配發生後,跳出當前的子句進行後一個子句的檢查

2.5 一個例子

access to dn.chilren="ou=users,dc=mydomain,dc=org" 
attrs=userPassword #指定「密碼」屬性 
by self write #用戶本身可更改 
by * auth #全部訪問者須要經過認證 
by dn.children="ou=admins,dc=mydomain,dc=org" write #管理員組的用戶可更改

access to dn.subtree="ou=SUDOers,dc=test,dc=com" #SUDOers的全部內容必須提供其餘匿名可讀,否則在linux上切換到該用戶,不能使用sudo 
by dn="cn=Manager,dc=test,dc=com" write 
by * read 
access to attrs="gidNumber,homeDirectory,loginShell,uidNumber,sshPublicKey" 
by * read #對這些屬性只能讀,可是userPassword字段是可寫的,容許用戶自行修改密碼,可是不能修改本身的gid,home目錄等 
access to * 
by anonymous read #匿名訪問可讀 
by self write #本身可寫 
by users read
 #其餘用戶可讀

前面這些配置須要放在 
database config access to * by dn.exact="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage by * none enable server status monitoring (cn=monitor) database monitor access to * by dn.exact="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read by dn.exact="cn=Manager,dc=test,dc=com" read by * none 的前面才能生效

相關文章
相關標籤/搜索