Використовуйте 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.