Вопрос: ubuntu: пусть пользователь запускает скрипт с правами root


У меня есть ubuntu 8.04, и я хочу написать сценарий bash, который работает как root которые каждый пользователь может запустить.

Я сам могу это сделать.

Как мне это сделать?

ПОЯСНЕНИЯ: Я не хочу делать это с помощью sudo, потому что тогда пользователям придется вводить пароль. Я просто хочу, чтобы они запускали скрипт как root, возможно, что-то setuid, dunno.


9
2017-10-18 08:57


Источник




Ответы:


Если это был обычный двоичный файл, вы могли бы

# chmod u+s /path/to/binary

К сожалению, скрипты не могут быть установлены. (Ну, вы можете, но это игнорируется). Причина этого в том, что первая строка скрипта сообщает ОС, какой интерпретатор запускает сценарий. Например, если у вас есть сценарий с:

#!/bin/bash

Вы действительно закончите

/bin/bash /path/to/script

Очевидно, что для интерпретатора вам понадобится setuid, что означало бы, что все скрипты будут setuid. Это было бы плохо.

Вы можете сделать это с помощью sudo, поместив следующее в файл / etc / sudoers, запустив visudo.

ALL ALL=NOPASSWD: /path/to/script

И теперь любой пользователь может запускать

$ sudo /path/to/script

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

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


22
2017-10-18 09:54



Я думаю, что это тот ответ, который я искал. Не могу ли я установить скрипт bash, только двоичный? (Конечно, я бы принял меры, чтобы сделать его нецелесообразным) - flybywire
Нет, вы не можете создать скрипт setuid. - wfaulk
wfaulk: Раньше вы были в состоянии, но самые последние дистрибутивы Linux больше не позволяют. Вы можете использовать такой инструмент, как shc, чтобы «скомпилировать» сценарий, а затем сделать его setuid. - Kyle Brandt♦
wfaulk: Конечно, это будет из вашего пути делать что-то, что намеренно отключено, поэтому, вероятно, это плохая идея :-) - Kyle Brandt♦
Заменить термин ALL с именем пользователя, чтобы разрешить запуск только одного sudoer без ввода пароля. - hdave


Мне нужно было вставить эту строку В КОНЦЕ / etc / sudoers: ALL ALL = NOPASSWD: <filename> По-видимому, более поздняя %admin ALL=(ALL) ALL override требуется пароль для пользователей admin.

Нет проблемы безопасности, позволяющей запускать сценарий с правами root, если скрипт выполняет четко определенное, безобидное, разрешенное действие и, если значения для любых параметров не могут привести к неправильной работе скрипта.

Но есть ...

Всегда используйте полные пути в именах команд и файлов. Если вы пишете что-то вроде echo Hello world! в myrootscript, кто-то может написать ~/bin/echo script а также myrootscript будет выполняться как root, что бы там ни было.

/bin/echo "Hoping this will keep you safe" :-)


3
2018-04-19 09:37



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


По умолчанию члены wheel группе разрешено sudo любая команда как root, Вероятно, это то, как вы используете sudo встретиться.

Чтобы разрешить другому пользователю, вам необходимо создать sudoers править. Например:

mickey.mouse ALL = (root) NOPASSWD: /usr/local/bin/test.sh

Позволит пользователю mickey.mouse выполнить команду /usr/local/bin/test.sh в виде root не требуя дополнительной подсказки пароля.

Вы должны прочитать этот документ Чтобы получить больше информации.


2
2017-10-18 09:53



Debian / Ubuntu использует группу администратора, а не колесо. Возможно, это немного более точное имя. - David Pashley
Назовите меня старомодным, но ..;) - Dan Carley
старомодный: P - David Pashley


использование chmod +s <filename> для того чтобы высушить бит. Это означает, что когда файл выполняется, он запускается с разрешениями владельца файла (так что его нужно корневать, чтобы заставить его работать как таковой).

Однако это может быть ОЧЕНЬ опасно с чем-то вроде скриптов bash, потому что пользователь находит способ его изменить, они могут легко получить корневую оболочку. Убедитесь, что он не может быть написан кем-либо, кроме root.


0
2017-10-18 09:51





Другая альтернатива: вы можете сделать небольшую обертку setuid C вокруг этого скрипта, которая

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

Подобно вашему собственному подмножеству множественных возможностей sudo,


0
2018-04-19 12:07