Используйте sudo с паролем в качестве параметра [закрыто]

85

Я хочу запустить sudo с моим паролем в качестве параметра, чтобы я мог использовать его для сценария. Я старался

sudo -S mypassword execute_command

но безуспешно. Какие-либо предложения?

ccman
источник
2
вы должны просто проверить, запущен ли ваш скрипт «root».
Повторять
4
Гораздо лучше sudoправильно настроить, чтобы он не запрашивал пароль для определенной программы / пользователей / группы, чтобы избежать таких грязных взломов.
Rush

Ответы:

186

Ключ -S заставляет sudo читать пароль из STDIN. Это означает, что вы можете сделать

echo mypassword | sudo -S command

передать пароль в sudo

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

камни
источник
это сработало, большое спасибо !!
normalUser
спас мой день, большое спасибо !!!
AdrianES
Как насчет положить его в специальной папке дает и то и папку только для выполнения разрешений: sudo chmod -R 0100 myScriptFolder? Разве это не решило бы проблемы безопасности (при условии, что никто, кроме вас, не использует ваш компьютер как root)?
Brōtsyorfuzthrāx
Или могут хакеры из-за пределов моей локальной сети каким-то образом видеть текст скрипта при его выполнении при определенных обстоятельствах?
Brōtsyorfuzthrāx
Это сработало для меня как чемпион на моем OSX-боксе! Большое спасибо за то, что поделились решением!
Wulf
51

Вы можете установить sбит для своего скрипта, чтобы он не требовался sudoи запускался от имени пользователя root (и вам не нужно было писать свой пароль root в скрипте):

sudo chmod +s myscript
Perreal
источник
+1. Это намного лучше (и безопаснее), чем другие методы.
Burkhard
1
липкий бит - это плохая практика, нет?
kbdjockey
@kbdjockey - +sбит setuid. +tэто липкий кусочек.
Robᵩ
@Rob - спасибо за разъяснения
kbdjockey
4
Обратите внимание, что большинство операционных систем игнорируют этот флаг для интерпретируемых файлов сценариев. Это хорошо работает с двоичными файлами.
Magnar
26
echo -e "YOURPASSWORD\n" | sudo -S yourcommand
маттеоматтей
источник
Это не работает, когда у меня есть аргумент для моей команды. например. echo -e "YOURPASSWORD\n" | sudo -S "run -x". Это говорит sudo: run -x: command not found. Есть идеи, как это обойти?
Пчела
1
@Bhathiya просто не используйте "кавычки", например: echo -e "ВАШ ПАРОЛЬ \ n" | sudo -S ls -l / root
matteomattei
Отлично, спасибо ...
Bee
3

Один из вариантов - использовать флаг -A для sudo. Это запускает программу, которая запрашивает пароль. Вместо того, чтобы спрашивать, у вас может быть сценарий, который просто выдаст пароль, чтобы программа могла продолжить.

Лукас Холт
источник
-3
# Make sure only root can run our script
if [ "$(id -u)" != "0" ]; then
   echo "This script must be run as root" 1>&2
   exit 1
fi
kbdjockey
источник
4
Это не отвечает на вопрос OP.
codeforester 02