Eu sou muito novo, mas estou tentando usar o Kerberos para autenticar minha conta de serviço de diretório ativo da minha própria caixa do CentOS 7, após o qual eu então procuro executar consultas em um banco de dados remoto usando sqlcmd.
Para dar mais contexto, um trecho do meu código Python em funcionamento está abaixo:
import subprocess
kinit = ['kinit', '[email protected]', '-k', '-t', '/usr/local/var/krb5kdc/serviceaccount.keytab']
kinit_cl = subprocess.Popen(kinit, stdout=subprocess.PIPE)
kinit_output = kinit_cl.stdout.read()
klist = ['klist','-l']
klist_cl = subprocess.Popen(klist, stdout=subprocess.PIPE)
klist_output = klist_cl.stdout.read()
print klist_output
if 'KEYRING:persistent' in klist_output:
print "Service Account Authenticated"
#proceed to run sqlcmd queries
Minha pergunta se relaciona mais com o gerenciamento do keytab onde minha credencial está armazenada, o que é ótimo porque minha senha não é armazenada em branco. A senha expira a cada 30 dias e notei que, se eu usar kpasswd para alterar minha senha na linha de comando, ela solicitará minha senha antiga. Isso significaria que eu teria que armazená-lo em algum lugar e passá-lo, enquanto estou feliz em não saber minha senha e deixar um script gerenciar isso para mim.
Para gerar uma nova senha strong no Python não será um problema, minha pergunta é qual comando posso usar para alterar uma senha sem ser solicitada a senha antiga. Um comando de kadmin.local diz que a senha foi alterada, mas a senha aceita ainda é a senha antiga. kadmin me dá o erro abaixo, embora eu tenha adicionado a conta de serviço como administrador ao arquivo local:
[root@osboxes krb5kdc]# kadmin.local -q "addprinc serviceaccount/admin"
Authenticating as principal serviceaccount/[email protected] with password.
WARNING: no policy specified for serviceaccount/[email protected];
defaulting to no policy
Enter password for principal "serviceaccount/[email protected]":
Re-enter password for principal "serviceaccount/[email protected]":
Principal "serviceaccount/[email protected]" created.
[root@osboxes krb5kdc]# kinit serviceaccount/admin
kinit: Client 'serviceaccount/[email protected]' not found in Kerberos database while getting initial credentials
[root@osboxes krb5kdc]# kadmin serviceaccount
kadmin: Client 'serviceaccount/[email protected]' not found in Kerberos database while initializing kadmin interface
Eu preciso fazer isso apenas através do kadmin ? Ou então como eu escreveria isso?