Використовуйте sudo з паролем як параметр [закрито]


85

Я хотів би запустити sudo зі своїм паролем як параметром, щоб я міг використовувати його для сценарію. я намагався

sudo -S mypassword execute_command

але без жодного успіху. Будь-які пропозиції?


2
вам слід просто перевірити, чи ваш скрипт запущений "root". Погано повторювати пароль, він буде знайдений в історії ...
kbdjockey

4
Набагато краще sudoправильно налаштувати, щоб він не запитував пароль для певної програми / користувачів / групи, щоб уникнути таких брудних хаків.
пік

Відповіді:


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 box! Велике спасибі, що поділилися рішенням!
Вульф

51

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

sudo chmod +s myscript

+1. Це набагато краще (і безпечніше), ніж інші методи.
Буркхард

1
липкий біт - це погана практика ні?
kbdjockey

@kbdjockey - +sце біт setuid. +tце липкий шматочок.
Робᵩ

@Rob - дякую за роз'яснення
kbdjockey

4
Зверніть увагу, що більшість ОС ігнорують цей прапор для інтерпретованих файлів сценаріїв. Це добре працює на двійкових файлах.
Магнар 01.03.18

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 "YOURPASSWORD \ n" | sudo -S ls -l / root
matteomattei

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.