我在运行CentOS 7的两台虚拟机上尝试使用Kerberos。一台虚拟机作为服务器,另一台虚拟机作为用户应该login的客户端主机。
我的完整设置如下所示。 当我创build一个新用户来testing我的设置,这个用户可以SSH(或直接login)到客户端主机,他会自动获得一个Kerberos TGT( klist )。 但是,如果我运行passwd来更改密码,我得到一个错误。
在日志中(通过journalctl ),在对密码更改(使用旧密码)进行身份validation时,会看到以下消息:
unix_chkpwd[8790]: password check failed for user (demouser) passwd[8788]: pam_unix(passwd:chauthtok): authentication failure; logname= uid=1001 euid=0 tty=pts/2 ruser= rhost= user=demouser
然后我input新的密码两次,并在日志中获得这些额外的消息:
unix_chkpwd[8792]: password check failed for user (demouser) passwd[8788]: pam_unix(passwd:chauthtok): user password changed by another process passwd[8788]: pam_krb5[8788]: password change failed for [email protected]: Cannot contact any KDC for requested realm passwd[8788]: PAM 1 more authentication failure; logname= uid=1001 euid=0 tty=pts/2 ruser= rhost= user=demouser
然后在控制台上,我得到这个消息:
passwd: Authentication token manipulation error
任何想法为什么login工作,但密码更改不? 我该如何解决这个问题?
服务器configuration(VM1)
# collect input DOMAIN=$(hostname -d) REALM=$(echo "$DOMAIN" | tr '[:lower:]' '[:upper:]') read -s -p "Kerberos DB Master Password: " KRB_DBMASTER_PW && echo read -s -p "Kerberos root/admin Password: " KRB_ROOT_PW && echo # setup ntp yum -y install ntp systemctl start ntpd systemctl enable ntpd # install kerberos yum -y install krb5-server krb5-workstation # replace realm and domain in krb5.conf sed -i 's|^\(# Confi\)|#\1|' /etc/krb5.conf sed -i 's|^#||' /etc/krb5.conf sed -i "s|EXAMPLE\.COM|$REALM|" /etc/krb5.conf sed -i "s|kerberos\.example\.com|$(hostname -f)|" /etc/krb5.conf sed -i "s|example\.com|$DOMAIN|" /etc/krb5.conf # replace realm in kdc.conf and kadm5.acl sed -i "s|EXAMPLE\.COM|$REALM|" /var/kerberos/krb5kdc/kdc.conf sed -i "s|EXAMPLE\.COM|$REALM|" /var/kerberos/krb5kdc/kadm5.acl # initialize kerberos db echo -e "${KRB_DBMASTER_PW}\n${KRB_DBMASTER_PW}" | kdb5_util create -s -r $REALM # start kerberos services systemctl enable kadmin systemctl enable krb5kdc systemctl start kadmin systemctl start krb5kdc firewall-cmd --permanent --add-service kerberos firewall-cmd --reload # add root/admin principal cat <<-EOF | kadmin.local addprinc root/admin $KRB_ROOT_PW $KRB_ROOT_PW quit EOF
客户端configuration(VM2)
# collect input DOMAIN=$(hostname -d) REALM=$(echo "$DOMAIN" | tr '[:lower:]' '[:upper:]') read -p "Server hostname: " SERVER_HOSTNAME read -s -p "Kerberos root/admin Password: " KRB_ROOT_PW && echo # setup ntp yum -y install ntp systemctl start ntpd systemctl enable ntpd # setup kerberos yum -y install krb5-workstation pam_krb5 # create host principal for this client on the kerberos server cat <<-EOF | ssh -t $SERVER_HOSTNAME "sudo kadmin.local ; sudo chown $USER /tmp/$(hostname -s).keytab" addprinc -randkey host/$(hostname -f) ktadd -k /tmp/$(hostname -s).keytab host/$(hostname -f) quit EOF scp $SERVER_HOSTNAME:\{/tmp/$(hostname -s).keytab,/etc/krb5.conf\} /tmp # replace krb5.conf cp /tmp/krb5.conf /etc # import host key on client cat <<-EOF | ktutil rkt /tmp/$(hostname -s).keytab wkt /etc/krb5.keytab quit EOF # configure pam authconfig --enablekrb5 --update
与新用户一起testing
在服务器上创build用户主体(VM1)
kadmin addprinc demouser quit
在客户端创build本地用户(VM2)
useradd -m -s /bin/bash demouser
login并更改密码(从工作站)
ssh demouser@krbclient passwd
我发现解决scheme:服务器安装程序中缺less以下命令:
firewall-cmd --permanent --add-service kpasswd
(紧接在firewall-cmd --reload )