MongoDB 4.4 企業版和 Kerberos 身份驗證
我正在嘗試設置 Kerberos 身份驗證以與 MongoDB Enterprise 4.4 一起使用。
我的作業系統是 Centos 8。我已經按照https://docs.mongodb.com/manual/tutorial/install-mongodb-enterprise-on-red-hat/
中的描述配置了 SELinux 。
總結
總之,如果我按照 MongoDB 文件( https://docs.mongodb.com/manual/tutorial/control-access-to-mongodb-with-kerberos-authentication/)
mongod
顯示的範例,啟動服務沒有問題:env KRB5_KTNAME=/data/mongodb/mongodb-svr.keytab \ mongod --tls --port 29000 --dbpath /data/mongodb --setParameter authenticationMechanisms=GSSAPI
(我的實例已啟動 TLS 並使用自定義埠執行)
但是一旦嘗試使用 啟動服務
systemctl
,它就是不想執行。目標
我想要實現的是成功用於
systemctl
停止/啟動mongod
服務。本質上,我
/etc/mongod.conf
的如下:security: authorization: enabled ldap: servers: myldap.mydomain.com:636 bind: queryUser: LDAPQuery@mydomain.com queryPassword: somepassword transportSecurity: tls setParameter: authenticationMechanisms: "PLAIN,SCRAM-SHA-256,MONGODB-X509"
設置
我有什麼設置:
- 我正在使用 Active Directory (Windows Server 2019) 和 Centos 8。
- 我已經配置了 LDAP,因此它接受 TLS/SSL(還測試了使用另一台 Windows 機器上的 LDAPAdmin.exe 工具一切正常)。
- 執行
kinit
或klist
來自 MongoDB 機器沒有問題。- 在此之前,我已經成功地將 LDAP 身份驗證與 MongoDB 集成(使用
simple
綁定選項)。userToDNMapping
作為使用 LDAP 集成的域使用者之一(通過配置andauthz.queryTemplate
參數),我對 MongoDB 實例進行身份驗證沒有問題。- 自定義 MongoDB 埠:
tcp/29000
- 自定義 MongoDB 數據路徑:
/data/mongodb
- CentOS 8 機器已經加入域(使用
realm join
)。到目前為止的配置
現在,我嘗試執行以下操作以使 Kerberos 正常工作:
svc_mongodb
在 AD 上創建了一個託管服務帳戶 ( )。- 創建SPN如下:
setspn -S mongodb/mongodb-svr.mydomain.com:29000@MYDOMAIN.COM svc_mongodb
- 使用以下命令創建了 keytab 文件
ktpass
:ktpass /out mongodb-svr.keytab /princ mongodb/mongodb-svr.mydomain.com:29000@MYDOMAIN.COM /mapuser svc_mongod /crypto AES256-SHA1 /ptype KRB5_NT_PRINCIPAL /pass somepassword
- 將 keytab 放在
/data/mongodb/mongodb-svr.keytab
(在 CentOS 機器上)。也chown
和chmod
它給mongod
使用者和400
。mongod
使用命令行啟動服務(可行):env KRB5_KTNAME=/data/mongodb/mongodb-svr.keytab \ mongod --tls --port 29000 --dbpath /data/mongodb --setParameter authenticationMechanisms=GSSAPI
什麼失敗
了然而,當我改變
/etc/mongod.conf
這個:setParameter: authenticationMechanisms: "GSSAPI,SCRAM-SHA-256,MONGODB-X509"
我收到了這個錯誤:
Unspecified GSS failure. Minor code may provide more information; Minor code 13; Permission denied
查看審計日誌,我注意到了這一點:
type=AVC msg=audit(1624773960.885:206): avc: denied { open } for pid=2771 comm="mongod" path="/etc/krb5.keytab" dev="dm-0" ino=8388741 scontext=system_u:system_r:mongod_t:s0 tcontext=system_u:object_r:krb5_keytab_t:s0 tclass=file permissive=0
好的,這是意料之中的,因為我還沒有配置 SELinux 文件上下文以便
mongod
可以打開它。但如果可能的話我不想這樣做,因為我想改用特定的 keytab 文件。我試過的
- 我試圖通過在我的 Centos 8 上進行編輯來遵循https://docs.mongodb.com/manual/tutorial/control-access-to-mongodb-with-kerberos-authentication/#std-label-setting-krb5_ktname 。
/etc/sysconfig/mongod
- 我嘗試編輯
systemctl
服務文件 (/usr/lib/systemd/system/mongod.service
) 以添加以下行:(之後執行systemctl daemon-reload
)。ExecStartPre=/usr/bin/env KRB5_KTNAME=/data/mongodb/mongodb-svr.keytab
.profile
在 mongod 的主目錄下創建一個並在KRB5_KTNAME
那裡導出變數。krb.sh
在目錄下創建一個/etc/profile.d
並在那裡導出KRB5_KTNAME
變數。到目前為止,以上都沒有奏效。
所以我很困惑為什麼(以及我該如何設置這個變數)。
我真的想避免不得不使用
setfacl -m
該/etc/krb5.keytab
文件,或者必須創建額外的 SELinux 策略(應該可以通過 輕鬆完成audit2allow
)。如果有人能指出我的錯誤,那將有很大幫助。
謝謝!
當你跑
mongod --tls --port 29000 --dbpath /data/mongodb --setParameter authenticationMechanisms=GSSAPI
然後 mongod 不會讀取配置文件
/etc/mongod.conf
。我建議不要混合命令行參數和配置文件。將所有參數放入您的配置文件/etc/mongod.conf
並啟動您的 mongodmongod -f /etc/mongod.conf
命令行選項似乎優先,因此會
--setParameter authenticationMechanisms=GSSAPI
覆蓋文件authenticationMechanisms: "GSSAPI,SCRAM-SHA-256,MONGODB-X509"
中的您/etc/mongod.conf
。