El sistema de ficheros procfs o «/proc»… Ese gran desconocido

FacebooktwitterinstagramFacebooktwitterinstagram


La mayoría de los Unix y Linux, cuentan con un útil pero, en ocasiones, desconocido directorio, el cuál nos ofrece un amigable interfáz con los procesos que corren en el sistema.

Esta capa de abstracción, se denomina «procfs» y podemos tener acceso a ella como si de un sistema de ficheros se tratase en /proc.

La estructura de /proc, es muy simple. Si hacemos un listado del contenido de este directorio, veremos algo similar a esto:

procfs en Linux

En esta captura, podemos ver, por un lado directorios asociados a los procesos identificados por un número (el PID, o Process ID) y por otro, algunos directorios y ficheros que hacen referencia a diferentes carácterísticas de equipo. Si nos metemos en cualquier directorio de proceso, tendremos acceso a información acerca de su linea de comando, memoria, PPID. En resumen, estos ficheros y directorios que encontraremos aqui, recogen diferente información acerca del funcionamiento del programa. Esta información, en su mayoría, se almacena en formato ascii y es accesible mediante el uso del comando cat.

Por ejemplo, si queremos conocer con qué linea de comando se ha lanzado el proceso 34223, únicamente deberemos ejecutar:

$ cat /proc/34223/cmdline
sshd: usuario1@pts/0

Además, dentro de profs, podemos encontrar muchísima información sobre la configuración del hardware de nuestro equipo:

  • Tipo y características de la/s CPU/s: $ cat /proc/cpuinfo
  • Modulos de cifrado activos: $ cat /proc/crypto
  • Claves almacenadas/cacheadas por el kernel: $ cat /proc/keys
  • Versión del kernel y compilador: $ cat /proc/version

También resulta muy interesante subdirectorio /proc/sys. Desde el mismo, es posible ver y modificar, algunos parámetros de la configuración del equipo, y si vamos a /proc/sys/net, podemos hacer lo propio con la red. Por ejemplo, para ver o modificar el estado del IPForwarding entre los interfaces, tan solo debemos ejecutar:

$ cat /proc/sys/net/ipv4/ip_forward

Para activarlo deberemos escribir (como root)

# echo 1 > /proc/sys/net/ipv4/ip_forward

Y simplemente, para desactivarlo:

# echo 0 > /proc/sys/net/ipv4/ip_forward

Otros parámetros que podemos fijar u observar desde este directorio son:

/proc/sys/net/ipv4/…

  • icmp_ratelimit e icmp_ratemask: Permiten controlar el rátio de generación de paquetes ICMP, por red.
  • icmp_echo_ignore_all: Activado, desactiva el envío de respuestas a ping por parte del sistema.
  • icmp_echo_ignore_broadcasts: Activado, ignora cualquier respuesta a ping que tenga como origen una dirección de broadcast (muy util en determinadas redes)
  • ip_conntrack_max: Fija el número de conexiones que el sistema puede tener en su tabla de conexiones. Por defecto, está fijado a 65536. En caso de que nuestro servidor tenga muchas conexiones concurrentes, se puede elevar o pensar en jugar con otros valores como el tiempo de conexión o el uso de balanceo de carga. Un numero elevado de conexiones, se diagnostica facilmente cuando empezamos a recibir en nuestro syslog mensajes del tipo «ip_conntrack: table full, dropping packet». El número de conexiones concurrentes actual, podemos verlo en /proc/net/ip_conntrack.
  • ip_default_ttl: Fija el TTL de los paquetes IP
  • ip_local_port_range: Limita (o amplia) el rango de puertos usados como puertos de origen en las conexiones locales.
  • tcp_rfc1337: Activado, permite cortar conexiones en un tiempo menor del
  • tcp_syncookies: Activado, aumenta la seguridad frente a spoofing ciego, ya que activa en el kernel la utilización de un número de secuencia basado en la dirección de IP de origen, IP destino, número de puerto y el tiempo que hace que el paquete fué enviado.

Si no queremos hacer uso de este sistema, también podemos acceder o fijar estos valores mediante el comando «sysctl». Con él, es posible acceder a todo lo que hemos visto en el apartado anterior, así como guardar la configuración en el fichero /etc/sysctl.conf.

Si quereis profundizar sobre este útil sistema de ficheros virtual, podeis visitar el correspondiente artículo en la Wikipedia (inglés):

Saludos,

FacebooktwitterredditlinkedinmailFacebooktwitterredditlinkedinmail
octubre 3, 2011

Etiquetas: , , , , , ,
  • Fantastico post. Con este y con el post de los atributos he aprendido muchas cosas que no conocia de linux. ¿Hay un proc para mac?
    Saludos

    • Hola!

      Me alegro de que te hayan servido 🙂 En osx por defecto no lo trae, pero puedes hacer uso de MacFuse (http://code.google.com/p/macfuse) para implementar uno. No es tan completo como el de otros Unix o Linux. En OSX de todas formas, es mas seguro el uso del comando «sysctl».

      Un saludo!

  • Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *