Используйте 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.