目錄
基本介紹
服務專有名詞
安裝
命令行工具
密碼管理
重置管理員密碼
管理服務器進程
管理索引
如何搜索
管理索引
管理目錄數據
測試數據
導出數據
導入數據
LDIF文件數據查看和比較
數據存儲-Backends
配置連接
開啟 HTTP/HTTPS連接
使用 REST訪問 -openDJ3.0
使用證書
安全設置
配置權限和訪問控制
訪問控制指令 (ACI)
權限管理
Replication -同步
備份與恢復
監控、日志記錄和警報
問題處理:
Unable to connect to the server at "xxxx" on port 4444
exception is javax.net.ssl.SSLHandshakeException:
backend-userRoot.lock was not granted
參閱:
基本介紹
????????LDAP基于X.500標準的子集是一個目錄服務,設計主要考慮了快速查找(提供索引)和高可用性,而OpenDJ用Java編寫 基于輕量級目錄訪問協議 Lightweight Directory Access Protocol(LDAP)支持:
????????DAPv3協議。
????????目錄服務標記語言:Directory Services Markup Language (DSML)(已XML 格式描述目錄數據和基本目錄操作)
????????超文本協議:Hypertext Transfer Protocol (HTTP),REST
OpenDJ 還提供:
- 提供客戶端管理工具。
- 支持導入、導出、備份和恢復目錄數據。
- 支持配置管理權限和細粒度的訪問控制。
- 支持復制同步
基本結構
????????可以在ldap-demo中了解大致的結構
????????LDAP 目錄數據被組織成條目,條目包含許多屬性,有些是必須的,有些是自定義的,例如DN 就是必須的且唯一。
????????LDAP 條目在目錄中是金字塔結構,最頂層是DC,正是這樣的結構,為了方便管理添加了更多的組織結構,例如:UO、CN等
LDAP常常用來與AD域控等企業系統平臺結合一起做統一賬號管理,一般用來做單點登錄。
服務專有名詞
baseDN在配置時 一般都是使用CD標簽,但也不是必須的。也可以指定為 o=PW,c=CN
縮寫 | 全稱 | 解釋 |
DN | distinguished name | dn: uid=bjensen,ou=People,ou=company,dc=example,dc=com 唯一標識符,顯示在條目頂部,通常由不區分大小寫的屬性組成 |
DC | domain component | dc=example,dc=com 倒敘打方式將域名拆成多個, |
baseDN | 基于DN,最小單位為DC,最大為DN。在命令行或者客戶端中使用 | |
bindDN | root(超級管理員)用戶一般默認為cn=Directory Manager | |
OU | Organization Unit | 組織單位,可以是多個,也OU深度 |
CN | Common Name | 公共名稱,一般不出現DN中,root(超級管理員)用戶一般默認為cn=Directory Manager |
DSE | "空"的條目,保存DN的組織信息,在信息導出export-ldif 后的文件位于最上層 | |
Backend ID | 存儲空間,也叫 backends name , 用戶默認為userRoot,系統默認adminRoot |
安裝
需要java環境支持:Java Environment.
官方提供了GUI方式和命令行方式(Command-Line):詳細步驟請查看:Home · OpenIdentityPlatform/OpenDJ Wiki · GitHub
可選:
-
- To Move Data from a PDB Backend to a JE Backend
- To Install OpenDJ REST to LDAP Gateway
- To Install OpenDJ DSML gateway
系統環境
/etc/security/limits.confopendj soft nofile 65536opendj hard nofile 131072./setup --cli
./uninstall --cli #卸載
命令行工具
詳細的工具使用方法在:./bin/xxx options --help (Windows 是 ./bat/xxx.bat)
使用過程中用到過的:
-
- 進程啟停: start-ds、status、stop-ds、create-rc-script(生成啟動腳本)
- 導出導入:export-ldif、import-ldif、ldif-diff(LDIF 文件比較)
- 備份恢復:backup、restore
- 用戶管理:ldapmodify、ldapdelete、ldapsearch(查詢)、ldapcompare(比較)
- 配置管理:dsconfig
- 集群同步:dsreplication
- index管理:verify-index(驗證索引正確,需要關閉服務)、rebuild-index
常見的通用參數
-
- --trustAll選項信任所有 SSL 證書,例如用于測試的默認自簽名證書。
- --no-prompt 非交互模式,會導致非信任證書客戶端執行失敗。
在交互式命令行中,為了簡單可以省略非必須的默認參數,比如./bin/dsconfig list-connection-handlers
密碼管理
密碼策略不僅管理密碼,還管理賬戶鎖定
用戶的密碼策略可以復制同步,服務器的密碼策略配置不能復制同步,多節點需要每個節點配置
后端存儲使用SSHA 哈希
可以配置強制定期更改密碼、新用戶在首次登錄后更改密碼、帳戶鎖定、禁用帳戶
[root@tserver121 opendj]# ./bin/ldapsearch --baseDN dc=example,dc=com --bindDN "cn=Directory Manager" "(uid=bjensen)" pwdPolicySubentry
dn: uid=bjensen,ou=People,dc=example,dc=com
pwdPolicySubentry: cn=Default Password Policy,cn=Password Policies,cn=config #默認的密碼策略需要配置objectClass: pwdValidatorPolicy 對應的驗證器
重置管理員密碼
#生成密碼
encode-password --storageScheme SSHA512 --clearPassword password修改配置文件 ./config/config.ldif
userpassword: #替換新的密碼 重啟服務
cn: Directory Manager
管理服務器進程
./bin/start-ds 后端啟動
./bin/start-ds -N 前端啟動
./bin/start-ds -L 使用上次成功啟動的配置啟動 ./config/config.ldif.startok
./bin/start-ds -s 顯示系統信息./bin/stop-ds
./bin/stop-ds -R 重啟
./bin/stop-ds -r, --stopReason #關閉原因,用來排查問題開機啟動./bin/create-rc-script --outputFile /etc/init.d/opendj --userName root #生產啟動腳本chkconfig opendj onservice opendj start
管理索引
索引是為了能夠快速響應搜索,越具體的DN 搜索越快,系統默認會提供cn、uid、mail、objectClass 等默認索引
查看未被索引的日志grep -B 1 unindexed ./logs/access
#打開索引分析功能
./bin/dsconfig set-backend-prop --set index-filter-analyzer-enabled:true --trustAll #選擇Backend 默認為userRoot
在使用客戶端搜索或者使用ldapsearch搜索時,將結果保存在內存中,可以通過界面讀取cn=monitor#執行搜索
[root@tserver121 opendj]# ./bin/ldapsearch --bindDN "cn=Directory Manager" --baseDN "cn=userRoot Storage,cn=monitor" "(objectclass=*)" filter-use
filter-use: (uid=jdoe) hits:2 maxmatches:1 message: #hits(使用過濾器的次數)、maxmatches(匹配數)#debugsearchindex 不會執行搜索,而是返回調試信息
[root@tserver121 opendj]# ./bin/ldapsearch --baseDN dc=example,dc=com --bindDN "cn=Directory Manager" "(uid=user.1000)" * debugsearchindex
dn: cn=debugsearch
debugsearchindex: filter=(uid=user.1000)[INDEX:uid.equality][COUNT:1] final=[COUNT:1]#未被索引
[root@tserver121 opendj]# ./bin/ldapsearch --baseDN dc=example,dc=com --bindDN "cn=Directory Manager" "(uid=*)" debugsearchindex
dn: cn=debugsearch
debugsearchindex: filter=(uid=*)[INDEX:uid.presence][NOT-INDEXED] scope=sub[NOT-INDEXED] final=[NOT-INDEXED] #NOT-INDEXED[INDEX:index-id]標識可用于查找此過濾器的匹配項的索引。[COUNT:entry-count]指定與過濾器匹配的條目數。[LIMIT-EXCEEDED]表示服務器維護一個匹配的索引,但是索引條目限制已超出指定的值。[NOT-INDEXED]表示沒有找到匹配的索引值或索引鍵。
如何搜索
./bin/backendstat 執行有點問題 需要關閉進程 見'backend-userRoot.lock was not granted'
./bin/backendstat list-indexes
./bin/backendstat dump-index --indexName state 詳細信息
# - 是否存在搜索的屬性-uid 比較快,更少占用空間
./bin/ldapsearch --baseDN dc=example,dc=com --bindDN "cn=Directory Manager" "(uid=*)" -#只列出mail字段 數據多的情況下非常有用
./bin/ldapsearch --baseDN dc=example,dc=com --bindDN "cn=Directory Manager" "(uid=*)" mail(uid=bjensen)
(uid~=bjensen) #相似 看起來不準
(uid=bj*) #*匹配
(uid>=bjensen) #相似排序 看起來也不準
管理索引
條目限制 --set index-entry-limit:10000 #不常用,默認限制基本夠用 backendstat show-index-status 查看
./bin/verify-index --baseDN dc=example,dc=com --index cn --clean --countErrors #檢查以下的不常用
./bin/dsconfig create-backend-index --bindDN "cn=Directory Manager" --backend-name myData --index-name cn --set index-type:equality #創建索引
./bin/dsconfig set-backend-index-prop --bindDN "cn=Directory Manager" --backend-name myData --index-name cn --set index-type:approximate #創近似索引
rebuild-index --baseDN dc=example,dc=com --index cn #重建索引
rebuild-index --baseDN dc=example,dc=com --rebuildDegraded #重建降級的索引
rebuild-index --baseDN dc=example,dc=com --clearDegradedState #清理和降級
管理目錄數據
條目的屬性定義- 在config/schema目錄中存放的所有的條目屬性配置,OpenDJ 按排序順序讀取模式文件,99-user.ldif 屬于用戶自定義的配置 在隨后加載
比如在schema/00-core.ldif 文件中對于mail定義:
attributeTypes: ( 0.9.2342.19200300.100.1.3 NAME ( 'mail' 'rfc822Mailbox' )
EQUALITY caseIgnoreIA5Match SUBSTR caseIgnoreIA5SubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} X-ORIGIN 'RFC 4524' )
# OID 開頭
objectClass::所有條目均有一個用于標識其對象類的屬性
測試數據
#測試數據:config/MakeLDIF 下面有剩測試數據的模版example.template 以及其它基本測試數據,使用make-ldif生成測試數據文件
./bin/make-ldif --randomSeed 0 --templateFile ./config/MakeLDIF/example.template --ldifFile /tmp/generated.ldif
導出數據
導出數據,離線導出更快,可以指定backendID,
#--start 20111221230000 #定時導出 停止服務器會在啟動后嘗試執行該任務
#--trustAll選項信任所有 SSL 證書,例如用于測試的默認自簽名證書。
./bin/export-ldif --bindDN "cn=Directory Manager" --includeBranch dc=example,dc=org --backendID userRoot --ldifFile /root/backup.ldif --trustAll
導入數據
導入需要驗證字段, config/schema/99-user.ldif
存放的是用戶定義的屬性
導入數據 import-ldif命令參數與export-ldif一致的
#--start 20111221230000 #定時導出 停止服務器會在啟動后嘗試執行該任務
#--trustAll選項信任所有 SSL 證書,例如用于測試的默認自簽名證書。
./bin/import-ldif --bindDN "cn=Directory Manager" --includeBranch dc=example,dc=org --backendID userRoot --ldifFile /root/backup.ldif --trustAll
LDIF文件數據查看和比較
LDIF文件可以使用less/view等系統工具去查看數據,openDJ提供了 ldifsearch
、ldifmodify
、ldif-diff
,ldifmodify
常常用來合并文件。
數據存儲-Backends
提供 JE 和 PDB 類型的選擇。常用PDB類型,可以通過命令切換使用類型
默認存放位置:db/userRoot/
./bin/dsconfig 命令修改參數后 會修改./config/config.ldif
并且會將修改前的配置文件存在./config/archived-configs
目錄下
./bin/dsconfig --help-all #查看功能#創建
dsconfig create-backend --bindDN "cn=Directory Manager" --type pdb --backend-name myData --set base-dn:dc=example,dc=com --set enabled:true --set db-cache-percent:25 --trustAll --no-prompt[root@tserver121 opendj]# ./bin/dsconfig list-backends
Backend : Type : enabled : base-dn
----------:------:---------:--------------------
adminRoot : ldif : true : cn=admin data
myData : pdb : true : "dc=example,dc=com"
userRoot : pdb : true : "o=example,c=com"#查看
dsconfig get-backend-prop ····
dsconfig list-backend-indexes ···修改
dsconfig set-backend-prop ····刪除
dsconfig delete-backend
關于加密
默認db存儲文件可以通過strings
命令查看部分數據,可以選擇犧牲掉部分性能加密文件存儲 --set confidentiality-enabled:true
傳輸加密:可以使用StartTLS 、SSL等配置
配置連接
openDJ 默認端口和協議:
[root@tserver121 opendj]# ./bin/status--- Connection Handlers ---Address:Port : Protocol : State-------------:-------------:----------- : LDIF : Disabled8989 : Replication : Enabled0.0.0.0:161 : SNMP : Disabled0.0.0.0:389 : LDAP : Enabled0.0.0.0:636 : LDAPS : Enabled0.0.0.0:1689 : JMX : Disabled0.0.0.0:8080 : HTTP : Disabled
加上Administration Connector: Port 4444 (LDAPS)[root@tserver121 opendj]# ./bin/dsconfig list-connection-handlers 獲得handler-nameConnection Handler : Type : enabled : listen-port : use-ssl-------------------------:------:---------:-------------:--------HTTP Connection Handler : http : false : 8080 : falseJMX Connection Handler : jmx : false : 1689 : falseLDAP Connection Handler : ldap : false : 389 : falseLDAPS Connection Handler : ldap : true : 636 : trueLDIF Connection Handler : ldif : false : - : -SNMP Connection Handler : snmp : false : 161 : -#開啟和關閉 389
./bin/dsconfig set-connection-handler-prop --handler-name "LDAP Connection Handler" --set enabled:false --trustAll
./bin/dsconfig set-connection-handler-prop --handler-name "LDAP Connection Handler" --set enabled:true --trustAll
#use-ssl
./bin/dsconfig set-connection-handler-prop --handler-name "LDAPS Connection Handler" --set use-ssl:true --trustAll
開啟 HTTP/HTTPS連接
REST訪問數據映射、 REST訪問權限、 REST認證等 To Set Up REST Access to User Data、
#開啟 http 8080
./bin/dsconfig set-connection-handler-prop --handler-name "HTTP Connection Handler" --set enabled:true --trustAll#啟用 HTTP 訪問日志 --/logs/http-access 還可以配置Debugr日志與審計日志 也可以在config.ldif 中修改 當起不來的時候 非常有用
[root@tserver121 opendj]# ./bin/dsconfig list-log-publishers 獲得 log publisher-nameLog Publisher : Type : enabled------------------------------:------------------------:--------File-Based Access Logger : file-based-access : trueFile-Based Audit Logger : file-based-audit : falseFile-Based Debug Logger : file-based-debug : falseFile-Based Error Logger : file-based-error : trueFile-Based HTTP Access Logger : file-based-http-access : falseReplication Repair Logger : file-based-error : true
[root@tserver121 opendj]# ./bin/dsconfig set-log-publisher-prop --publisher-name "File-Based HTTP Access Logger" --set enabled:true --trustAll#開啟HTTPS(指定JKS)
./bin/dsconfig set-trust-manager-provider-prop --provider-name "Blind Trust" --set enabled:true --trustAll./bin/dsconfig set-connection-handler-prop --handler-name "HTTP Connection Handler" \--set use-ssl:true --set key-manager-provider:JKS --set trust-manager-provider:"Blind Trust" --trustAll[root@tserver121 opendj]# ./bin/stop-ds --restart
使用 REST訪問 -openDJ3.0
修改config/http-config.json 配置信息--修改之前記得備份
#config/http-config.json 修改修改實際的dc 修改完成后需要重啟
"searchBaseDN" : "ou=people,dc=example,dc=com",
"baseDN" : "ou=people,dc=example,dc=com",[root@tserver121 opendj]# ./bin/stop-ds --restart
#查詢
[root@tserver121 opendj]# curl http://host:8080/users/jdoe --user jdoe:password
{"_id":"jdoe","_rev":"000000003f07e62f","schemas":["urn:scim:schemas:core:1.0"],"displayName":"John Doe","name":{"familyName":"Doe"},"contactInformation":{},"meta":{"created":"2024-06-20T10:30:36Z"}}
使用證書
keytool
命令將客戶端應用程序的二進制格式自簽名證書添加到 OpenDJ 信任庫的命令
服務端需要打開LDAPS 在安裝的時候可以選擇
Address:Port : Protocol : State
-------------:-------------:---------
0.0.0.0:636 : LDAPS : Enabled
#查看opendj已安裝服務器證書 server-cert.crt 默認證書
keytool -list -alias server-cert -keystore ./config/keystore -storepass `cat ./config/keystore.pin`#如果有自己的證書 列如myapp-cert.crt 建議使用`import` 導入到truststore 文件中
keytool -import -alias myapp-cert -file myapp-cert.crt -keystore ./config/truststore -storepass `cat ./config/keystore.pin`#導出
keytool -export -alias server-cert -file server-cert.crt -keystore ./config/keystore -storepass `cat ./config/keystore.pin`#刪除
keytool -delete -alias server-cert
是否能將opendj的 默認證書添加到系統默認 --測試中
#將server-cert.crt 默認證書導出使用
keytool -export -alias server-cert -file server-cert.crt -keystore ./config/keystore -storepass `cat ./config/keystore.pin`#拷貝到系統證書目錄下
mv server-cert.crt /etc/pki/ca-trust/source/anchors/#更新
update-ca-trust extract
安全設置
- 限制匿名訪問
攻擊者可以直接通過LDAP客戶端工具使用匿名連接既可訪問LDAP中的隱秘數據。
./bin/dsconfig set-global-configuration-prop --set reject-unauthenticated-requests:true
- 拒絕空密碼訪問
默認值: true
./bin/dsconfig set-global-configuration-prop --set bind-with-dn-requires-password:true
- 返回有關綁定失敗debug信息
默認值: false
./bin/dsconfig set-global-configuration-prop --set return-bind-error-messages:false
配置權限和訪問控制
訪問控制指令 (ACI)
為了安全 默認是不允許訪問的
匹配規則
- 匹配順序:目錄結構 從下往上;匹配過程中,匹配到拒絕策略后,立即拒絕
- 若無拒絕策略,則匹配允許策略
- 若拒絕和允許都沒匹配中,則默認拒絕
語法主要由四部分組成
targets(version 3.0;acl "name";permissions subjects;)
變量 | 解釋 |
targets | 指明 條目(target = "ldap:///*=*,*,dc=example,dc=com")、屬性(targetattr != "attr-list")、 控制和擴展操作(extop != "OID")。用 ()括起來,多個targets之前使用AND連接 |
name | 描述作用 |
permissions | allow(action[, action …]) 權限: |
subjects | 客戶端訪問限制條件,指定連接的人員、連接時間、連接地點和連接方式 |
#允許對除密碼之外的所有屬性進行匿名讀取訪問
dn: dc=example,dc=com
objectClass: domain
objectClass: top
dc: example
aci: (target ="ldap:///dc=example,dc=com")(targetattr !="userPassword")(version 3.0;acl "Anonymous read-search access";allow (read, search, compare)(userdn = "ldap:///anyone");)
aci: (target="ldap:///dc=example,dc=com") (targetattr ="*")(version 3.0; acl "allow all Admin group"; allow(all) groupdn ="ldap:///cn=Directory Administrators,ou=Groups,dc=example,dc=com";)
權限管理
獨立于acl
#部分權限
* #所有權限,默認為root權限
backend-backup*
backend-restore*
bypass-acl* #忽略ACL配置
bypass-lockdown* #忽略操作鎖
cancel-request* #取消任何客戶請求
changelog-read* #查看changelog(在cn=changelog)
config-read*
config-write*
data-sync #同步數據
ldif-export*
ldif-import*
modify-acl*
password-reset* #重置其他用戶的密碼
privilege-change* #更改分配給用戶的權限
subentry-write* 執行 LDAP 子條目寫入操作
如何配置
#權限使用ds-privilege-name 屬性指定
cat privilege.ldif
dn: uid=kvaughan,ou=People,dc=example,dc=com
changetype: modify
add: ds-privilege-name
ds-privilege-name: config-read
ds-privilege-name: password-reset#生效
./bin/ldapmodify --bindDN "cn=Directory Manager" --filename privilege.ldif
----------------------------------------------------------------------------
#使用組屬性cat collective.ldif
dn: cn=Administrator Privileges,dc=example,dc=com
objectClass: collectiveAttributeSubentry
objectClass: extensibleObject
objectClass: subentry
objectClass: top
cn: Administrator Privileges
ds-privilege-name;collective: config-read
ds-privilege-name;collective: config-write
ds-privilege-name;collective: ldif-export
ds-privilege-name;collective: modify-acl
ds-privilege-name;collective: password-reset
ds-privilege-name;collective: proxied-auth
subtreeSpecification: {base "ou=people", specificationFilter"(isMemberOf=cn=Directory Administrators,ou=Groups,dc=example,dc=com)" }#生效
./bin/ldapmodify --bindDN "cn=Directory Manager" --filename collective.ldif
Replication -同步
是基于時間來定義最新數據,更新頻率較高的話可以定期清理歷史信息,清理頻率不要過高
同步復制是基于DN指定,不同的DN可以同步不同的節點,另外系統管理的cn=schema和cn=admin data 也會被復制
同步的優先級:越"近"的越優先,權重越高的越優先
onlyReplicationServer 僅用來復制的服務器得大集群了吧···
#新服務器作為host2 來配置
./bin/dsreplication \enable \--baseDN dc=example,dc=com \--host1 opendj.example.com \--port1 4444 \--bindDN1 "cn=Directory Manager" \--replicationPort1 8989 \--host2 opendj2.example.com \--port2 4444 \--bindDN2 "cn=Directory Manager" \--replicationPort2 8989 \--trustAll #新的服務器最好先執行dsreplication initialize-all 然后在創建同步#禁止同步
dsconfig set-synchronization-provider-prop --port 4444 --hostname opendj2.example.com --bindDN "cn=Directory Manager" --bindPassword password --provider-name "Multimaster Synchronization" --set enabled:false --trustAll停止同步
sreplication disable --disableAll --hostname opendj2.example.com
備份與恢復
如果是單節點的話 很有需要做異機備份
關于配置的的配置在config/archived-configs/ 每次修改配置程序會自動備份
可以加密備份數據
在線備份
./bin/backup --port 4444 --bindDN "cn=Directory Manager" --backendID userRoot --backupDirectory /usr/local/src/userRoot/ --start 0
./bin/backup --port 4444 --bindDN "cn=Directory Manager" --backUpAll --backupDirectory /usr/local/src/userRoot/ --start 0 #備份所有數據#定時備份
./bin/backup --port 4444 --bindDN "cn=Directory Manager" --backUpAll --backupDirectory /usr/local/src/userRoot/ --recurringTask "00 02 * * *"#增量備份
./bin/backup --port 4444 --bindDN "cn=Directory Manager" --backendID userRoot --backupDirectory /usr/local/src/userRoot/ --incremental --recurringTask "00 02 * * *" 離線備份
./bin/backup --backendID userRoot --backupDirectory /usr/local/src/userRoot/ 離線恢復
./bin/restore --backupDirectory /export/rpm/OpenDJ-3.0.0/userRoot/ --listBackups #查看--backupID
./bin/restore --backupDirectory /export/rpm/OpenDJ-3.0.0/userRoot/ --backupID 20240620075220Z
監控、日志記錄和警報
公開監控信息存在在cn=monitor
中
使用 Elasticsearch 審計日志處理程序
問題處理:
Unable to connect to the server at "xxxx" on port 4444
[root@tserver121 opendj]# ./bin/dsconfig list-backend-indexes --trustAll --no-prompt
Unable to connect to the server at "xxxx" on port 4444
-------------------------------------------------------------------
Administration Connector: Port 4444 (LDAPS) 為LDAPS需要配置ssl證書
而且--no-prompt使用的是非交互模式 所以會執行失敗
exception is javax.net.ssl.SSLHandshakeException:
[root@tserver121 opendj]# ./bin/status
>>>> Specify OpenDJ LDAP connection parameters
Administrator user bind DN [cn=Directory Manager]:
Password for user 'cn=Directory Manager': Error reading configuration. Details:
javax.naming.CommunicationException: simple bind failed: 0.0.0.0:4444 [Root
exception is javax.net.ssl.SSLHandshakeException:
java.security.cert.CertificateException: No subject alternative names present]
-------------------------------------------------------------------
Administration Connector: Port 4444 (LDAPS) 為LDAPS需要配置ssl證書簡單的辦法是:在交互命令中 接--trustAll參數,或者在交互命令中選擇 3) Yes, also add it to a truststore
backend-userRoot.lock was not granted
[root@tserver121 opendj]# ./bin/backendstat llist-backends --backendID userRoot
userRoot: The exclusive lock requested for file
/export/app/opendj/locks/backend-userRoot.lock was not granted, which
indicates that another process already holds a shared or exclusive lock on
that file. This generally means that some other process has exclusive access
-------------------------------------------------------------------
# 文件被程序占用,關閉程序可以執行
[root@tserver121 opendj]# fuser -uv locks/*USER PID ACCESS COMMAND
/export/app/opendj/locks/backend-adminRoot.lock:root 53283 f.... (root)java可能是因為不能查看userRoot 的backend 的狀態,但是在導入導出、備份等可以使用
可以使用 ./bin/dsconfig list-backends --trustAll 查看
參閱:
OpenDJ:Home · OpenIdentityPlatform/OpenDJ Wiki · GitHub
web管理端phpLDAPadmin:PLA - 🥇 The BEST ldap admin tool!
web管理端web2ldap:web2ldap - How to improve usability
ldap 工具https://ldap.com/ldap-tools/