Control de seguridad en crontab

Este pequeño truco realmente puede ser muy útil para sistemas compartidos en el que es necesario dejar como usuario una tarea en cron. Por defecto, dicha tarea si requiere de una contraseña, en crontab se la hay que especificar para que al lanzarse el comando, éste se pueda ejecutar.
Esto por defecto ya llevan un riesgo de seguridad, ya que si alguien lee el fichero, podrá observar la contraseña especificada, escrita en texto plano, tal como se muestra a continuación.
shell> cat /etc/crontab
# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7)
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed
15 0 * * sun root mysql -u root -pYOUR_SECRET_PASSWD -e "CALL ..."
Esto ya de por sí, es un riesgo importante, y la forma de solucionarlo es realmente muy sencilla y se debería de incluir como código de buenas prácticas. Una forma muy sencilla sería esta,
shell> cat /etc/crontab
# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7)
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed
15 0 * * sun root mysql -u root -p`cat $HOME/.my.pass` -e "CALL ..."
En la que la contraseña está escrita en un fichero oculto en la home del usuario que ejecuta el comando y que por defecto sólo tendrá acceso de lectura para él. Es una forma muy simple de proteger la contraseña, pero efectiva para el caso que se propone. Para descubrirla habría que hacer cuando menos una escalada de privilegios en el sistema, lo cual es más complicado que simplemente listar /etc/crontab.

A mayores de esto, algunas aplicaciones UNIX todavía no tiene compilado setproctitle como sistema de llamadas, por lo que si realizamos un ps axu, se podrá ver la línea ejecutada con la contraseña en texto plano. Es muy importante para evitar esto, que las aplicaciones sean compiladas con setproctitle. Actualmente en las principales distribuciones de GNU/Linux cron sí está compilado así, por lo que la contraseña se muestras como XXXXXX.
shell> ps aux
root     80 0.0 0.0 752 20 pts/1 S  13:21 0:00 sh
root     81 0.0 0.0 824 84 pts/1 S+ 13:21 0:00 bash
root     85 0.0 0.0 824 44 pts/1 S+ 13:21 0:00 mysql -u root -pXXXXXX -e...
javier  394 0.0 0.0 820 28 pts/2 Ss 13:54 0:00 bash
javier  402 0.0 0.0 088 80 pts/2 R+ 13:54 0:00 ps aux
...


No hay comentarios :

Publicar un comentario

Formulario de contacto

Nombre

Correo electrónico *

Mensaje *

Últimos comentarios