Вы должны использовать бит setuid для достижения той же функциональности без sudo. Но вы не должны запускать скрипты Bash. Setuid намного более безопасен, чем sudo. Используя sudo или setuid, вы запускаете программу от имени пользователя root. Но только setuid (с помощью определенных языков) предлагает некоторые дополнительные меры безопасности.
По сути, вы будете использовать сценарии, которым временно разрешено работать от имени владельца, а не от пользователя, который их вызвал. Ruby и Perl могут определять, когда скрипт запускается от имени другого пользователя, чем вызывающий, и применяют меры безопасности для защиты от небезопасных вызовов. Это называется Taint mode. Bash вообще не работает в режиме taint.
Режим Taint по существу работает, объявляя все входные данные из внешнего источника небезопасными для использования при передаче системному вызову.
Настройка:
Используйте chmod, чтобы установить разрешения для скрипта, который вы хотите запустить как 4755, и установить его владельца как root:
$ chmod 4755 script.rb
$ chown root script.rb
Тогда просто запустите скрипт, как обычно. Бит setuid запускается и запускает скрипт, как если бы он был запущен пользователем root. Это самый безопасный способ временно повысить привилегии.
См. Документацию Ruby по безопасным уровням и порче , чтобы понять санитарные требования Ruby для защиты от испорченного ввода, наносящего вред. Или perlsec faq , чтобы узнать, как то же самое делается в Perl.
Снова. Если у вас не получается установить сценарии от имени пользователя root из автоматизированной системы. Не используйте Bash! Используйте Ruby или Perl вместо Bash. Режим Taint заставляет вас серьезно относиться к безопасности и может избежать многих ненужных проблем в будущем.