Possível verificar a capacidade de sudo antes de sudo'ing?

10

Estou escrevendo um pequeno programa utilitário. Eu gostaria que ele tentasse sudo -run algo se necessário.

Ou seja: se as permissões de arquivo não permitirem que o usuário atual opere em um determinado arquivo (e sudo as regras permitiriam isso), eu gostaria que meu utilitário sudo -run algo como o proprietário do arquivo.

Espero verificar essa habilidade antecipadamente, porque prefiro que os logs do sistema não sejam preenchidos com ruído de tentativas sudo com falha. Como sudo se reporta após falha: "Este incidente será relatado".

Portanto, espero verificar programaticamente: pode user <x> executar command <y> via sudo ?.

Este é o problema: enquanto /etc/sudoers contém esse mapeamento, é de propriedade da raiz e não é legível 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). Eu então analisaria a saída disso. No entanto, isso parece um pouco frágil. A saída contém as informações que eu quero, mas parece que foi projetada para humanos lerem (não para consumo programático). Não sei se há alguma garantia de que a saída siga o mesmo formato no futuro ou em diferentes plataformas.

A análise programática da saída sudo -l é considerada segura? Se não, existem opções melhores para determinar com antecedência se um comando sudo seria bem-sucedido?

(plano de fundo no X / Y: Este utilitário é para uso por uma conta de função de acesso limitado. Espero que outros usuários optem por permitir que a conta de acesso limitado opere em seus arquivos por meio das regras sudo. , Não saberei de antemão qual desses outros usuários tem a regra de sudo relevante em vigor)

    
por Peter Martin 05.04.2016 / 18:29

1 resposta

12

De acordo com a página de manual do sudo:

 -l, --list  If no command is specified, list the allowed (and forbidden)
             commands for the invoking user (or the user specified by the
             -U option) on the current host.  A longer list format is used
             if this option is specified multiple times and the security
             policy supports a verbose output format.

             If a command is specified and is permitted by the security
             policy, the fully-qualified path to the command is displayed
             along with any command line arguments.  If command is
             specified but not allowed, sudo will exit with a status value
             of 1.

então isso vai se resumir a

if sudo -l -U $USER shutdown > /dev/null
then
   ## $USER can
else
   ## $USER cannot
fi 

Como apontado por Muru, use -U $USER ou -U $USERTOTEST ou nada, dependendo da sua necessidade.

    
por 06.04.2016 / 15:09

Tags