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?

ccman
źródło
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

kamienieam92
źródło
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
perreal
źródło
+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
matteomattei
źródło
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ć.

Lucas Holt
źródło
-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
kbdjockey
źródło
4
To nie odpowiada na pytanie OP.
codeforester