Según el manual de 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).
Es por eso que su política de sudoers no funciona.
Si desea evitar que el usuario obtenga permiso de root y cambie su contraseña, intente este procedimiento:
Asumiendo que sudoers contiene esta directiva:
root ALL=(ALL:ALL) ALL
%sudo ALL=(ALL:ALL) ALL
Asumiendo que su nombre de usuario es foo, sus grupos son fooy sudo. groupsla salida del comando es:
foo sudo
Eliminar usuario foodel sudogrupo: gpasswd -d foo sudodespués de esto, usuariofoo no puede ejecutar ningún comando con sudo.
Editar archivo sudoers. Usa este comando:
sudo visudo -f /etc/sudoers.d/foo
Defina el foopermiso del usuario , por ejemplo:
foo ALL=/usr/bin, !/usr/bin/passwd, !/usr/bin/su
Esto significa que el usuario foopuede ejecutar cualquier comando en el directorio /usr/bin/excepción passwdy sucomandos. Nota: Si el usuario foodesea cambiar su contraseña, puede ejecutar el passwdcomando sinsudo .
Otro ejemplo de foopermiso de usuario :
foo ALL =/usr/bin, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root
Esto significa que el usuario foopuede ejecutar cualquier comando en el directorio/usr/bin/ y puede cambiar la contraseña de cualquier persona, excepto la raíz en TODAS las máquinas.
Puede definir grupos de comando definiendo Cmnd_Aliasesy creando "niveles de permisos". Puede encontrar ejemplos útiles en la sección EJEMPLO del manual de sudoers , y aquí hay un enlace útil sobre cómo usar sudoers.