Назад | Перейти на главную страницу

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

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

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

Как я могу это сделать?

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

Если бы это был обычный двоичный файл, вы могли бы установить его, запустив

# 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 добавляет еще одну потенциальную проблему безопасности.

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

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

Но есть подводный камень ...

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

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

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

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

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

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

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

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

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

Linux не позволяет вам устанавливать uid для скриптов, для этого вам придется скомпилировать его как программу. Вместо этого вы можете использовать файл sudoers (/ etc / sudoers) и добавить такую ​​строку.

<username> ALL = NOPASSWD: /path/to/script

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

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

Вроде как ваше собственное подмножество множества возможностей sudo.