Gestión de parámetros del núcleo en tiempo de ejecución

Puede ajustar algunos valores de núcleo en el núcleo en ejecución mediante el sistema de archivos virtual.

Algunos archivos virtuales en /proc, y especialmente en /proc/sys, se pueden escribir. Puede ajustar la configuración en el núcleo en ejecución mediante estos archivos. Por ejemplo, para cambiar el nombre de host, puede revisar el archivo /proc/sys/kernel/hostname de la siguiente manera:

echo www.mydomain.com | sudo tee /proc/sys/kernel/hostname

Otros archivos toman valores binarios o booleanos, como la configuración del reenvío de IP, que se define en /proc/sys/net/ipv4/ip_forward:

cat /proc/sys/net/ipv4/ip_forward
0
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
cat /proc/sys/net/ipv4/ip_forward
1

Utilice el comando sysctl para ver o cambiar valores en el directorio /proc/sys.

Nota

Incluso root no puede omitir los permisos de acceso a archivos de las entradas de archivos virtuales en /proc. Si cambia el valor de una entrada de solo lectura como /proc/partitions, no existe ningún código de núcleo para prestar servicio a la llamada del sistema write().

Para obtener más información, consulte las páginas del manual sysctl(8) y sysctl.d(5).

Lista de parámetros y valores configurables del núcleo

Utilice el comando sysctl para examinar los parámetros del sistema de núcleo que están definidos en el sistema de archivos virtual /proc/sys. Los siguientes métodos para ver los parámetros del núcleo y sus valores mediante el comando sysctl están disponibles:

  1. Ejecute sysctl -a para ver todos los parámetros del núcleo disponibles y sus valores para el núcleo en ejecución.
    sysctl -a
    kernel.sched_child_runs_first = 0
    kernel.sched_min_granularity_ns = 2000000
    kernel.sched_latency_ns = 10000000
    kernel.sched_wakeup_granularity_ns = 2000000
    kernel.sched_shares_ratelimit = 500000
    ...
    Nota

    El carácter delimitador en el nombre de un valor es un punto (.) en lugar de una barra (/) en una ruta relativa a /proc/sys, como net.ipv4.ip_forward. Este valor representa net/ipv4/ip_forward. Como otro ejemplo, kernel.msgmax representa kernel/msgmax.

  2. Visualice una configuración individual o una recopilación de valores especificando su nombre como argumento para sysctl.
    sysctl net.ipv4.ip_forward
    net.ipv4.ip_forward = 0
    Para una recopilación más amplia de opciones, puede especificar el nombre de una recopilación de opciones anteriores en la jerarquía de nomenclatura:
    sysctl net.ipv4.conf.all
    net.ipv4.conf.all.accept_local = 0
    net.ipv4.conf.all.accept_redirects = 0
    net.ipv4.conf.all.accept_source_route = 0
    net.ipv4.conf.all.arp_accept = 0
    net.ipv4.conf.all.arp_announce = 0
    net.ipv4.conf.all.arp_filter = 0
    net.ipv4.conf.all.arp_ignore = 0
    net.ipv4.conf.all.arp_notify = 0
    net.ipv4.conf.all.bc_forwarding = 0
    net.ipv4.conf.all.bootp_relay = 0
    net.ipv4.conf.all.disable_policy = 0
    net.ipv4.conf.all.disable_xfrm = 0
    net.ipv4.conf.all.drop_gratuitous_arp = 0
    net.ipv4.conf.all.drop_unicast_in_l2_multicast = 0
    net.ipv4.conf.all.force_igmp_version = 0
    net.ipv4.conf.all.forwarding = 0
    net.ipv4.conf.all.igmpv2_unsolicited_report_interval = 10000
    net.ipv4.conf.all.igmpv3_unsolicited_report_interval = 1000
    net.ipv4.conf.all.ignore_routes_with_linkdown = 0
    net.ipv4.conf.all.log_martians = 0
    net.ipv4.conf.all.mc_forwarding = 0
    net.ipv4.conf.all.medium_id = 0
    net.ipv4.conf.all.promote_secondaries = 0
    net.ipv4.conf.all.proxy_arp = 0
    net.ipv4.conf.all.proxy_arp_pvlan = 0
    net.ipv4.conf.all.route_localnet = 0
    net.ipv4.conf.all.rp_filter = 0
    net.ipv4.conf.all.secure_redirects = 1
    net.ipv4.conf.all.send_redirects = 0
    net.ipv4.conf.all.shared_media = 1
    net.ipv4.conf.all.src_valid_mark = 0
    net.ipv4.conf.all.tag = 0
    

Actualización de los parámetros del núcleo

Utilice el comando sysctl para actualizar los parámetros del sistema de núcleo definidos en el sistema de archivos virtual /proc/sys.

  1. Utilice el comando sysctl -w para definir el valor de un parámetro del núcleo.

    por ejemplo, para cambiar el valor de la configuración net.ipv4.ip_forward a activado, utilice el siguiente formato de comando:

    sudo sysctl -w net.ipv4.ip_forward=1

    Los cambios que realice de esta manera permanecerán vigentes solo hasta que se reinicie el sistema.

  2. Para que los cambios de configuración se mantengan después de reiniciar el sistema, agréguelos al directorio /etc/sysctl.d como un archivo de configuración.

    Los cambios que realice en los archivos de este directorio se aplicarán cuando el sistema se reinicie o si ejecuta el comando sysctl --system, por ejemplo:

    echo 'net.ipv4.ip_forward=1' | sudo tee /etc/sysctl.d/ip_forward.conf
    grep -r ip_forward /etc/sysctl.d
    /etc/sysctl.d/ip_forward.conf:net.ipv4.ip_forward=1
  3. Para restablecer el sistema para que utilice sólo los valores configurados para cargar en el momento del inicio, utilice el comando sysctl --system.
    sudo sysctl --system
    * Applying /usr/lib/sysctl.d/00-system.conf ...
    net.bridge.bridge-nf-call-ip6tables = 0
    net.bridge.bridge-nf-call-iptables = 0
    net.bridge.bridge-nf-call-arptables = 0
    * Applying /usr/lib/sysctl.d/50-default.conf ...
    kernel.sysrq = 16
    kernel.core_uses_pid = 1
    net.ipv4.conf.default.rp_filter = 1
    net.ipv4.conf.all.rp_filter = 1
    net.ipv4.conf.default.accept_source_route = 0
    net.ipv4.conf.all.accept_source_route = 0
    net.ipv4.conf.default.promote_secondaries = 1
    net.ipv4.conf.all.promote_secondaries = 1
    fs.protected_hardlinks = 1
    fs.protected_symlinks = 1
    * Applying /etc/sysctl.d/99-sysctl.conf ...
    * Applying /etc/sysctl.d/ip_forward.conf ...
    net.ipv4.ip_forward = 1
    * Applying /etc/sysctl.conf ...
    

    Tenga en cuenta que cualquier entrada de configuración que haya agregado a /etc/sysctl.d la lee el sistema y la aplica.