Kinit com o systemd no modo de usuário

0

Eu criei um arquivo keytab no diretório home do usuário $HOME/client.keytab . O arquivo de cache de autenticação está em seu local padrão /tmp/krb5cc_%U (onde% U é o UID). Agora, eu tenho esse arquivo simples systemd unit para iniciar o serviço e obter as chaves de autenticação:

[Unit]
Description=Initializes, caches and renews Kerberos tickets for user
After=default.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStartPre=/usr/bin/kdestroy -q -c /tmp/krb5cc_%U
ExecStart=/usr/bin/kinit -V -l 30d -r 365d -k -t %h/client.keytab -c /tmp/krb5cc_%U %[email protected]
ExecStartPost=/usr/bin/krenew -b -K 60 -k /tmp/krb5cc_%U
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=KerberosTicketing

[Install]
WantedBy=default.target

Isso funciona perfeitamente e cria e armazena os tíquetes de autenticação Kerberos se After apontar para default.target . No entanto, por que default.target ? Isso é bem tarde no processo de inicialização. Eu preferiria que funcionasse em multi-user.target , para que eu pudesse usar os tickets gerados para montar sistemas de arquivos remotos a partir de servidores que não aceitam autenticação pública / privada.

EDITAR : Se o After for qualquer coisa menos default.target ou posterior, kinit falhará com o erro kinit: Cannot find KDC for realm "EXAMPLE.COM" while getting initial credentials .

Estou basicamente tentando realizar isso: automontagem do SSHFS por meio do FSTAB usando o Kerberos (GSSAPI) .

    
por Kartik 03.09.2018 / 06:33

1 resposta

1

Para unidades systemd --user , é aí que o tempo começa. O gerenciador de usuários inteiro é iniciado tardiamente no processo de inicialização - é um serviço do sistema (usuário @ .service) que é iniciado pelo systemd-logind, que sempre inicia durante a inicialização tardia.

Para solicitar o serviço em relação a unidades anteriores (como remote-fs.target), você precisa convertê-lo em um serviço sistema . Em seguida, suas unidades .mount (ou suas entradas fstab) também poderão especificar dependências em seu serviço.

Note que WantedBy = não define quando sua unidade será enfileirada (de uma forma que faz o oposto). Em vez disso, isso é definido pelas opções (implícita e explícita) Before = / After =. É perfeitamente possível e comum ter uma unidade com "WantedBy = multi-user.target", mas também "DefaultDependencies = no" e "Before = remote-fs.target".

Como nota lateral, não executa daemons como krenew -K via ExecStartPost =. O único lugar que 'oficialmente' permite processos de longa duração (e fornece recursos como Restart =) é o ExecStart principal =, então se você quiser uma renovação periódica, coloque seu krenew -K lá.

Você pode executar o kinit como um segundo ExecStartPre =, ou usar k5start -K , o que evitará a necessidade de kinit manualmente.

ExecStart=/usr/bin/k5start -L -b -K 30 -f %h/client.keytab -k /tmp/krb5cc_%U -u %[email protected]
    
por 03.09.2018 / 07:50