Estou tentando fazer com que o Kerberos PAM puxe um ticket e não o destrua após um login do RStudio no CentOS 7.
Meu rstudio
arquivo em /etc/pam.d/
se parece com:
#%PAM-1.0
auth required pam_krb5.so retain_after_close debug
session requisite pam_krb5.so retain_after_close debug
account required pam_krb5.so debug
Sei que o RStudio está se comunicando bem com o PAM Stack porque, se eu excluir a primeira linha, o RStudio não fará o login. Eu também faço outras manipulações que me permitem saber que os dois estão sincronizados.
De acordo com a documentação do RStudio, se eu executar o comando: pamtester --verbose rstudio <user> authenticate setcred open_session
Depois de inserir minha senha, um ticket é criado em /tmp
chamado krb5cc_(uid)
, o que eu esperaria. Posso fazer com que a linha pamtester acima falhe ao retirar um ticket removendo o setcred
sinalizador que me diz que este é o componente chave.
Uma olhada na documentação do Keberos PAM diz que session
executa o mesmo, auth
mas é executado com o sinalizador de comando pam_setcred(PAM_ESTABLISH_CRED)
, que é o que eu quero. A mesma documentação diz que, se eu adicionar retain_after_close
, o ticket deve ser retido. No entanto, isso não está acontecendo e nem tenho certeza de que está realmente puxando o bilhete.
Qualquer ajuda é apreciada, tentei quase todas as combinações possíveis de sinalizadores e parâmetros no arquivo PAM, mas sem sucesso. Kerberos é um pesadelo. LMK o que mais posso acrescentar para ajudar. Infelizmente, os arquivos de log não são úteis, pois não registram um erro devido ao fato de que o PAM "falha silenciosamente" se uma linha não for compreendida.
O pam_krb5 do CentOS não suporta reter_after_close.
Eu tinha quase palavra por palavra exatamente o mesmo problema. O resultado foi que o
rstudio-server
usuário que está executando o servidor da Web não tem acesso de gravação a arquivos/etc
.Quando o ticket é criado, o usuário está tentando gravar nesse diretório e não consegue.
O testador funciona bem, pois está sendo executado com permissões elevadas.
Pessoal, acabei de perceber que havia descoberto isso, mas nunca postei uma resposta. Resumindo, o que eu tinha que fazer era baixar o código MIT Kerberos (escrito em C++ também conhecido como Black Magic) e encontrar a parte do código que escreveu o tíquete kerberos para o diretório /tmp e alterar o código para que não adicionou os 6 caracteres aleatórios ao final do tíquete Kerberos e comentou qualquer seção que tratasse da exclusão ou destruição do tíquete.
Eu tive que compilar em uma biblioteca compartilhada (o arquivo pam_krb5.so) e colocar meu código modificado em meu contêiner docker. Então funcionou. Infelizmente, não trabalho mais nesse projeto e não tenho acesso ao código. Realmente gostaria de ter colocado isso no meu git.
Por outro lado, a versão paga do RStudio oferece suporte a essa multa. Este é um hack que você deve fazer se quiser usar a versão gratuita. Se precisar de ajuda para encontrar a área no código a ser modificada, entre em contato comigo.