Estou escrevendo um pequeno programa utilitário. Eu gostaria que tentasse sudoexecutar algo, se necessário.
Ou seja: se as permissões do arquivo não permitirem que o usuário atual opere em um arquivo específico (e as sudoregras permitiriam), eu gostaria que meu utilitário sudoexecutasse algo como o proprietário do arquivo.
Espero verificar essa capacidade antecipadamente, porque eu preferiria que os logs do sistema não fossem preenchidos com ruído devido a sudotentativas falhas . Como sudoele próprio relata a falha: "Este incidente será relatado".
Então, espero verificar programaticamente: pode user <x>executar command <y>via sudo?
Aqui está o problema: enquanto /etc/sudoerscontém esse mapeamento, ele é de propriedade da raiz e não pode ser lido por usuários comuns.
Eu estava pensando em gerar um subprocesso para executar sudo -l(que gera comandos que o usuário atual pode executar com sudo). Eu então analisaria a saída disso. No entanto, isso parece um pouco frágil. O resultado contém as informações que eu quero, mas parece que ele foi projetado para humanos lerem (não para consumo programático). Não sei se existe alguma garantia de que a saída seguirá o mesmo formato no futuro ou em plataformas diferentes.
A análise programática da sudo -lprodução é considerada segura? Caso contrário, existem opções melhores para determinar antecipadamente se um comando sudo seria bem-sucedido?
(informações gerais sobre X / Y: este utilitário é para ser usado por uma conta de função de acesso limitado. Espero que outros usuários efetivamente optem por permitir que a conta de acesso limitado opere em seus arquivos por meio de regras sudo. No entanto, ganhei saber antecipadamente qual desses outros usuários possui a regra relevante do sudo)