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


85

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

sudo -S mypassword execute_command

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


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

+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

4
Это не отвечает на вопрос OP.
codeforester 02
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.