porque “sudo-u xxx cmd” falha mas “sudo-u xxx / caminho / para / cmd” é bem-sucedido?

2

Recentemente, atualizamos nosso tipo de instância do servidor linux aws. Ainda é um SLES 12 SP1. No entanto, estou percebendo algumas diferenças, algumas das quais estão confundindo

$ sudo -u xyz cmd ...
<it asks for password, causing old scripts to break>

$ sudo -u xyz /path/to/cmd ...
<works>

$ sudo --version
Sudo version 1.8.10p3
Sudoers policy plugin version 1.8.10p3
Sudoers file grammar version 43
Sudoers I/O plugin version 1.8.10p3

$ uname -a
Linux ovcp6hana1 3.12.69-60.64.32-default #1 SMP Wed Feb 15 08:57:04 UTC 2017 (76392c8) x86_64 x86_64 x86_64 GNU/Linux

(A configuração do sudoers tem um Cmnd_Alias e autorização para "/ path / to / cmd")

A versão anterior costumava funcionar, mas não, como se o caminho estivesse sendo expandido automaticamente antes, mas não mais.

Existe alguma maneira de fazer o antigo formulário funcionar? Obrigado.

- EDITAR

Verifiquei que é exatamente o mesmo comando, ou seja, which xyz expande para /path/to/xyz .

- EDIT 2

Acho que encontrei o problema, mas ainda não tenho como permanecer compatível com meu aplicativo. Parece que a diferença é entre sudo versões 1.7.6 e 1.8.10. Mas eu não consegui encontrar tal menção nas notas de lançamento do sudo

Eu criei outro usuário com privilégios semelhantes em um servidor antigo rodando o sudo 1.7. O privilégio específico é como abaixo. Os arquivos de configuração nos dois combinam nas opções

#added in /etc/sudoers
#userA ALL=(userABC) NOPASSWD: /bin/bash, /usr/local/bin/aws

#with both sudo versions
userA$ sudo -u userABC bash -c "echo \$PATH"
/usr/bin:/bin:/usr/sbin:/sbin

userA$ sudo -u userABC bash -c "which aws"
/usr/bin/aws <<<< but this is not reached in either of the two cases

userA$ which aws
/usr/local/bin/aws <<<<<< this is the right binary

#with sudo version 1.7.6
userA$ sudo -u userABC aws
..the right binary runs, so path must have been set between check and run

#with sudo version 1.8.10
userA$ sudo -u userABC aws
failure! sudo asks for password of userABC

O programa /usr/bin/aws faz algum tipo de quebra automática. Até agora eu estava alegremente inconsciente (!) Da sua existência, mas mesmo quando eu momentaneamente removi este programa, não houve impacto em nada.

Portanto, tenho uma compreensão um pouco melhor do problema, mas ainda não sei se existe outra opção além de alterar o aplicativo.

    
por Dinesh 21.03.2017 / 21:52

2 respostas

1

Quando um usuário tem permissão para executar um comando como outro usuário por uma regra no arquivo sudoers que especifica um caminho completo para um executável, esse caminho completo também precisa ser usado na linha de comando.

Esta é uma medida de segurança.

Além disso, se o comando no arquivo sudoers for especificado com sinalizadores de linha de comando, esses sinalizadores precisam estarem presentes quando você invocar o comando através de sudo .

    
por 21.03.2017 / 21:59
1

Isso está acontecendo porque o arquivo sudoers está permitindo que um atributo NOPASSWD seja aplicado ao invocar o caminho explícito para o executável, mas não quando você depende da pesquisa de caminho; pode estar atingindo um executável diferente.

    
por 21.03.2017 / 21:59

Tags