scripts inicio /etc/init.d - nonroot
Hola a todos,
Tengo unos servidores donde se instaló tomcat y otras aplicaciones desde código fuente y no se añadieron al inicio del sistema. Bien, me gustaría ahora que sí lo hicieran y que, además, se inicien con un usuario distinto al de root. Estos usuarios digamos que ya los tengo creados y su grupo también (pongámosle user=group=tomcat). Mi duda está en el contenido del script. Añadirlo al '/etc/init.d' y a los runlevels (chkconfig --add servicio) ya sé cómo se hace.
Sólo necesito que arranque con el usuario tomcat en vez del usuario root. Dicho usuario tomcat se encuentra dentro del fichero '/etc/sudoers' con los siguientes permisos:
...
root ALL=(ALL) ALL
tomcat ALL=(ALL) ALL
...
Estoy en ello pero ando algo liado. Un par de ideas de lo que necesito verificar:
1)
RUN_AS_USER=tomcat
CATALINA_HOME=/opt/apache-tomcat
start() {
echo "Starting Tomcat: "
if [ "x$USER" != "x$RUN_AS_USER" ]; then
su - $RUN_AS_USER -c "$CATALINA_HOME/bin/startup.sh"
else
$CATALINA_HOME/bin/startup.sh
fi
echo "done."
}
2) Meter el script en '/etc/rc.local' para que se ejecute con posterioridad al resto de scripts de arranque. Aquí tengo la duda del orden de parada/arranque de servicios.
Muchas gracias por la ayuda. Saludos
- Inicie sesión o regístrese para enviar comentarios
- 173 lecturas


Primero que nada, no agregues el usuario tomcat a sudoers dandole todos los privilegios, si haces eso no hay diferencia entre que inicies el proceso como root o como tomcat ya que tomcat tambien tendria poderes de superusuario.
En cuanto al script, tu lo que quieres hacer es degradar privilegios antes de iniciar el proceso, eso se hace con la llamada a la funcion setuid() (http://linux.die.net/man/2/setuid). Muchas aplicaciones disponibles en bash hacen uso de esta funcion, y si bien su es una de ellas la mas adecuada para la tarea que quieres llevar a cabo seria start-stop-daemon y la opcion --user, dale una mirada man start-stop-daemon para mas info.
Vas bien encaminado,
su $usuario -c "$comando"ejecutas, siendo root, el $comando como el $usuario
Luego, crear el script en /etc/init.d/ y los enlaces con update-rc.d
Hola y gracias por la rápida respuesta. Primero matizar que creo que debo mover el hilo a la parte de shell/bash... :)
Luego, en el ejemplo 2 me he olvidado decir que en '/etc/rc.local' va el comando con el user+script asociado; el script en sí lo dejaría en '/usr/bin'.
Más, lo del usuario tomcat y sus 'vastos' privilegios es algo que tengo en cuenta pero que no puedo modificar :(
Por último una duda. Si lo pongo en '/etc/rc.local', ¿cuándo lo pare el sistema también será el usuario 'tomcat' el que parará el sistema o cuando se apaga todo lo hace el usuario root?
Lo ideal sería poder ejecutarlo desde '/etc/init.d' y después lanzar un 'chkconfig --add servicio'. De esta forma me aseguro un arranque y parada ordenados con el usuario/privilegios que quiero.
Gracias de nuevo