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

时间:2016-08-30 07:35:08

标签: 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

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

2 个答案:

答案 0 :(得分:7)

你的问题可以被标记为that one的副本,但为了消除任何遗留问题,让我们从一个明确的陈述开始:模拟一个交错的密码输入是纯粹的恶意

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

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

<小时/> 附注:kinit使用的加密算法与/etc/krb5.conf以及permitted_enctypesdefault_tkt_enctypes下的本地default_tgs_enctypes中配置的加密算法相匹配 - 前提是Kerberos服务器(KDC)接受这些算法。

附注:kinit创建的故障单的生命周期在/etc/krb5.conf ticket_lifetime下配置 - 只要它不超过KDC限制(通常为10小时)。
可更新的生命周期低于renew_lifetime - 提供等等。(零生命周期意味着票证将被标记为不可更新)

<小时/> 顺便说一句,如果您的Linux机箱使用Active Directory支持的 SSSD身份验证,您可以激活自动创建&amp;使用以下属性更新Kerberos票证

ldap_krb5_init_creds = True
krb5_ccname_template = FILE:/tmp/krb5cc_%U
krb5_lifetime           =  86400
krb5_renewable_lifetime = 604800
krb5_renew_interval     =   7200

答案 1 :(得分:0)

这应该可以用PAM解决:https://unix.stackexchange.com/questions/12021/automatic-kerberos-ticket-initialization-on-login

虽然我没有成功。可能是因为我的用户名在本地机器和kerberos之间不匹配,或者因为我使用了kerberos的heimdal实现。

相关问题