1.因功能需求問題,需要實現OpenLDAP的匿名登錄問題,在網上查看實現方式,大部分都是使用腳本實現
ldapmodify -Q -Y EXTERNAL -H ldapi:/// <<EOF dn: cn=config changetype: modify add: olcDisallows olcDisallows: bind_anon EOF ldapmodify -Q -Y EXTERNAL -H ldapi:/// <<EOF dn: olcDatabase={-1}frontend,cn=config changetype: modify add: olcRequires olcRequires: authc EOF |
但是因實際OpenLDAP部署在正式環境,沒有經過備份,所以不敢使用命令執行實現匿名登錄,如果執行造成OpenLDAP項目配置失敗,造成數據損壞或者丟失就要背鍋了,所以沒有選擇這種實現方式(如果有備份ldap服務器的可以試試這種方式)
2.使用了比較保險的ACL腳本來控制他的匿名登錄問題
每個安裝的OpenLDAP的項目,在他的slapd.conf中都有這樣的一個註釋
這種就是ACL,
先看看access to吧。
以上內容意思是,
dn.base: 約束這個特定DN的訪問。他和dn.exact和dn.baselevel是相同的意思。
dn.one: 約束這個特定的DN第一級子樹的訪問。dn.onelevel是同義詞。
dn.children: 這個和dn.subtree類似,都是對其以下的子樹訪問權的約束。不同點在於,
這個的約束是不包含自己本身DN。而subtree包含了本身的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” 匹配記錄2、3、4、5
規則 dn.children=”ou=users,dc=mydomain,dc=org” 匹配記錄3、4、5,因爲記錄0、1和2都是以DN直接命名的,故不匹配
指定被授權的用戶範圍的方法大致有以下幾種:
所有的訪問者,包括匿名的用戶
anonymous 非認證的匿名用戶
users 認證的用戶
self 目標記錄的用戶自身
dn[.]= 在指定目錄內匹配正則表達式的用戶
dn.= 指定DN內的用戶
例如:
by dn.subtree=“ou=users,dc=domain,dc=org”="^samba*"
被授予的權限access
當選取好ACL作用的目標記錄並選取好用戶範圍後,就該給這些用戶授予他們應該得到的權限了。大致的權限(由低到高)有以下幾類:
none 無權限,即拒絕訪問
auth 訪問bind(認證)設置的權限;前提是需要用戶提交一個DN形式的用戶名並能通過認證
compare 比較屬性的權限;(例如:對照查看某用戶的telephoneNumber值是不是158 8888 8888),但並不具有搜索的權限
search 利用過慮條件進行搜索的權限,但這並不一定具有可讀取搜索結果的權限
read 讀取搜索結果的權限
write 更改記錄屬性值的權限
詳細查看原創博主的文章(CSDN博主「康寶榮華」的原創文章,原文鏈接:https://blog.csdn.net/qq_39567748/article/details/99411568)
所以我在sladp.conf配置文件中新增
access to dn.subtree="ou=people,dc=my-domain,dc=com" by * auth
ACL命令表示在非認證的用戶不允許查看ldap的根級目錄一下信息,完成禁止匿名登錄需求
重啓ldap後即可生效