Tengo un script bash que instala algún software. Quiero fallar lo antes posible si no está siendo ejecutado por root. ¿Cómo puedo hacer eso?bash: error si el script no está siendo ejecutado por root
Respuesta
#!/bin/bash
if [ "$(id -u)" != "0" ]; then
echo "This script must be run as root" 1>&2
exit 1
fi
Fuente: http://www.cyberciti.biz/tips/shell-root-user-check-script.html
o, para mantenerlo más corto, verifique el UID env: si [[$ UID -ne 0]]; luego – zlack
@zlack $ UID dará el UID del usuario original si el script se ejecuta mediante 'sudo', mientras que David considerará que el script se ejecuta como root. Dependiendo de lo que estés haciendo, David probablemente sea mejor. – pr1001
Como dice pr1001, el UID no funcionará si el usuario ejecuta el script usando sudo, pero EUID funcionará bien. – Tom
Después de cavar en torno a esto, el consenso parece ser que no hay necesidad de utilizar id -u
en bash, como se establecerá el (a partir del identificador de usuario) Variable EUID
. A diferencia de UID
, el EUID
será 0
cuando el usuario es root
o usando sudo
. Al parecer, esto es alrededor de 100 veces más rápido que ejecutar id -u
:
#!/bin/bash
if ((EUID != 0)); then
echo "You must be root to do this." 1>&2
exit 1
fi
Fuente: https://askubuntu.com/questions/30148/how-can-i-determine-whether-a-shellscript-runs-as-root-or-not
esto no funciona en el shell Bourne sin embargo. ¿Tiene alguna solución estrictamente compatible con POSIX? –
- 1. Coldfusion: Detectando si está siendo ejecutado por el programador
- 2. Script Bash no entendido por Ubuntu Bash
- 3. Llamar a un script desde un programa setuid root C - script no se ejecuta como root
- 4. ¿Puedo saber, en node.js, si mi script se está ejecutando directamente o está siendo cargado por otro script?
- 5. cómo ejecutar PHP desde un script bash bajo usuario root
- 6. ¿Cómo depuro mi JavaScript que está siendo ejecutado por Chutzpah/PhantomJS
- 7. Error de script de Bash Captura
- 8. Bash Script: desmonta un dispositivo, pero no falla si no está montado.
- 9. Cómo comprobar si un comando bash se ha ejecutado correctamente
- 10. Bash: script no absoluto #! ¿Interprete?
- 11. onCreateContextMenu no está siendo llamado
- 12. por qué el $ (function() ejecutado siempre
- 13. Como llegar a la ruta Vimscript actual que está siendo ejecutado
- 14. archivo está siendo utilizado por otro proceso
- 15. Cambiar la contraseña de root del script
- 16. Cómo comprobar si el archivo está siendo utilizado por otro proceso - Powershell
- 17. Indenting Bash Script Output
- 18. Script Bash con lectura no bloqueada
- 19. ¿Cómo ejecutar script bash línea por línea?
- 20. Verificar si el elemento está siendo animado CSS3
- 21. ¿Cómo ejecutar gpg desde un script ejecutado por cron?
- 22. El nombre ya está siendo utilizado por un objeto existente
- 23. error bash: No encontraste /Library/...../setclasspath.sh, pero está ahí
- 24. Error de Standard_in en script bash
- 25. Salida automática del script bash shell en el error
- 26. jugador MediaElement "éxito" de devolución de llamada no está siendo ejecutado y, posiblemente, el evento "terminado" no se dispara si resguardo de Flash se utiliza
- 27. ¿Cómo saber si una cadena no está definida en un script bash shell?
- 28. Script Bash para ejecutar el script php
- 29. Cómo verificar un script bash si algo se está ejecutando y salir si es
- 30. identifican usuario en un script bash llamado por sudo
Aunque me gustaría general * * considerar este comportamiento tonto: * Vamos a funcionar hasta que fallan permisos *; el sistema puede configurarse de modo que la operación se pueda realizar con éxito como el usuario actual y al forzar la eliminación de esta opción se eliminó [He tenido que corregir scripts que han hecho suposiciones similares antes]. Por otro lado, soy mucho más un caso para * prevenir * el acceso o mostrar una gran advertencia si se ejecuta como root. –
Deberías intentar usar sudo. En Linux, cuando instale cualquier cosa, debe ser root para evitar que los usuarios normales instalen algo que pueda dañar el sistema. – masterLoki
Quiere que su script tenga en cuenta que algunas personas pueden olvidar o desconocer sudo (u otros medios de escalada de privilegios).) Es una buena práctica verificar la cordura del tiempo de ejecución antes de intentar hacer cualquier otra cosa. –