De acordo com o manual do sudoers :
It is generally not effective to "subtract" commands from ALL using the
’!’ operator. A user can trivially circumvent this by copying the
desired command to a different name and then executing that. For
example:
bill ALL = ALL, !SU, !SHELLS
Doesn’t really prevent bill from running the commands listed in SU or
SHELLS since he can simply copy those commands to a different name, or
use a shell escape from an editor or other program. Therefore, these
kind of restrictions should be considered advisory at best (and
reinforced by policy).
É por isso que sua política de sudoers não funciona.
Se você quiser impedir que o usuário obtenha permissão de root e altere sua senha, tente este procedimento:
-
Supondo que seus sudoers contenham esta diretiva:
root ALL=(ALL:ALL) ALL %sudo ALL=(ALL:ALL) ALL
-
Supondo que seu nome de usuário seja
foo
, seus grupos sãofoo
esudo
. A saída do comandogroups
é:foo sudo
-
Remova o usuário
foo
desudo
group:gpasswd -d foo sudo
depois disso, userfoo
não pode executar nenhum comando com sudo. -
Edite o arquivo sudoers. Use este comando:
sudo visudo -f /etc/sudoers.d/foo
-
Defina user
foo
permission, por exemplo:foo ALL=/usr/bin, !/usr/bin/passwd, !/usr/bin/su
Isso significa que o usuário
foo
pode executar qualquer comando no comando/usr/bin/
excetopasswd
esu
. Nota: Se o usuáriofoo
desejar alterar sua senha, poderá executar o comandopasswd
semsudo
. -
Outro exemplo de usuário
foo
permission:foo ALL =/usr/bin, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root
Isso significa que o usuário
foo
pode executar qualquer comando no diretório/usr/bin/
e pode alterar a senha de qualquer pessoa, exceto root em TODAS as máquinas.
Você pode definir grupos de comandos definindo Cmnd_Aliases
e criar "níveis de permissões". Você pode encontrar exemplos úteis na seção EXEMPLO do manual do sudoers , e aqui está uma link útil sobre como usar sudoers.