如何在 Linux 中使用系统帐户运行命令/程序

如何在 Linux 中使用系统帐户运行命令/程序

我的目标是运行 LDAP 搜索并获取 gMSA 帐户的密码。

  • 我有一个 Ubuntu 虚拟机,它是Dev_Linux.
  • 我的用户帐户是sja.
  • 我想使用该Dev_Linux帐户运行 LDAP 搜索。我将此帐户称为系统帐户或计算机帐户。

当我的帐户sja被添加为允许的主体后,我就可以检索密码。我的预期设置是将计算机帐户添加到允许主体中的主机组中。因此,如果我能够使用计算机帐户运行 ldap 搜索,我应该能够检索密码。

我运行了kinitklist -k它显示机器帐户有权限。

但我陷入了如何以机器帐户运行 LDAP 搜索的困境,在本例中为 asDev_Linux但不是 as sjaor root

答案1

机器账户本质上是一个 Kerberos/AD 帐户。与 Windows 不同,Linux 没有针对计算机帐户的内置操作系统概念。

但一个机器账户本质上是一组可供本地系统上的每个用户使用的网络身份验证凭据。

免责声明:以下内容基于我的旧笔记。我目前没有可用于测试的工作 Kerberos 环境。

您可以(如有必要,与 Kerberos/AD 管理员一起)为计算机帐户创建 Kerberos keytab 文件:

ktutil -v -k /some/where/Dev_Linux.keytab add -p Dev_Linux@SOME_REALM

然后将密钥表放置到本地系统上所有用户都可以访问的位置。

(如果你的 Kerberos 服务实际上是 Active Directory,并且你的系统使用 AD 集成身份验证,那么你的系统可能已经有一些东西可以在本地系统上为机器帐户维护这样的 keytab,并定期更新机器帐户密码和 keytab 文件如果有必要满足 AD 安全要求,则可能只需找到 keytab 文件并为用户安排适当的权限来读取它。此类 keytab 文件的位置可能会有所不同,具体取决于 AD 集成的实现方式。 .)

要使用计算机身份验证进行身份验证,您需要设置自定义凭据缓存名称(以避免干扰您的个人 Kerberos 帐户),并使用密钥表使用计算机帐户进行身份验证。

例如:

kinit -c /tmp/krb5cc_machine --keytab=/some/where/Dev_Linux.keytab Dev_Linux@SOME_REALM

由于计算机帐户密码在密钥表中加密,因此可以非交互方式执行此命令。您可以在登录会话开始时运行此命令,或者以适当的时间间隔运行此命令以更新缓存的身份验证票证,因为它们最终会过期。

要使用缓存的计算机帐户凭据,请将KRB5CCNAME环境变量设置为指向kinit使用计算机帐户密钥表编辑的凭据缓存,并在希望以个人帐户身份进行身份验证时取消设置(或将其恢复为现有值)。

因此,在完成这些准备工作后,要ldapsearch使用机器帐户运行:

KRB5CCNAME=/tmp/krb5cc_machine ldapsearch -U Dev_Linux <necessary options and parameters...>

您可能需要包含一个选项来ldapsearch指定您要使用的Dev_Linux用户名而不是当前的本地用户名。我相信必要的选择是-U Dev_Linux

甚至可能只需将环境变量设置KRB5_CLIENT_KTNAME为指向计算机帐户 keytab 文件,并将计算机帐户用户名提供给 LDAP 搜索工具即可。如果 LDAP 搜索工具中的 Kerberos 支持足够智能,它可能会自动获取必要的身份验证票证...但您可能仍然需要设置一个不冲突的 KRB5CCNAME,以免将您的个人帐户身份验证票证与计算机帐户身份验证票证混合,以便您可以控制是否使用计算机帐户或个人帐户来执行特定任务。

因此,在您验证使用计算机帐户的 LDAP 搜索在显式kinit使用 keytab 文件后可以正常工作后,您可以尝试不使用以下命令kinit

kdestroy -c /tmp/krb5cc_machine 
KRB5_CLIENT_KTNAME=FILE:/some/where/Dev_Linux.keytab KRB5CCNAME=/tmp/krb5cc_machine ldapsearch -U Dev_Linux <options and parameters...>

如果成功,那么使用计算机帐户所需的唯一事情就是访问密钥表文件和两个环境变量分配(KRB5_CLIENT_KTNAMEKRB5CCNAME)以及为计算机帐户使用正确用户名的选项。

相关内容