Evite que sudo solicite una contraseña cuando ejecute un command no permitido

Le he otorgado permiso a un grupo para ejecutar ciertos commands sin contraseña a través de sudo. Cuando uno de los usuarios hace un error tipográfico o ejecuta el command incorrecto, el sistema les pide su contraseña y luego reciben un error. Esto es confuso para el usuario, por lo que me gustaría mostrar un error en lugar de solicitar una contraseña. es posible?

Aquí hay un ejemplo de mi file sudoers:

%mygroup ALL=(ALL) NOPASSWD:/usr/local/bin/myscript.sh * 

Ejemplo cuando ejecutan el script incorrecto:

 # sudo /usr/local/bin/otherscript.sh [sudo] password for user: Sorry, user user is not allowed to execute '/usr/local/bin/otherscript.sh' as root on <hostname>. 

Salida deseada:

 Sorry, user user is not allowed to execute '/usr/local/bin/otherscript.sh' as root on <hostname>. Please check the command and try again. 

Tenga en count la falta de request de contraseña.

Mi google-fu me ha fallado y solo devuelve resultados al no solicitar una contraseña cuando el usuario puede ejecutar el command.

De una lectura rápida de sudo(8)

  -n The -n (non-interactive) option prevents sudo from prompting the user for a password. If a password is requinetworking for the command to run, sudo will display an error message and exit. 

Y para los incrédulos:

 # grep jdoe /etc/sudoers jdoe ALL=(ALL) NOPASSWD: /bin/echo # 

Probado de esta manera:

 % sudo echo allowed allowed % sudo -n ed sudo: a password is requinetworking % sudo ed We trust you have received the usual lecture from the local System Administrator. It usually boils down to these three things: #1) Respect the privacy of others. #2) Think before you type. #3) With great power comes great responsibility. Password: 

Por lo tanto, un alias para sudo para estas personas probablemente sería el truco, para evitar el aviso de contraseña. Ahora, por qué esto requiere sudo compilation personalizada, no sé, acabo de leer el manual.

Una cosa que funcionó para mí, (Sudo versión 1.8.17p1), pero satisface solo parte de su problema, es establecer el número de bashs de contraseña en 0.

 Defaults:%mygroup passwd_tries = 0 

Esto hace que sudo salga con el código 1 cuando se intenta ejecutar cualquier command que requiera una contraseña. Sin embargo, no produce ningún tipo de post de error.

No puedes.

No hay forma de saber quién es hasta que se haya autenticado y, de forma pnetworkingeterminada, no puede autenticarse sin una contraseña.

Puede cambiar la authentication para usar llaves USB, escáneres de huellas dactilares, authentication de voz, reconocimiento facial o un montón de otras cosas, pero el punto es el mismo.

No puede autenticarse, sin authentication Y antes de autenticarse, sudo no tiene nada que decirle sobre lo que puede o no puede ejecutar.

@StrongBad hizo un comentario que merece ser una respuesta:

Creo que la mejor solución sería escribir un script contenedor que siempre llame a sudo con los parameters correctos. (Incluyendo -n )

La secuencia de commands contenedora puede hacer análisis de arguments, etc., de modo que la secuencia de commands llamada sudo se vuelve lo más pequeña posible y, por lo tanto, es less probable que tenga errores.

Esto no es posible. La única forma es cambiar el código fuente y comstackr su propio tenedor de sudo