Запретить sudo запрашивать пароль при запуске недопустимой команды

Я предоставил групповое разрешение для запуска определенных команд без пароля через sudo. Когда один из пользователей делает опечатку или запускает неправильную команду, система запрашивает их для своего пароля, а затем они получают ошибку. Это вводит в заблуждение для пользователя, поэтому я хотел бы просто отобразить ошибку, а не запрашивать пароль. Это возможно?

Вот пример моего файла sudoers:

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

Пример, когда они запускают неправильный скрипт:

 # 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>. 

Желаемый результат:

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

Обратите внимание на отсутствие подсказки пароля.

Мой google-fu мне не удалось и возвращает результаты, не запрашивая пароль, когда пользователю разрешено выполнять команду.

Из быстрого чтения sudo(8)

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

И для сомневающихся:

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

Протестировано таким образом:

 % sudo echo allowed allowed % sudo -n ed sudo: a password is required % 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: 

Таким образом, alias для sudo для этих людей, скорее всего, сделает трюк, чтобы предотвратить запрос пароля. Теперь почему это требует пользовательской компиляции sudo , я не знаю, я просто прочитал руководство.

Одна вещь, которая работала для меня (Sudo версии 1.8.17p1), но удовлетворяет только часть вашей проблемы, заключается в том, чтобы установить количество попыток пароля в 0.

 Defaults:%mygroup passwd_tries = 0 

Это приводит к выходу sudo с кодом 1 при попытке выполнить команду, требующую пароля. Однако он не вызывает сообщений об ошибках.

Ты не можешь.

Невозможно сказать, кто вы, пока вы не прошли аутентификацию, и по умолчанию вы не можете аутентифицироваться без пароля.

Вы можете изменить аутентификацию, используя USB-ключи, сканеры отпечатков пальцев, автоответчик голоса, распознавание лиц или кучу других вещей, но точка одна и та же.

Вы не можете аутентифицироваться, не аутентифицировав И, прежде чем аутентифицировать sudo, нет бизнеса, рассказывающего вам, что вы можете или не можете выполнить.

@StrongBad сделал комментарий, который заслуживает того, чтобы быть ответом:

Я думаю, лучшим решением было бы написать сценарий оболочки, который всегда вызывает sudo с правильными параметрами. (Включая -n )

Сценарий обертки может выполнять парсинг аргументов и т. Д., Так что вызываемый скрипт sudo становится как можно меньше и, следовательно, менее вероятен иметь ошибки.

Это невозможно. Единственный способ – изменить исходный код и скомпилировать свою собственную вилку sudo