登录脚本使用机器密码为kinit在登录时获取票证

kid*_*ose 1 linux kerberos ssh-keys .bash-profile

我同步了我的密码/密码用于登录我的机器,解锁我的ssh密钥文件(~/.ssh/id_rsa,参见man ssh-keygen)和kerberos.当我登录时,我输入一次密码来访问我的本地计算机帐户,作为奖励我的ssh密钥文件也被解锁.

我还想自动化我的kerberos身份验证,它也使用相同的密码.基本上,我想要一种安全的方法来实现将它放在我的'〜/ .bash_profile`中的相同效果:

# PASSWORD SHOULD NEVER BE HARDCODED - FOR EXPLANATION PURPOSE ONLY
PASSWORD="qwerty" # NEVER DO THIS!!!
echo "$PASSWORD" | kinit -u $KRBUSR
Run Code Online (Sandbox Code Playgroud)

有什么建议?关于如何解锁密钥文件的见解?

Sam*_*ter 8

你的问题可以被标记为那个问题的副本,但是为了消除任何剩余的混淆,让我们从一个明确的陈述开始:在一个脚本中模拟交互式密码是纯粹的恶意.

此外,还有一种自动创建Kerberos票证的正确方法 - 例如,它可用于在引导时对Linux服务进行身份验证.

  • 步骤0:运行klist -e以列出与KDC相关的加密算法 - 例如"aes256-cts-hmac-sha1-96"和"arcfour-hmac"
    注意:遗留的Arc4在许多方面仍然是合法的企业Active Directory目录,哎呀
  • 步骤1:为您的主体创建一个keytab文件,例如ktutil(此处为教程),每个加密算法添加一个条目
  • 第2步:创建密钥表文件后立即限制对文件的访问chmod,否则任何人都可以使用该文件"窃取您的Kerberos身份"
  • 第3步:使用kinit -kt <path/to/keytab_file> <principal@REALM>验证而不输入密码
  • 步骤4:您可以kinit -R定期运行以请求续订(续订不需要密码) - 前提是您有可更新的机票,尚未过期,并且您未达到最大可更新限制(请参阅下面)


附注:由所使用的加密交易算法kinit匹配什么是在您的本地配置/etc/krb5.confpermitted_enctypes,并default_tkt_enctypesdefault_tgs_enctypes-提供的Kerberos服务器(KDC)接受这些算法.

附注:创建的票证kinit的生命周期配置/etc/krb5.conf不足ticket_lifetime- 前提是它不超过KDC限制(通常为10h).
可更新的生命周期不足renew_lifetime(零寿命意味着机票将被标记为不可更新)


顺便说一下,如果您的Linux机箱使用Active Directory支持的SSSD身份验证,您可以使用以下属性激活Kerberos票证的自动创建和续订:

ldap_krb5_init_creds = True
krb5_ccname_template = FILE:/tmp/krb5cc_%U
krb5_lifetime           =  86400
krb5_renewable_lifetime = 604800
krb5_renew_interval     =   7200
Run Code Online (Sandbox Code Playgroud)