Как получить права root для конкретного пользователя, если у нас есть пароль root?

Может ли кто-нибудь предложить, как я могу изменить права процесса в Linux на root?

Предположим, что у меня нормальный процесс работает под некоторым пользователем – подумайте обо мне. Теперь мой скрипт должен создать некоторых пользователей, используя команду useradd, и я хочу отключить учетные записи пользователей через несколько часов. Возьмем временные рамки 5 часов. Каждые 5 часов он должен включить учетную запись, и через 5 часов он должен отключить учетную запись.

Теперь проблема заключается в скрипте, если я пытаюсь получить доступ к root только с помощью команды «su», запрашивающей запрос. Ну, мое намерение здесь состоит в том, чтобы вызывать этот скрипт у удаленного клиента (возможно, через веб-службу либо в .net, либо на Java).

Итак, есть ли способ, который я могу изменить в корневом режиме и создать / включить / отключить учетные записи в Linux, не давая никаких подсказок (где ему нужно ждать ввода кого-то)? Предположим, у меня есть пароль root.

Я попытался выполнить команду pipe, как показано ниже:

echo "password" | su 

Но почему-то это подводит меня к подсказке. Если мне удастся запустить скрипт напрямую без подсказки, я могу продолжить делать то же самое с помощью веб-службы.

Вероятно, вы знакомы с sudo command и /etc/suoders file если хотите написать то же самое, что можете прочитать его код.

Как отмечалось в комментариях msv , вся посылка звучит как экземпляр проблемы XY и очень важна для безопасности кошмаров, но я постараюсь решить вопрос о получении прав root без пароля.

Сначала echo "password" | su echo "password" | su не будет работать, потому что su не читает пароль из stdin , но открывает /dev/tty непосредственно для чтения. Хотя есть инструменты (такие как ожидание ), которые могут использоваться для автоматизации интерактивных программ, подход автоматического получения корневой оболочки для вызова конкретной команды с правами root является плохим с точки зрения безопасности, поскольку он нарушает принцип наименьших привилегий ,

Тем не менее, аутентификация с помощью su может быть автоматизирована, expect использования следующего:

 #!/usr/bin/expect -f spawn su expect "Password:" send "password\n"; interact 

Если цель состоит в том, чтобы разрешить вызов определенной команды как пользователя root, не требуя учетных данных root, правильным инструментом для задания является sudo . Например, если он хочет, чтобы пользователи в группе wheel запускали useradd без ввода пароля, его можно достичь, добавив следующую строку в /etc/sudoers с sudoedit команды sudoedit :

 %wheel ALL = NOPASSWD: /usr/sbin/useradd 

При настройке таких привилегий разумно по крайней мере следить за тем, чтобы возможности ограничивались определенным пользователем или эксклюзивной группой.

Что касается использования этого метода для добавления пользователей через CGI-скрипт или аналогичный, как правило, было бы нежелательно предоставлять такие привилегии непосредственно программному обеспечению, ориентированному на веб-интерфейс, но чтобы добавить уровень разделения привилегий между ними. Фактические привилегии могут предоставляться отдельному программному компоненту, например демону, который веб-приложение запрашивает (через IPC) для выполнения привилегированной операции от ее имени. Таким образом, проверка ввода может быть выполнена как с помощью привилегированного процесса, так и с помощью веб-приложения, чтобы свести к минимуму риски, связанные с эксплуатационными недостатками в веб-приложении, позволяющие использовать привилегированную операцию ( useradd в этом случае) с произвольными параметрами или, например, выполнение произвольного кода с повышенными привилегиями.

Я знаю два инструмента, предназначенных для таких ситуаций: Expect and Empty. Они оба ожидают, что программа прослушивает стандартный ввод, а затем подаст ему заданное значение. Ожидание основано на TCL и имеет относительно большую пользовательскую базу. Пустой имеет меньше зависимостей, но может иметь меньшую поддержку. Для решения этой простой проблемы должно быть достаточно документации на каждой странице.

http://expect.sourceforge.net/

http://empty.sourceforge.net/