我正在尝试设置 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: [email protected]
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:[email protected] svc_mongodb
- 使用以下命令创建了 keytab 文件
ktpass
:
ktpass /out mongodb-svr.keytab /princ mongodb/mongodb-svr.mydomain.com:[email protected] /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
)。
如果有人能指出我的错误,那将有很大帮助。
谢谢!