2010-06-28 11 views
10

Tengo una aplicación Java ejecutada desde un script de shell ([ba] sh) y, desafortunadamente, a veces las personas responsables de implementarlo e iniciarlo no pueden cambiar al usuario apropiado antes de iniciar la aplicación. En esta situación, me gustaría que la aplicación no se ejecute al menos, e idealmente emitir una advertencia para que no lo haga. Pensé en intentar alias java o cambiar la ruta de root para incluir un java falso que lo haga, pero esto podría tener efectos secundarios indeseables y no será efectivo fácilmente ya que el script de shell especifica la ruta completa al binario java .¿Cuál es el más fácil en un script de shell para garantizar que no se ejecute como root?

Entonces, ¿hay una expresión estándar en los scripts de shell para 'no ejecutar si soy root'?

+0

Indique el shell ... BASH shell, CMD shell? –

+3

Lo siento, no creo en scripts de shell CMD como scripts de shell tanto como 'archivos por lotes', por lo que no se me ocurrió diferenciarlos. – Jherico

+2

bash tiene '$ EUID' pero cristis tiene la respuesta portátil a continuación. – msw

Respuesta

13

ejemplo en bash:

if [ `id -u` = 0 ]; then 
    echo "You are root, go away!" 
    exit 1 
fi 
1

en bash, puede tomar la salida de whoami y compararlo con root.

1

que usar algo como esto al comienzo de los guiones que quiero ejecutarse bajo una cuenta de servicio:

LUSER='my-service' 
if [ `id -un` != $LUSER ]; then 
    exec su $LUSER -s $SHELL -c "$0 [email protected]" 
fi 

# actual script commands here. 

Si se ejecuta como el usuario correcto, la ejecución continuará como estaba previsto. Si se ejecuta como raíz, los privilegios se eliminan en el ID de usuario deseado. Otros usuarios recibirán un mensaje de contraseña que debería indicarles que algo está incorrecto.

su -s $SHELL ... se utiliza para anular el conjunto shell en /etc/passwrd - que se puede establecer en /bin/false para la cuenta de servicio.

Lo he usado en sistemas Debian, usando bash y dash. Siéntase libre para comentar si se puede mejorar la portabilidad.

+0

bueno, creo que no hay un usuario específico que despliegue y ejecute la aplicación Java ... es importante que no sea root. – cristis

+0

id -u da un número en lugar de un nombre. Probablemente quisiste decir id -un. –

+0

Fred Nurk: En un segundo vistazo, tienes razón, por supuesto :-) – hillu

Cuestiones relacionadas