É como fazer com autenticação.
Vou começar com alguns conceitos sobre tickets e tokens e como o sistema de autenticação Kerberos e o AFS os utilizam. No final, a resposta à minha pergunta ficará clara, não posso gravar no arquivo simplesmente porque meu token do AFS foi removido no logout. Dito isso, a solução para o meu problema foi incluir no script matlab algumas linhas que determinam se o token existe ou não, caso contrário. Como isso foi feito exatamente conclui a resposta.
Autenticação
Fornecer um sistema de arquivos distribuído, acessível em qualquer lugar, implica em um sistema de segurança robusto. É por isso que o AFS possui um sistema de autenticação strong, integrado ao sistema de autenticação Kerberos.
A autenticação no AFS é resolvida por meio de um token. Os tokens concedem aos usuários acesso aos dados durante sua vida útil. Em muitos casos, o manuseio de token é perfeito, não exigindo intervenção do usuário. No entanto, o usuário pode, a qualquer momento, listar os tokens emitidos em seu nome usando tokens
username@machine00 ~ $ tokens
Tokens held by the Cache Manager:
User's (AFS ID xxxxx) tokens for [email protected] [Expires Mar 20 05:10]
--End of list--
Os tokens do AFS são obtidos de um ticket do identificador do Kerberos. Da mesma forma que os tokens, os tickets do Kerberos também identificam o usuário. Ao usar o sistema de autenticação Kerberos, o usuário é emitido pelo KDC (Centro de distribuição de chaves) um ticket inicial chamado ticket de concessão de ticket. Esse primeiro ticket identifica exclusivamente o usuário e permite que ele obtenha tickets específicos necessários para outros serviços, como os tokens do AFS. Na verdade, você pode usar diretamente o tíquete Kerberos para que o serviço do AFS tenha o token de identificação do AFS.
Na maioria dos casos, o tíquete de concessão de tíquete do Kerberos é obtido automaticamente durante o login do usuário. Com a mesma coisa acontecendo com o token inicial do AFS. Como os tokens, a manipulação de tickets do Kerberos na maioria dos casos é invisível para o usuário, mas você pode listar os tickets emitidos usando klist
username@machine00 ~ $ klist
Credentials cache: FILE:/tmp/krb5cc_V16088
Principal: [email protected]
Issued Expires Principal
Mar 19 19:10:11 Mar 20 05:10:11 krbtgt/[email protected]
Mar 19 19:10:11 Mar 20 05:10:11 afs/[email protected]
username@machine00 ~ $
o cache de credenciais é o local do arquivo onde os tickets são encontrados. O Principal é o ID do usuário e, basicamente, resulta da combinação de nome de usuário e domínio do território do Kerberos. Observe que a região do Kerberos geralmente é fornecida em maiúsculas e diferencia maiúsculas de minúsculas. Na sequência, temos a lista de bilhetes emitidos, com as datas correspondentes emitidas e expiradas. Nesse caso, o primeiro ticket ( krtbg
) corresponde ao ticket de concessão de ticket no território KERBEROS.REALM.DOMAIN
, enquanto o segundo corresponde ao token AFS na célula afs your.system.domain
(que geralmente tem o mesmo nome do domínio em que pode ser encontrado). Outros tickets do Kerberos podem aparecer na lista caso tenham sido solicitados.
Renovação de token
Quando um token do AFS expira, o acesso à conta do AFS não é mais possível. Os sintomas que tal evento ocorreu variam de sistema operacional para sistema operacional, no entanto, no Unix / Linux, você geralmente recebe uma mensagem de permissão negada ao tentar acessar seus arquivos:
username@machine00 ~ $ ls
ls: .: Permission denied
Quando um token expirar, você precisará renová-lo. Uma maneira fácil de fazer isso é fazer logout e login novamente, pois, na maioria dos casos, a renovação de token ocorre automaticamente no login. Mas acontece que, às vezes, o logout não é uma opção, especialmente se você estiver executando algo que não deseja sair, o que é o caso.
Uma solução alternativa para renovação de ticket está usando kinit
e aklog
, em sequência. O primeiro desses comandos ( kinit
), que exige sua senha, permite a nova autenticação do usuário e a renovação do ticket de concessão de ticket. Em seguida, o comando aklog
permite obter um token do AFS a partir do tíquete do Kerberos. Observe que kinit
tenta obter um ticket para o principal e o domínio padrão. Caso estes não estejam definidos, ou se o usuário estiver usando um nome de usuário diferente no momento da solicitação do ticket, kinit
deve ser usado como kinit <principal>@<realm>
, por exemplo:
username@machine00 ~ $ kinit [email protected]
[email protected]'s Password:
username@machine00 ~ $
O oposto de aklog
é unlog
, que exclui o token do AFS. Correspondentemente, kdestroy
remove o arquivo dos tickets, excluindo todos os tickets do Kerberos.
Como isso salvou o dia e me ajudou a amar meus amigos & família
Como dito no começo, conhecer esses conceitos me ajudou a entender melhor o que estava acontecendo com a minha sessão matlab. Após o logout, meu token do AFS não estava mais lá e meus processos em execução não tinham mais permissão para gravar em meu volume afs. Como, no momento, estou interessado apenas em garantir que meu script matlab continue executando a leitura e gravação de arquivos, mesmo depois de fazer o logout, tive o cuidado de incluir um teste no token do AFS antes de qualquer acesso ao volume do AFS
ticket_status = unix('klist -s');
if ticket_status ~= 0,
unix 'kinit [email protected] <<< "password"';
unix aklog
end
Como eu disse, isso vai para o script matlab e eu o coloquei antes de qualquer comando save
ou load
matlab. O código usa o comando matlab unix
para executar seus argumentos em um shell Unix e retornar os resultados. O comando do Unix klist -s
executa klist
silenciosamente, mas retorna seu status de saída. Testamos o status de saída de credenciais e solicitamos novas, caso elas não existam ou tenham expirado.