Introducción
Hasta ahora has trabajado con archivos: navegarlos, crearlos, leer sus permisos. Pero un sistema Linux no es solo archivos en disco. En todo momento hay decenas o cientos de procesos en ejecucion: programas que estan haciendo algo ahora mismo.
En esta leccion vas a aprender a ver que procesos hay, quien los ejecuta, cuantos recursos consumen y como detenerlos. Entender los procesos te da visibilidad sobre lo que realmente esta pasando en el sistema, no solo lo que esta almacenado.
¿Por que necesitas ver los procesos?
Los procesos revelan informacion que los archivos no muestran. Un archivo de configuracion puede decir que un servicio *deberia* estar corriendo, pero solo los procesos te confirman que efectivamente esta activo. Ademas, los procesos te dicen como usuario se ejecuta cada programa.
En seguridad ofensiva, la enumeracion de procesos es una de las primeras tareas. ¿Hay un servicio web corriendo como root? ¿Hay un cron job ejecutando un script? ¿Hay otro usuario conectado al sistema? Todo eso se ve a traves de los procesos.
¿Que es un proceso?
Un proceso es un programa en ejecucion. Cada proceso tiene:
- Un PID (Process ID): numero unico que lo identifica
- Un usuario propietario: el usuario bajo el cual se ejecuta
- Un estado: corriendo, dormido, detenido o zombie
- Un proceso padre (PPID): el proceso que lo inicio
Cuando abres una terminal, el shell (bash) es un proceso. Cuando ejecutas un comando, se crea un nuevo proceso hijo. Cuando el comando termina, ese proceso desaparece.
Procesos en la practica
Ver procesos con ps
El comando basico para ver procesos es ps. Sin opciones, solo muestra los procesos de tu sesion actual:
1$ ps
2 PID TTY TIME CMD
3 1234 pts/0 00:00:00 bash
4 1250 pts/0 00:00:00 ps
5Para ver todos los procesos del sistema con informacion completa, usa ps aux:
1$ ps aux | head -10
2USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
3root 1 0.0 0.1 169456 11424 ? Ss 08:00 0:02 /sbin/init
4root 2 0.0 0.0 0 0 ? S 08:00 0:00 [kthreadd]
5www-data 845 0.0 0.2 56784 20480 ? S 08:01 0:01 /usr/sbin/apache2
6root 901 0.0 0.1 72256 8320 ? Ss 08:01 0:00 /usr/sbin/sshd
7user 1234 0.0 0.0 8564 5120 pts/0 Ss 09:30 0:00 -bash
8Las columnas mas utiles:
- USER: quien ejecuta el proceso
- PID: identificador del proceso
- %CPU y %MEM: recursos consumidos
- COMMAND: que programa esta corriendo
Observa que apache2 corre como www-data y sshd corre como root. Saber que usuario ejecuta cada servicio es informacion critica para evaluar el impacto de una vulnerabilidad.
Monitoreo en tiempo real con top
top muestra los procesos en tiempo real, ordenados por consumo de CPU:
1$ top
2top se actualiza cada pocos segundos y muestra los procesos que mas recursos consumen arriba. Es util para identificar procesos inusuales o que consumen demasiados recursos. Para salir, presiona q.
Detener procesos con kill
Para detener un proceso, necesitas su PID y el comando kill:
1$ kill 1250
2kill envia una señal al proceso pidiendole que termine de forma ordenada. Si el proceso no responde, puedes forzar su terminacion con la señal SIGKILL:
1$ kill -9 1250
2Solo puedes matar procesos que te pertenecen. Para matar procesos de otros usuarios, necesitas ser root o usar sudo.
Buscar procesos especificos
Combina ps con grep para encontrar un proceso concreto (aqui aplicas los pipes de la leccion anterior):
1$ ps aux | grep apache
2www-data 845 0.0 0.2 56784 20480 ? S 08:01 0:01 /usr/sbin/apache2
3Procesos como radiografia del sistema
Los archivos te dicen que podria estar configurado. Los procesos te dicen que esta pasando ahora. Un archivo de configuracion puede indicar que un servicio esta habilitado, pero si el proceso no aparece en ps, no esta corriendo.
El flujo de reconocimiento de procesos es:
ps aux: ver todos los procesos y quien los ejecuta- Buscar servicios interesantes: bases de datos, servidores web, cron jobs
- Identificar que usuario ejecuta cada servicio
- Evaluar si algun proceso es inusual o tiene una configuracion que puedas aprovechar
Errores comunes
Advertencia
Usar `kill -9` como primera opcion. La señal -9 (SIGKILL) mata el proceso inmediatamente sin darle oportunidad de cerrar archivos o liberar recursos. Siempre intenta kill sin opciones primero. Solo usa -9 si el proceso no responde.
Advertencia
Ignorar el usuario de los procesos. No basta con ver que un servicio esta corriendo. Fijate en la columna USER. Un servicio que corre como root tiene implicaciones de seguridad muy diferentes a uno que corre como un usuario sin privilegios.
Consejo
Combina `ps aux` con `grep` y `wc`. Para contar cuantas instancias de un proceso hay: ps aux | grep apache | grep -v grep | wc -l. Es un uso natural de los pipes que aprendiste en el modulo anterior.
Conclusión
Los procesos son programas en ejecucion, y cada uno tiene un PID, un usuario propietario y un estado. Con ps aux puedes ver todos los procesos del sistema, con top puedes monitorearlos en tiempo real, y con kill puedes detenerlos. La enumeracion de procesos es una habilidad fundamental porque te muestra lo que el sistema esta haciendo en este momento. En la siguiente leccion aprenderas sobre variables de entorno y el PATH, el mecanismo que define como el sistema encuentra y ejecuta los programas.