Я хотел бы иметь возможность запускать определенные скрипты Perl в моей системе как root, даже если вызывающий их пользователь не работает как root.Perl-скрипт для запуска от имени root (обобщенный)
Для каждого сценария я могу написать оболочку C, установив корень setuid для этой оболочки; оболочка изменит UID на 0, а затем вызовет скрипт Perl, который не будет иметь установленный бит setuid. Это позволяет избежать неудачных препятствий при попытке запустить скрипты rootuid root.
Но я не хочу писать C-обертку для каждого скрипта. Я просто хочу, чтобы одна обертка C выполняла работу для всей системы. Я также не хочу, чтобы какой-либо скрипт мог использовать эту оболочку C; сама оболочка C должна иметь возможность проверять некоторые специфические характеристики скрипта Perl, чтобы убедиться, что изменение UID в корневой директории является приемлемым.
Я еще не вижу вопроса о переполнении стека, который решает эту проблему.
Я знаю риски, у меня есть система, и я не хочу, чтобы что-то произвольно нянчило меня, стоя на моем пути.
Это предлагаемое решение является хорошим, поскольку оно требует, чтобы что-то было сделано от root, чтобы благословить предложенный скрипт, чтобы C-оболочка знала, что выполняет его как root. Но я хотел бы, чтобы благословение (по-прежнему выполняемое только root) было как-то частью самого скрипта Perl, так что отдельный список хешей не нужно поддерживать каждый раз, когда скрипт добавляется, удаляется или изменяется. –
Затем вы хотите, чтобы скрипт perl развернулся и вызвал оболочку, чтобы вызвать себя, если она еще не root. Но тогда любой скрипт perl может это сделать, и у вас практически нет безопасности. – ysth
Как я вижу, пользователю командной строки не нужно было знать, что какой-либо C-оберткой был задействован. Он просто запускает скрипт Perl, и да, он будет вызывать оболочку. Трюк заключается в том, чтобы каким-то образом пометить скрипт Perl (таким образом, что может выполняться только root), чтобы обертка C знала, что скрипт Perl имеет право запускать как UID 0. –