Richiedi all'utente di accedere come root quando esegue uno script di shell


17

Il problema che sto ricevendo è, quando inserisco il comando,

su - root

all'inizio del mio file di script di shell, richiede all'utente di inserire la password e quindi NON continua con il resto dello script di shell. Devo quindi individuare manualmente ed eseguire lo script della shell tramite il terminale. Voglio che lo script si assicuri che l'utente acceda come root e poi continui con il resto dello script della shell.

In altre parole, voglio eseguire lo script come qualsiasi utente ma non appena lo script inizia a essere eseguito, l'utente deve passare a root e quindi continuare con il resto dello script come root fino a quando non viene eseguito. Può essere fatto?

Risposte:


34

Questo è molto facile da realizzare:

#!/bin/sh
[ "$(whoami)" != "root" ] && exec sudo -- "$0" "$@"

Quando l'utente corrente non è root, rieseguire lo script sudo.

Nota che sto usando sudoqui invece di su. Questo perché consente di preservare gli argomenti. Se lo usi su, il tuo comando dovrebbe essere quello su -c "$0 $@"che rovinerebbe i tuoi argomenti se hanno spazi o caratteri shell speciali.

Se la tua shell è bash, puoi evitare la chiamata esterna a whoami:

(( EUID != 0 )) && exec sudo -- "$0" "$@"

Spiacenti, ho fatto un errore nella spiegazione, quindi potrebbe essere stato interpretato erroneamente. Ecco una spiegazione più chiara. Grazie per l'aiuto!
Redson,

@ user68857 La tua domanda era chiara. Questa risposta fa esattamente quello che vuoi.
Patrick,

continuo a ricevere questo errore: sudo: deve essere setuid root
Redson

voglio eseguire lo script come utente normale tramite terminale, ma lo script dovrebbe quindi passare l'utente alla radice fino alla fine dello script
Redson,

@Nosscire se stai ottenendo sudo: must be setuid root, è successo qualcosa al tuo sudo. Per risolvere il problema: chmod u+s $(which sudo). E sì, sono ben consapevole di ciò che stai cercando di fare, faccio sempre la stessa cosa nei miei script.
Patrick,

7

Puoi anche controllare l'UID:

 if [ $(id -u) != 0 ]; then
     echo "You're not root"
     # elevate script privileges
 fi

5

Puoi chiamare lo script stesso e controllare:

#! /bin/bash

if [ "root" != "$USER" ]; then
  su -c "$0" root
  exit
fi

...

0

Nel punto in cui si desidera accedere, è sufficiente aggiungere il seguente comando

sudo su

Funziona perfettamente con il mio codice

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.