Mongodb

MongoDB 4.4 企業版和 Kerberos 身份驗證

  • June 29, 2021

我正在嘗試設置 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"

設置

我有什麼設置:

  1. 我正在使用 Active Directory (Windows Server 2019) 和 Centos 8。
  2. 我已經配置了 LDAP,因此它接受 TLS/SSL(還測試了使用另一台 Windows 機器上的 LDAPAdmin.exe 工具一切正常)。
  3. 執行kinitklist來自 MongoDB 機器沒有問題。
  4. 在此之前,我已經成功地將 LDAP 身份驗證與 MongoDB 集成(使用simple綁定選項)。
  5. userToDNMapping作為使用 LDAP 集成的域使用者之一(通過配置andauthz.queryTemplate參數),我對 MongoDB 實例進行身份驗證沒有問題。
  6. 自定義 MongoDB 埠:tcp/29000
  7. 自定義 MongoDB 數據路徑:/data/mongodb
  8. CentOS 8 機器已經加入域(使用realm join)。

到目前為止的配置

現在,我嘗試執行以下操作以使 Kerberos 正常工作:

  1. svc_mongodb在 AD 上創建了一個託管服務帳戶 ( )。
  2. 創建SPN如下:
setspn -S mongodb/mongodb-svr.mydomain.com:29000@MYDOMAIN.COM svc_mongodb
  1. 使用以下命令創建了 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
  1. 將 keytab 放在/data/mongodb/mongodb-svr.keytab(在 CentOS 機器上)。也chownchmod它給mongod使用者和400
  2. 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 文件。

我試過的

  1. 我試圖通過在我的 Centos 8 上進行編輯來遵循https://docs.mongodb.com/manual/tutorial/control-access-to-mongodb-with-kerberos-authentication/#std-label-setting-krb5_ktname 。/etc/sysconfig/mongod
  2. 我嘗試編輯systemctl服務文件 ( /usr/lib/systemd/system/mongod.service) 以添加以下行:(之後執行systemctl daemon-reload)。
ExecStartPre=/usr/bin/env KRB5_KTNAME=/data/mongodb/mongodb-svr.keytab
  1. .profile在 mongod 的主目錄下創建一個並在KRB5_KTNAME那裡導出變數。
  2. 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並啟動您的 mongod

mongod -f /etc/mongod.conf

命令行選項似乎優先,因此會--setParameter authenticationMechanisms=GSSAPI覆蓋文件authenticationMechanisms: "GSSAPI,SCRAM-SHA-256,MONGODB-X509"中的您/etc/mongod.conf

引用自:https://dba.stackexchange.com/questions/294878