Comprender los trabajos Cron (Cron Jobs) y la sintaxis de cron
En este paso, introduciremos los trabajos Cron (Cron Jobs) y la sintaxis de cron.
Los trabajos Cron (Cron Jobs) son "tareas programadas" en el sistema Linux, comúnmente utilizados para programar comandos que deben ejecutarse periódicamente, como copias de seguridad regulares de datos o limpieza de caché. Se les llama trabajos Cron porque utilizan la herramienta cron
(crontab).
Los trabajos Cron son una de las herramientas más utilizadas por los administradores de sistemas, y son excelentes herramientas por sí mismas. Sin embargo, si las "tareas programadas" se configuran para ejecutarse con privilegios de usuario más altos (por ejemplo, el usuario root), los atacantes podrían aprovecharlas para escalar privilegios.
El comando crontab utiliza la siguiente sintaxis:
* * * * * [ user ] File/Command
- - - - -
| | | | |
| | | | +----- Día de la semana (0 - 7) (0 = Domingo)
| | | +---------- Mes (1 - 12)
| | +--------------- Día del mes (1 - 31)
| +-------------------- Hora (0 - 23)
+------------------------- Minuto (0 - 59)
El campo user
es opcional. Si no se especifica, el comando o script se ejecutará con los privilegios del usuario actual.
Tenga en cuenta que solo el usuario root puede especificar la ejecución de comandos o scripts con los privilegios de otros usuarios.
Por ejemplo, si queremos mostrar el registro de errores de Apache cada hora, podemos usar la siguiente declaración:
0 * * * * echo /var/log/lastlog
Dado que hora
, día
, mes
y semana
se establecen en *
, la tarea programada se ejecutará una vez cada vez que el minuto llegue a 0, es decir, cada hora.
¿Qué pasa si necesitamos ejecutar un comando cada dos horas a las 15 minutos? Podemos hacer una simple modificación:
15 */2 * * * echo /var/log/lastlog
Para entender el uso de cron
, veamos un ejemplo.
-
Abra la terminal y navegue hasta el directorio /home/labex/project
. Luego, ejecute el siguiente comando para inicializar el entorno del laboratorio:
./env_setup1.sh
Después de una inicialización exitosa, verá el archivo cleanup.py
y el directorio trashDirectory
en el directorio de inicio del usuario labex. El directorio trashDirectory
contiene dos archivos: error.log
y readme.txt
.
Nuestro objetivo en el laboratorio es el siguiente: Utilice crontab
para agregar una tarea programada que llame al script cleanup.py
cada 1 minuto para borrar todos los datos en el directorio /home/labex/project/trashDirectory
. El script cleanup.py
simplemente llama al comando del sistema rm
a través de la función os.system()
para borrar el directorio /home/labex/project/trashDirectory
.
-
A continuación, utilice el siguiente comando para agregar una tarea programada en crontab:
echo "* * * * * root python /home/labex/project/cleanup.py" | sudo tee -a /etc/crontab > /dev/null
El comando anterior agrega una tarea programada al archivo crontab. La tarea se ejecutará cada minuto
, y el script cleanup.py
se ejecutará con privilegios de root.
-
Dado que el servicio cron está deshabilitado por defecto en nuestra máquina de laboratorio, necesitamos iniciarlo manualmente con el siguiente comando:
sudo service cron start
Salida esperada:
* Starting periodic command scheduler cron
Después de aproximadamente un minuto
, si ingresamos al directorio /home/labex/project/trashDirectory
y usamos el comando ls
, veremos que los datos del directorio se han borrado, lo que indica que el trabajo cron se está ejecutando correctamente.