2009-10-29 22 views
11

Ho uno script bash che installa del software. Voglio fallire il prima possibile se non viene eseguito da root. Come lo posso fare?bash: errore se lo script non viene eseguito da root

+1

Anche se avrei * * generalmente considerare questo comportamento stupido: * farlo funzionare finché non riescono permessi *; il sistema può essere configurato in modo tale che l'operazione possa essere eseguita con successo come utente corrente e forzando la root questa opzione è tolta [ho dovuto correggere script che hanno fatto presupposti simili prima]. D'altra parte, ho più di un caso per * prevenire * l'accesso o visualizzare un grosso avvertimento se eseguito come root. –

+0

Dovresti provare a usare sudo. Sotto linux, quando installi qualcosa devi essere root per impedire ai normali utenti di installare qualsiasi cosa che possa danneggiare il sistema. – masterLoki

+1

Vuole che il suo script tenga conto del fatto che alcune persone potrebbero dimenticare, o non essere a conoscenza di sudo (o altri mezzi di escalation di privilegi)). È una buona pratica controllare la sanità mentale prima di tentare di fare qualsiasi altra cosa. –

risposta

27
#!/bin/bash 
if [ "$(id -u)" != "0" ]; then 
    echo "This script must be run as root" 1>&2 
    exit 1 
fi 

Fonte: http://www.cyberciti.biz/tips/shell-root-user-check-script.html

+0

oppure, per mantenerlo più breve, controllare l'UID env: se [[$ UID -ne 0]]; quindi – zlack

+1

@zlack $ UID fornirà l'UID dell'utente originale se lo script viene eseguito tramite 'sudo' mentre David considererà lo script come eseguito come root. A seconda di cosa stai facendo, David è probabilmente meglio. – pr1001

+0

Come dice pr1001, l'UID non funzionerà se l'utente sta eseguendo lo script usando sudo, ma EUID funzionerà perfettamente. – Tom

5

Dopo aver scavato intorno a questo, il consenso sembra essere che non v'è alcuna necessità di utilizzare id -u in bash, come verrà impostata la variabile EUID (efficace id utente). A differenza di UID, lo EUID sarà 0 quando l'utente è root o sudo. Apparentemente, questo è circa 100 volte più veloce di esecuzione id -u:

#!/bin/bash 
if ((EUID != 0)); then 
    echo "You must be root to do this." 1>&2 
    exit 1 
fi 

Fonte: https://askubuntu.com/questions/30148/how-can-i-determine-whether-a-shellscript-runs-as-root-or-not

+2

però non funziona nella shell Bourne. avete delle soluzioni strettamente conformi a POSIX? –

Problemi correlati