У меня 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
.