martes, 20 de enero de 2009

AIX/Linux: lsof

El otro día hablé sobre tcpdump e introduje un poquito como usarlo para capturar tráfico. Ahora quiero ponerme en la situación del administrador que quiere saber qué proceso está generando el tráfico.

Para ello empleo "lsof" que viene para todo estos sistemas operativos en la revisión 4.78:

AIX 5.[123]
Apple Darwin 7.x and 8.x for Power Macintosh systems
FreeBSD 4.x, 4.1x, 5.x and [67].x for x86-based systems
FreeBSD 5.x and [67].x for Alpha, AMD64 and Sparc64-based systems
HP-UX 11.00, 11.11 and 11.23
Linux 2.1.72 and above for x86-based systems
NetBSD 1.[456], 2.x and 3.x for Alpha, x86, and SPARC-based systems
NEXTSTEP 3.[13] for NEXTSTEP architectures
OpenBSD 2.[89] and 3.[0-9] for x86-based systems
OPENSTEP 4.x
SCO OpenServer Release 5.0.6 for x86-based systems
SCO|Caldera UnixWare 7.1.4 for x86-based systems
Solaris 2.6, 8, 9 and 10
Tru64 UNIX 5.1


Seguro que ya habeis leído por ahí que en Unix todo son ficheros (incluído los directorios!). Pues este comando lo viene a poner de manifiesto porque nos muestra tanto ficheros abiertos, como dispositivos /dev, como conexiones de red y todo ello asociado al proceso que los posee.

Con este comando ya podemos contestar a las preguntas ¿ quién está generando tal o cual tráfico ? ¿ hay algún proceso oracle conectado al LDAP ? ¿ qué procesos están bloqueando el sistema de ficheros que quiero desmontar ? y muchas otras.

Aquí proporciono algunos ejemplos que hablan por sí solos.

Todos los procesos y objetos en uso por ellos

# lsof
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
init 1 root cwd DIR 253,0 4096 2 /
init 1 root rtd DIR 253,0 4096 2 /
init 1 root txt REG 253,0 38620 291774 /sbin/init

Casi no hace falta comentario porque la cabecera es suficientemente aclaratoria.


Muestra los procesos que utilizan algún objeto de /lib o directorios descendientes

# lsof +D /lib


Muestra los procesos con puertos TCP a la escucha sin resolución de nombres
# lsof -P | grep LISTEN
sshd 2395 root 3u IPv6 6947 TCP *:22 (LISTEN)
mysqld 2513 mysql 10u IPv4 7086 TCP *:3306 (LISTEN)
smbd 2579 root 20u IPv4 7265 TCP *:445 (LISTEN)
smbd 2579 root 21u IPv4 7266 TCP *:139 (LISTEN)

Objetos abiertos por el proceso init

# lsof -c init
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
init 1 root cwd DIR 253,0 4096 2 /
init 1 root rtd DIR 253,0 4096 2 /
init 1 root txt REG 253,0 38620 291774 /sbin/init
init 1 root mem REG 253,0 125736 618768 /lib/ld-2.5.so
init 1 root mem REG 253,0 1602320 618769 /lib/libc-2.5.so
init 1 root mem REG 253,0 16428 618783 /lib/libdl-2.5.so
init 1 root mem REG 253,0 242880 618787 /lib/libsepol.so.1
init 1 root mem REG 253,0 93508 618788 /lib/libselinux.so.1
init 1 root 10u FIFO 0,16 1286 /dev/initctl

No hay comentarios: