Похоже, что никто другой не обратил внимание на очевидную проблему здесь. Помещение sudoв ваш скрипт, который вы затем распространяете, продвигает вредные привычки пользователя . (Я предполагаю, что вы распространяете его, потому что упоминаете «с точки зрения пользователя».)
Правда заключается в том, что в использовании приложений и сценариев существует руководство, аналогичное принципу безопасности в банковском деле: никогда не передавайте свою личную информацию тому, кто вам звонит и говорит, что он звонит «из вашего банка» , и который существует по тем же причинам.
Правило для приложений:
Никогда не вводите пароль при появлении запроса, если вы не уверены, что с ним делается. Это относится ко всем лицам, имеющим sudoдоступ.
Если вы вводите свой пароль, потому что вы запускаете sudoв командной строке, отлично. Если вы печатаете его, потому что вы запустили команду SSH, хорошо. Если вы набираете его при входе в свой компьютер, конечно, замечательно.
Если вы просто запускаете сторонний скрипт или исполняемый файл и при необходимости вводите свой пароль, вы не знаете, что скрипт делает с ним. Это может быть хранение его во временном файле в незашифрованном виде, насколько вы знаете, и может даже не очистить после себя.
Очевидно, что существуют отдельные и дополнительные проблемы с запуском неизвестного набора команд root, но я говорю здесь о поддержании безопасности самого пароля . Даже если предположить, что приложение / скрипт не является вредоносным, вы все равно хотите, чтобы ваш пароль обрабатывался надежно, чтобы другие приложения не могли его использовать и использовать его злонамеренно.
Итак, мой личный ответ на это, что лучше всего добавить в ваш скрипт, если ему нужны привилегии root, это:
#!/bin/bash
[ "$UID" -eq 0 ] || { echo "This script must be run as root."; exit 1;}
# do privileged stuff, etc.
exec- вызывайте саму себя, но в то же время заменяя процесс, поэтому мы не порождаем несколько экземпляров сценария