Você não pode fazer isso analisando os arquivos de configuração do sudo porque a configuração do sudo é legível apenas pelo root. Mesmo se você pudesse ler a configuração do sudo, é difícil analisá-lo de forma confiável (especialmente para lidar com informações não locais, como bancos de dados LDAP) e não conta toda a história (por exemplo, permissão pode ser conferida por um grupo). / p>
A única verificação realista é executar sudo
como usuário A. Como você precisa fazer essa verificação a partir de um script executado como usuário B, você precisará de uma maneira de o usuário B executar a verificação como usuário A. escreva um programa pequeno ( não é um script que seja setuid A ou ofereça ao usuário B a permissão para executar o cheque como usuário A via sudo.
Se você não puder envolver o administrador para configurar uma regra sudo permitindo que o usuário B execute a verificação como A, então um programa setuid é a única solução. Este programa invocaria sudo -u userB -b true
para verificar se A tem permissão para executar true
como usuário B. Aqui está um código-fonte C para este programa (aviso: não testado!):
#include <unistd.h>
int main(void) {
execl("/usr/bin/sudo", "sudo", "-u", "userB", "-b", "/bin/true", (char*)NULL);
return 126;
}
Compile e torne o executável resultante setuid A (ele deve ser de propriedade de A e, em seguida, executar chmod 4755 /path/to/executable
).
Note que esta solução não está completa: ela só funcionará se A tiver permissão para executar comandos como B em virtude de ser o usuário A, não se obtiver esse privilégio em virtude de pertencer a um grupo. Se você precisar verificar a associação ao grupo, será necessário executar sg
como usuário A para obter essa associação de grupo e, em seguida, executar sudo
.