首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用凭据将服务设置为LDAP中的帐户。

问使用凭据将服务设置为LDAP中的帐户。
EN

Unix & Linux用户
提问于 2023-02-28 10:25:06
回答 1查看 85关注 0票数 3

我觉得我好像忽略了一些显而易见的东西。

我的目标是在系统启动时使用LDAP服务帐户运行systemd服务。这样,如果我禁用LDAP中的帐户,那么下次服务尝试启动时,它就会失败,因为用户没有得到授权。(最终,我需要为服务安装Kerberos,以便使用票务,但我还没有,这可能是我的总体问题)

我有一个功能良好的LDAP,可以用来控制用户登录,所以我的用户是cn=cbrand,ou=people,dc=jcolebrand,dc=info,我可以在网络中的连接机器上与这个用户一起登录。我已经通过LDAP设置了sudoers,所以我自己和我系统上的另一个用户可以登录并运行sudo命令,但是其他具有登录权限的用户不能运行sudo命令。我有其他用户可以使用LDAP对我服务器上的各种应用程序进行身份验证(因此他们没有系统登录权限,但他们确实有带有密码的基本帐户)。

我有ldap2pg设置来处理我的系统上的读取器/作者/超级用户,我想用它来限制对连接到LDAP实例的网络上运行的服务的访问。

我希望能够在LDAP中为某些服务X定义一个帐户(作为一个真实的例子,我将安装gogs,或者我可能也会将我的jellyfin迁移到类似的帐户下运行),然后使用该服务帐户来运行该服务(因此我希望类似于cn=gogs,ou=services,dc=jcolebrand,dc=info或cn=jellyfin,ou=services,dc=jcolebrand,dc=info)。我想避免的是必须手工创建一个本地用户/组才能运行,因为这必须由每个服务器来管理。相反,我希望能够使用ldap2pg撤销数据库访问,或者使用LDAP在目录级别拒绝登录/访问权限。

如果我要创建一个本地帐户,我会修改我的服务目标以使用User=指令,但这对于连接到LDAP似乎是不正确的,特别是如果我想强制使用一个密码(这可能需要一些自动操作来为服务帐户旋转密码,我想这是另一回事,但也许不是!)我知道我对这件事不太了解,如果我忽略了一些“显而易见”的东西。)

作为一个部分配置片段,如果这有帮助,我有:

代码语言:javascript
复制
cat /etc/openldap/ldap.conf
<snip>
BASE dc=jcolebrand,dc=info
<snip>

如果这是一个域,我将使用gMSA帐户,这将是无缝的,或者我甚至可以使用密码在目录中创建一个通用服务帐户,但是我不知道如何在Fedora/Linux中这样做。具体来说,我不知道如何从Windows世界中复制的步骤是:

Windows -> Open services.msc ->查找服务-> Goto Properties ->,酌情将安全选项卡上的用户凭据设置为gMSA或帐户/密码。

看一下systemd文档,我看到了LoadCredential文档,但这似乎没有意义(通过编写文档的方式)来提供作为LDAP帐户运行的密码。

我是不是想过了,应该有一个无密码的objectClass applicationProcess LDAP条目,并为User="cn=gogs,ou=services,dc=jcolebrand,dc=info"设置服务配置,然后停止进行额外的思考?

Nota bene:最终,我也希望这个服务能够使用相同的信息与postgres对话,但这可能只需要一个适当的连接字符串,我可以使用这个环境文件来进行systemd服务配置。这方面的指针也是受欢迎的。

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2023-03-01 20:35:15

我将创建一个linux系统用户(LDAP中的objectClass: posixAccount ),并简单地将systemd单元文件设置为有User=< uid value from the LDAP record。

如果PAM配置正确,这将填充一个uid和linux用户名,系统d将能够在该用户名下生成可执行进程。无论如何,您需要一个在缅因州ch.linux上具有linux的服务用户来跟踪进程,所以我认为您无法避免使用objectClass: posixAccount

LDAP记录可能如下所示:

代码语言:javascript
复制
dn: cn=gogs,ou=services,dc=jcolebrand,dc=info
objectClass: posixAccount
uid: gogs
cn: gogs
loginShell: /bin/nologin
uidNumber: 9999
gidNumber: 9999
homeDirectory: /path/to/gogs/install
description: gogs service user

我相信,如果你愿意的话,你也可以在这个条目中添加objectClass applicationProcess。

然后,您可以直接编辑gogs systemd单元,也可以创建覆盖(例如使用sudo systemctl edit gogs.service)并添加:

代码语言:javascript
复制
[Service]
User=gogs

( gogs也可能需要一个objectClass: posixGroup条目,然后可以在systemd单元中使用Group=gogs )

我对你问题的这些部分感到困惑:

只会修改我的服务目标以使用User=指令,但对于连接到LDAP似乎不正确,特别是如果我想强制使用密码的话。

和

查看systemd文档,我看到了LoadCredential文档,但是提供作为LDAP帐户运行的密码似乎没有意义。

在Linux下,在我的经验中,服务帐户通常没有密码。它们只是一个单独的用户,用于该服务的进程以相同的方式运行。数据库身份验证可以使用密码字符串(可以使用LDAP分发)或通过Kerberos (可能吗?我不知道服务如何获得票证),但是服务POSIX帐户没有密码--因为没有人登录到它。

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/737196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档