Użyj sudo z hasłem jako parametrem [zamknięte]


85

Chciałbym uruchomić sudo z moim hasłem jako parametrem, abym mógł go użyć jako skryptu. próbowałem

sudo -S mypassword execute_command

ale bez powodzenia. Jakieś sugestie?


2
powinieneś po prostu sprawdzić, czy twój skrypt jest uruchamiany przez "roota". Źle jest powtarzać hasło, zostanie ono znalezione w historii ...
kbdjockey

4
O wiele lepiej jest sudoodpowiednio skonfigurować , aby nie pytał o hasło dla niektórych programów / użytkowników / grup, aby uniknąć takich brudnych hacków.
pośpiech

Odpowiedzi:


186

Przełącznik -S sprawia, że ​​sudo odczytuje hasło ze STDIN. Oznacza to, że możesz to zrobić

echo mypassword | sudo -S command

przekazać hasło sudo

Jednak sugestie innych osób, które nie obejmują przekazywania hasła jako części polecenia, takie jak sprawdzenie, czy użytkownik jest rootem, są prawdopodobnie znacznie lepszymi pomysłami ze względów bezpieczeństwa


to zadziałało, wielkie dzięki !!
normalUser

uratował mi dzień, wielkie dzięki !!!
AdrianES

Jak o umieszczenie go w specjalnym folderze, dając zarówno ją i folder wykonać uprawnienia tylko: sudo chmod -R 0100 myScriptFolder? Czy to nie rozwiązałoby problemów z bezpieczeństwem (pod warunkiem, że nikt oprócz Ciebie nie używa Twojego komputera jako root)?
Brōtsyorfuzthrāx

A może hakerzy spoza mojej sieci lokalnej mogą w jakiś sposób zobaczyć tekst skryptu w trakcie jego wykonywania, w pewnych okolicznościach?
Brōtsyorfuzthrāx

To działało jak mistrz na moim pudełku z OSX! Dziękuję bardzo za udostępnienie rozwiązania!
Wulf

51

Możesz ustawić sbit dla swojego skryptu, aby nie potrzebował sudoi działał jako root (i nie musisz wpisywać swojego hasła roota w skrypcie):

sudo chmod +s myscript

+1. Jest to o wiele lepsze (i bezpieczniejsze) niż inne metody.
Burkhard

1
lepki kawałek to zła praktyka, prawda?
kbdjockey

@kbdjockey - +sto bit setuid. +tjest lepkim kawałkiem.
Robᵩ

@Rob - dziękuję za wyjaśnienie
kbdjockey

4
Należy zauważyć, że większość systemów operacyjnych ignoruje tę flagę w przypadku interpretowanych plików skryptów. Jednak działa to ładnie na plikach binarnych.
Magnar

26
echo -e "YOURPASSWORD\n" | sudo -S yourcommand

To nie działa, gdy mam argument dla mojego polecenia. na przykład. echo -e "YOURPASSWORD\n" | sudo -S "run -x". Mówi sudo: run -x: command not found. Masz jakiś pomysł, jak to obejść?
Bee

1
@Bhathiya po prostu nie używaj "cudzysłowów", na przykład: echo -e "TWOJE HASŁO \ n" | sudo -S ls -l / root
matteomattei

Świetnie, dzięki ...
Bee

3

Jedną z opcji jest użycie flagi -A do sudo. To uruchamia program, który pyta o hasło. Zamiast pytać, możesz mieć skrypt, który po prostu wypluje hasło, aby program mógł kontynuować.


-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
To nie odpowiada na pytanie OP.
codeforester
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.