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
risposta
#!/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
oppure, per mantenerlo più breve, controllare l'UID env: se [[$ UID -ne 0]]; quindi – zlack
@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
Come dice pr1001, l'UID non funzionerà se l'utente sta eseguendo lo script usando sudo, ma EUID funzionerà perfettamente. – Tom
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
però non funziona nella shell Bourne. avete delle soluzioni strettamente conformi a POSIX? –
- 1. Può uno script bash indicare se viene eseguito tramite cron?
- 2. Pydev mostra un'importazione non risolta, ma lo script viene eseguito?
- 3. comando script php linea non viene eseguito
- 4. Esegui script bash da un altro script senza attendere che lo script finisca di essere eseguito?
- 5. ". Filename" non trova il file quando viene eseguito da/bin/sh, funziona da/bin/bash; perché?
- 6. Script viene eseguito correttamente in commandline ma non come cronjob
- 7. Bash: non lo script assoluto #! interprete?
- 8. come gestire da PHP uno script bash sotto utente root
- 9. Script di Bash non compreso da Ubuntu Bash
- 10. performSelectorOnMainThread non viene eseguito
- 11. AsyncTaskLoader non viene eseguito
- 12. goroutine non viene eseguito se time.sleep incluso
- 13. bash read viene saltato quando viene eseguito da un tubo di curl
- 14. Script Bash se istruzioni
- 15. Come verificare con PHP se lo script viene eseguito dalla console o richiesta del browser?
- 16. MSI non viene eseguito da C#
- 17. Errore di script Bash Catching
- 18. Rilevare se lo script viene eseguito dalla riga di comando in Racket?
- 19. Riavvia lo script python da se stesso
- 20. come terminare un processo che viene eseguito con sudo? Ctrl + C lo fa, ma non uccide
- 21. Crea PK per la tabella #temp non riuscita quando lo script viene eseguito in parallelo
- 22. Lo script Greasemonkey viene eseguito solo quando la pagina viene ricaricata
- 23. Come posso determinare se uno script python viene eseguito da crontab?
- 24. Cambia password di root da script
- 25. Su Unix, trova se l'utente che ha eseguito il programma è root?
- 26. tag script nella visualizzazione Aurelia non viene eseguito
- 27. Rilevare se script Python viene eseguito dalla console o da crontab
- 28. Sicurezza dei Docker come viene eseguito come utente root
- 29. AWS CodeDeploy Lo script AfterInstall viene eseguito dalla dir agent di distribuzione del codice
- 30. Verifica se il mio programma viene eseguito dalla riga di comando bash/ksh/csh
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. –
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
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. –