Manejo y modificación de módulos del kernel

Índice

Ejercicios de manejo de módulos

Comprueba los módulos cargados en tu equipo

Los módulos cargados en el equipo se pueden listar con el comando lsmod.

lsmod
Module                  Size  Used by
ip6t_REJECT            16384  6
nf_reject_ipv6         20480  1 ip6t_REJECT
rpcsec_gss_krb5        36864  0
nfsv4                1052672  0
dns_resolver           16384  1 nfsv4
nfs                   520192  1 nfsv4
fscache               380928  1 nfs
netfs                  57344  1 fscache
veth                   36864  0
nft_masq               16384  1
vhost_net              36864  9
vhost                  57344  1 vhost_net
vhost_iotlb            16384  1 vhost
tap                    28672  1 vhost_net
tun                    61440  19 vhost_net
snd_seq_dummy          16384  0
snd_hrtimer            16384  1
snd_seq                90112  7 snd_seq_dummy
snd_seq_device         16384  1 snd_seq
xt_CHECKSUM            16384  5
xt_MASQUERADE          20480  12
xt_conntrack           16384  4
ipt_REJECT             16384  18
nf_reject_ipv4         16384  1 ipt_REJECT
xt_tcpudp              20480  0
nft_compat             20480  45
nft_chain_nat          16384  3
nf_nat                 57344  3 nft_masq,nft_chain_nat,xt_MASQUERADE
nf_conntrack          188416  4 xt_conntrack,nf_nat,nft_masq,xt_MASQUERADE
nf_defrag_ipv6         24576  1 nf_conntrack
nf_defrag_ipv4         16384  1 nf_conntrack
nf_tables             303104  983 nft_compat,nft_masq,nft_chain_nat
nfnetlink              20480  2 nft_compat,nf_tables
qrtr                   49152  2
bridge                311296  0
stp                    16384  1 bridge
llc                    16384  2 bridge,stp
binfmt_misc            28672  1
intel_rapl_msr         20480  0
intel_rapl_common      32768  1 intel_rapl_msr
nls_ascii              16384  1
nls_cp437              20480  1
x86_pkg_temp_thermal    20480  0
intel_powerclamp       20480  0
vfat                   24576  1
fat                    90112  1 vfat
coretemp               20480  0
kvm_intel             380928  6
kvm                  1146880  1 kvm_intel
irqbypass              16384  27 kvm
ghash_clmulni_intel    16384  0
ath9k                 143360  0
cryptd                 28672  1 ghash_clmulni_intel
ath9k_common           24576  1 ath9k
sha512_ssse3           49152  0
sha512_generic         16384  1 sha512_ssse3
ath9k_hw              512000  2 ath9k_common,ath9k
snd_hda_codec_realtek   172032  1
snd_hda_codec_generic    98304  1 snd_hda_codec_realtek
ledtrig_audio          16384  1 snd_hda_codec_generic
ath                    36864  3 ath9k_common,ath9k,ath9k_hw
mac80211             1175552  1 ath9k
snd_hda_codec_hdmi     81920  1
sha256_ssse3           32768  1
libarc4                16384  1 mac80211
snd_hda_intel          57344  2
snd_intel_dspcfg       36864  1 snd_hda_intel
snd_intel_sdw_acpi     20480  1 snd_intel_dspcfg
snd_hda_codec         184320  4 snd_hda_codec_generic,snd_hda_codec_hdmi,snd_hda_intel,snd_hda_codec_realtek
sha1_ssse3             32768  0
cfg80211             1146880  4 ath9k_common,ath9k,ath,mac80211
pcspkr                 16384  0
rapl                   20480  0
snd_hda_core          122880  5 snd_hda_codec_generic,snd_hda_codec_hdmi,snd_hda_intel,snd_hda_codec,snd_hda_codec_realtek
iTCO_wdt               16384  0
intel_pmc_bxt          16384  1 iTCO_wdt
snd_hwdep              16384  1 snd_hda_codec
snd_pcm               159744  4 snd_hda_codec_hdmi,snd_hda_intel,snd_hda_codec,snd_hda_core
rfkill                 36864  6 ath9k,cfg80211
mei_hdcp               24576  0
snd_timer              49152  3 snd_seq,snd_hrtimer,snd_pcm
iTCO_vendor_support    16384  1 iTCO_wdt
intel_cstate           20480  0
snd                   126976  16 snd_hda_codec_generic,snd_seq,snd_seq_device,snd_hda_codec_hdmi,snd_hwdep,snd_hda_intel,snd_hda_codec,snd_hda_codec_realtek,snd_timer,snd_pcm
soundcore              16384  1 snd
watchdog               45056  1 iTCO_wdt
intel_uncore          217088  0
at24                   28672  0
sg                     40960  0
mei_me                 53248  1
evdev                  28672  11
mei                   159744  3 mei_hdcp,mei_me
nfsd                  704512  5
auth_rpcgss           159744  2 nfsd,rpcsec_gss_krb5
msr                    16384  0
nfs_acl                16384  1 nfsd
lockd                 131072  2 nfsd,nfs
grace                  16384  2 nfsd,lockd
sunrpc                692224  21 nfsd,nfsv4,auth_rpcgss,lockd,rpcsec_gss_krb5,nfs_acl,nfs
parport_pc             40960  1
ppdev                  24576  0
efi_pstore             16384  0
lp                     20480  0
parport                69632  3 parport_pc,lp,ppdev
fuse                  176128  7
configfs               57344  1
loop                   32768  0
ip_tables              36864  0
x_tables               61440  8 xt_conntrack,nft_compat,xt_tcpudp,xt_CHECKSUM,ipt_REJECT,ip_tables,xt_MASQUERADE,ip6t_REJECT
autofs4                53248  2
xfs                  1957888  3
btrfs                1794048  0
zstd_compress         294912  1 btrfs
efivarfs               24576  1
raid10                 65536  0
raid456               180224  0
async_raid6_recov      24576  1 raid456
async_memcpy           20480  2 raid456,async_raid6_recov
async_pq               20480  2 raid456,async_raid6_recov
async_xor              20480  3 async_pq,raid456,async_raid6_recov
async_tx               20480  5 async_pq,async_memcpy,async_xor,raid456,async_raid6_recov
xor                    24576  2 async_xor,btrfs
raid6_pq              122880  4 async_pq,btrfs,raid456,async_raid6_recov
libcrc32c              16384  6 nf_conntrack,nf_nat,btrfs,nf_tables,xfs,raid456
crc32c_generic         16384  0
raid1                  53248  0
raid0                  24576  0
multipath              20480  0
linear                 20480  0
md_mod                192512  6 raid1,raid10,raid0,linear,raid456,multipath
dm_mod                184320  6
hid_generic            16384  0
usbhid                 65536  0
hid                   159744  2 usbhid,hid_generic
i915                 3055616  73
sd_mod                 65536  4
t10_pi                 16384  1 sd_mod
crc64_rocksoft         20480  1 t10_pi
crc64                  20480  1 crc64_rocksoft
crc_t10dif             20480  1 t10_pi
crct10dif_generic      16384  0
drm_buddy              20480  1 i915
i2c_algo_bit           16384  1 i915
drm_display_helper    184320  1 i915
cec                    61440  2 drm_display_helper,i915
ahci                   49152  3
rc_core                69632  1 cec
libahci                49152  1 ahci
ttm                    94208  1 i915
libata                401408  2 libahci,ahci
drm_kms_helper        212992  2 drm_display_helper,i915
xhci_pci               24576  0
xhci_hcd              315392  1 xhci_pci
scsi_mod              286720  3 sd_mod,libata,sg
crct10dif_pclmul       16384  1
crct10dif_common       16384  3 crct10dif_generic,crc_t10dif,crct10dif_pclmul
ehci_pci               20480  0
ehci_hcd              102400  1 ehci_pci
drm                   614400  18 drm_kms_helper,drm_display_helper,drm_buddy,i915,ttm
i2c_i801               36864  0
i2c_smbus              20480  1 i2c_i801
crc32_pclmul           16384  0
scsi_common            16384  3 scsi_mod,libata,sg
r8169                  94208  0
lpc_ich                28672  0
realtek                36864  1
crc32c_intel           24576  1
mdio_devres            16384  1 r8169
usbcore               348160  5 xhci_hcd,ehci_pci,usbhid,ehci_hcd,xhci_pci
libphy                180224  3 r8169,mdio_devres,realtek
usb_common             16384  3 xhci_hcd,usbcore,ehci_hcd
fan                    20480  0
video                  65536  1 i915
wmi                    36864  1 video
button                 24576  0

Cuenta el número de módulos disponibles en el núcleo que estás usando

sudo find /lib/modules/$(uname -r) -type f -iname '*.ko' | wc -l
4024

En el kernel instalado en el equipo hay disponibles un total de 4024 módulos.

Conecta un lápiz USB y observa la salida de la instrucción sudo dmesg

Al conectar un dispoisitivo USB al equipo, se cargan en memoria los módulos del kernel que contienen los drivers necesarios para gestionar el dispositivo. En este caso, se observa en la salida del comando sudo dmesg cómo se cargan los módulos usb 2-1, usb-storage, scsi host4 o usbcore. Además, se muestran algunos de los pocesos relacionados con la detección, identificación y montaje del nuevo dispositivo.

sudo dmesg
...
[14561.684067] usb 2-1: new high-speed USB device number 5 using xhci_hcd
[14562.325600] usb 2-1: New USB device found, idVendor=125f, idProduct=1036, bcdDevice= 1.00
[14562.325605] usb 2-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[14562.325607] usb 2-1: Product: USB Flash Drive
[14562.325609] usb 2-1: Manufacturer: USB 2.0
[14562.325610] usb 2-1: SerialNumber: 9701b097f311bd
[14563.248344] usb-storage 2-1:1.0: USB Mass Storage device detected
[14563.249769] scsi host4: usb-storage 2-1:1.0
[14563.251217] usbcore: registered new interface driver usb-storage
[14563.358101] usbcore: registered new interface driver uas
[14564.280602] scsi 4:0:0:0: Direct-Access     USB 2.0  USB Flash Drive  0.00 PQ: 0 ANSI: 2
[14564.281193] sd 4:0:0:0: Attached scsi generic sg2 type 0
[14564.281424] sd 4:0:0:0: [sdb] 7897088 512-byte logical blocks: (4.04 GB/3.77 GiB)
[14564.281802] sd 4:0:0:0: [sdb] Write Protect is off
[14564.281807] sd 4:0:0:0: [sdb] Mode Sense: 00 00 00 00
[14564.282150] sd 4:0:0:0: [sdb] Asking for cache data failed
[14564.282156] sd 4:0:0:0: [sdb] Assuming drive cache: write through
[14564.350308]  sdb:
[14564.419487] sd 4:0:0:0: [sdb] Attached SCSI removable disk
[14569.357025] FAT-fs (sdb): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.

Elimina el módulo correspondiente a algún dispotivo no esencial y comprueba qué ocurre. Vuelve a cargarlo

Cuando se descarga de memoria el módulo ath9k, que está relacionado con los drivers de la tarjeta de red inalámbrica.

sudo modprobe -r ath9k

La ejecución del comando sudo dmesg muestra la siguiente línea:

[17980.371067] ath9k: ath9k: Driver unloaded

Si se vuelve a cargar el módulo en memoria

sudo modprobe ath9k

Se vuelve a cargar la información relacionada con la tarjeta de red inalámbrica en el sistema.

[18041.354113] ath: EEPROM regdomain: 0x809c
[18041.354117] ath: EEPROM indicates we should expect a country code
[18041.354118] ath: doing EEPROM country->regdmn map search
[18041.354118] ath: country maps to regdmn code: 0x52
[18041.354119] ath: Country alpha2 being used: CN
[18041.354120] ath: Regpair used: 0x52
[18041.355354] ieee80211 phy1: Selected rate control algorithm 'minstrel_ht'
[18041.379127] ieee80211 phy1: Atheros AR9287 Rev:2 mem=0x000000009cd2f86f, irq=17
[18041.579207] ath9k 0000:04:00.0 wlp4s0: renamed from wlan0

Selecciona un módulo que esté en uso en tu equipo y configura el arranque para que no se cargue automáticamente

Una forma de configurar el kernel para que no cargue automáticamente un módulo en el arranque es usando el directorio /etc/modprobe.d/<modulo>.conf. Por ejemplo, en el caso del módulo ath9k habría que crea el fichero /etc/modprobe.d/ath9k.conf y en él añadir la siguiente línea:

blacklist ath9k

Realmente, el nombe del fichero dentro del directorio /etc/modprobe.d/ no es relevante. De esta manera, si hay una lista más o menos amplia de módulos cuya carga automática en el arranque se quiere evitar se puede crear un fichero /etc/modprobe.d/blacklis.conf y en él añadir una línea con el contenido blacklist <módulo> por cada uno de los módulos a los que se quiera aplicar esta configuración.

Carga el módulo loop, obtén información de qué es y para qué sirve. Lista el contenido de /sys/modules/loop/parameters y configura el equipo para que se puedan cargar como máximo 12 dispositvos loop la próxima vez que se arranque

Tras cargar el módulo loop con el comando modprobe se puede comprobar que, efectivamente, este módulo está cargado con el comando lsmod.

sudo modprobe loop
sudo lsmod | grep loop
loop                   32768  0

El comando modinfo devuelve cierta infomación sobre el módulo loop. Se trata del módulo que gestiona los dispositivos de tipo loop en el sistema. Este módulo no tiene dependencias y tiene tres parámetros: max_loop, que indica el número máximo de dispositivos de tipo loop que se pueden habilitar en el equipo, max_part, que indica el número máximo de particiones que puede tener cada uno de estos dispositivos y hw_queue_depth, que indica la profundida de la cola de cada dispositivo y que, por defecto, tiene un valor de 128.

sudo modinfo loop
filename:       /lib/modules/6.1.0-26-amd64/kernel/drivers/block/loop.ko
alias:          devname:loop-control
alias:          char-major-10-237
alias:          block-major-7-*
license:        GPL
depends:
retpoline:      Y
intree:         Y
name:           loop
vermagic:       6.1.0-26-amd64 SMP preempt mod_unload modversions
sig_id:         PKCS#7
signer:         Debian Secure Boot CA
sig_key:        32:A0:28:7F:84:1A:03:6F:A3:93:C1:E0:65:C4:3A:E6:B2:42:26:43
sig_hashalgo:   sha256
signature:      9A:13:9A:8A:39:48:35:B1:0C:B1:32:B9:F6:58:16:95:98:7C:1A:8F:
		37:7A:44:CB:6B:B6:8D:80:B6:60:83:B3:4B:9E:0F:AB:62:50:12:0A:
		5F:4D:FB:56:7F:02:DA:3E:93:7F:5C:EB:9A:7F:E7:DB:37:BD:BC:2F:
		47:78:64:8C:52:F0:EE:DE:8A:2E:56:FB:6F:64:40:EC:95:FB:41:76:
		AE:28:8F:61:39:F9:20:7B:F3:EA:B5:D7:4A:11:DA:BD:CF:A1:33:1D:
		2B:9D:F8:99:1F:12:09:6F:1F:B2:32:79:E4:A6:2C:3A:09:B7:9B:02:
		13:25:0D:0F:71:38:4D:2B:31:10:78:4E:9E:0B:03:8C:6A:1D:93:FB:
		1F:2F:DC:35:CF:10:26:C2:40:E0:CA:50:D2:1F:93:EA:8A:5C:48:42:
		E7:D5:B3:F7:7C:15:95:49:B3:13:E6:89:D6:E9:44:C3:6D:BF:AF:CF:
		6F:A2:72:18:2C:69:6E:60:AA:E6:1A:5E:B7:D2:AC:68:D6:4D:66:8B:
		06:2E:E3:F0:D1:C5:CF:9C:7C:69:FD:5E:3A:F0:64:CE:6C:CF:88:F1:
		62:AB:9B:B8:6D:B9:7A:87:84:7D:0A:4A:AF:CC:F3:E1:4D:15:C2:6A:
		43:98:8D:58:68:5A:36:5E:03:EF:0F:60:46:AC:57:C3
parm:           max_loop:Maximum number of loop devices
parm:           max_part:Maximum number of partitions per loop device (int)
parm:           hw_queue_depth:Queue depth for each hardware queue. Default: 128

Estos parámetros también se pueden acceder listando el contenido del dierctorio /sys/module/loop/parameters/.

sudo ls -l /sys/module/loop/parameters/
total 0
-r--r--r-- 1 root root 4096 oct 24 14:23 hw_queue_depth
-r--r--r-- 1 root root 4096 oct 24 14:23 max_loop
-r--r--r-- 1 root root 4096 oct 24 14:23 max_part

El parámetro max_loop del módulo loop define la cantidad de dispositivos de tipo loop que se pueden montar de forma simultánea en el equipo. En este caso, tiene un valor de 8.

sudo cat /sys/module/loop/parameters/max_loop
8

Para que se puedan montar, como máximo, 12 dispositivos de tipo loop, este parámetro debe tomar el valor 12. Para cambiar el valor de este parámetro y, además, hacerlo de forma persistente, se debe usar un fichero de configuración almacenado en el directorio /etc/modprobe.d. En él, se crea un fichero con el mismo nombre del módulo y la extensión .conf y que debe tener como contendio el nuevo valor del parámetro.

nano /etc/modprobe.d/loop.conf

options loop max_loop=12

Para que esta modificación sea efectiva, se debe actualizar el initramfs y reiniciar el equipo.

sudo update-initramfs -u
sudo reboot

Tras reiniciar el contenido del fichero en el que se almacena la información de este parámtro se ha actualizado.

sudo cat /sys/module/loop/parameters/max_loop
12

Ejercicios de modificación de parámetros del kernel

Deshabilita apparmor en el arranque

AppArmor es un servicio que limita la cantidad de recursos a los que puede tener acceso un determinado programa. Esta limitación se establece a través de perfiles que se cargan en el kernel

Como otros muchos servicios en Debian, AppArmor se puede gestionar a través del comando systemctl. Así, para deshabilitar apparmor en el arranque se puede ejecutar el siguiente comando:

❯ sudo systemctl disable apparmor
Synchronizing state of apparmor.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install disable apparmor
Removed "/etc/systemd/system/sysinit.target.wants/apparmor.service".

Deshabilita si es posible el Kernel Mode Setting (KSM) de la tarjeta gráfica

KSM (Kernel Samepage Merging) es una característica de ahorro de memoia habilitada con el parámetro CONFIG_KSM=y del kernel incluida desde el kernel 2.6.32. Esta característica, usada por KVM, permite a varias máquinas virtuales compartir páginas de memoria idénticas. Estas páginas de memoria compartidas suelen ser librerías comunes a todas las máquinas u otros tipos de información idéntica frecuentemente usada por varias máquinas.

Algunos de los parámetros del kernel, incluidos alguno relacionados con KSM, se pueden modificar en el directorio /proc/sys pero estas modificaciones no son persistentes a reinicios.

Estos parámetros también se pueden gestionar usando el comando sysctl. Además, este comando cuenta con la peculiaridad de que permite modificar los valores del kernel durante la ejecución, es decir, en caliente. Los parámetros que puede gestiona el comando sysctl están listados en el directorio /proc/sys/.

En este caso, no es posible deshabilitar la característica KSM del kernel puesto que no está incluída en el kernel de este equipo. Al buscar los parámetros relacionados con KSM en el directorio /proc/sys no se muestra ninguno disponible.

❯ sudo find /proc/sys -iname '*ksm*'

Cambia provisionalmente la swappiness para que la swap de tu equipo se active cuando se use más de un 90% de la RAM

Swappiness también es una característica del kernel que se puede modificar. El valor de este parámetro se almacena en el directorio /proc/sys. Para encontrar dónde se alamacena este parámetro se puede hacer una búsqueda en este directorio.

❯ sudo find /proc/sys -iname '*swappiness*'
/proc/sys/vm/swappiness

Se puede conocer el valor que tiene este parámetro del kernel consultado el contenido de este fichero.

❯ cat /proc/sys/vm/swappiness
60

Con esta configuración, la swap del equipo se activa cuando se usa más del 60% de la RAM. Para modificar este valor se puede usar el comando sysctl.

❯ sudo sysctl vm.swappiness=90
vm.swappiness = 90

Tras ejecutar este comando, el valor de este parámetro del kernel se ha modificado en el fichero /proc/sys.

❯ cat /proc/sys/vm/swappiness
90

Pero esta configuración no es persistente al reinicio y sólo se aplica hasta el próximo apagado de la máquina.

Haz que el cambio de la swappiness sea permanente

Existen varias formas de hacer persistente al reinicio esta configuración. Una de las más comunes consiste en utilizar el fichero /etc/sysctl.conf. En este fichero se pueden configurar los valores de los parámetros del kernel que se cargan en cada reinicio del equipo.

En este caso, se puede añadir el nuevo valor de este parámetro a este fichero para hacer esta configuración permanente.

❯ echo "vm.swappiness=90" >> /etc/sysctl.conf

Tras ejecutar este comando, este parámetro del kernel toma su nuevo valor en el fichero de configuración de sysctl.

❯ cat /etc/sysctl.conf | grep 'swappiness'
vm.swappiness=90

Para que esta nueva configuración sea efectiva hay que volver a carga el fichero sysctl.conf.

❯ sudo sysctl -p
vm.swappiness = 90

La salida del comando muestra la lista de parámetros que se han modificado al cargar el nuevo fichero de configuración de parámetros del kernel. En este caso, sólo se muestar el nuevo valo de la swappiness.

Muestra el valor del bit de forward para IPv6

El bit de forward para las redes IPv6 se puede configurar para cada una de las interfaces de red de forma independiente o de forma general para todas ellas.

❯ find /proc/sys -iname 'forwarding' | grep ipv6
/proc/sys/net/ipv6/conf/all/forwarding
/proc/sys/net/ipv6/conf/br-intra/forwarding
/proc/sys/net/ipv6/conf/br-intra2/forwarding
/proc/sys/net/ipv6/conf/br0/forwarding
/proc/sys/net/ipv6/conf/default/forwarding
/proc/sys/net/ipv6/conf/enp2s0/forwarding
/proc/sys/net/ipv6/conf/lo/forwarding
/proc/sys/net/ipv6/conf/lxcbr0/forwarding
/proc/sys/net/ipv6/conf/veth0zlkeI/forwarding
/proc/sys/net/ipv6/conf/vethigCamC/forwarding
/proc/sys/net/ipv6/conf/vethj7iUWu/forwarding
/proc/sys/net/ipv6/conf/virbr0/forwarding
/proc/sys/net/ipv6/conf/virbr1/forwarding
/proc/sys/net/ipv6/conf/virbr2/forwarding
/proc/sys/net/ipv6/conf/virbr3/forwarding
/proc/sys/net/ipv6/conf/virbr4/forwarding
/proc/sys/net/ipv6/conf/virbr5/forwarding
/proc/sys/net/ipv6/conf/virbr6/forwarding
/proc/sys/net/ipv6/conf/vnet0/forwarding
/proc/sys/net/ipv6/conf/vnet1/forwarding
/proc/sys/net/ipv6/conf/vnet16/forwarding
/proc/sys/net/ipv6/conf/vnet17/forwarding
/proc/sys/net/ipv6/conf/vnet18/forwarding
/proc/sys/net/ipv6/conf/vnet19/forwarding
/proc/sys/net/ipv6/conf/vnet2/forwarding
/proc/sys/net/ipv6/conf/vnet20/forwarding
/proc/sys/net/ipv6/conf/vnet21/forwarding
/proc/sys/net/ipv6/conf/wlp4s0/forwarding

Para conocer si el bit de forward de cada una de estas interfaces está activado se puede consultar el valor de cada uno de estos ficheros, que será 0 si el bit no está activado o 1 si el bit está activado. En este caso, por ejemplo, el bit de forward para las interfaces IPv6 no está activado.

❯ cat $(find /proc/sys -iname 'forwarding' | grep ipv6)
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0

Deshabilita completamente las Magic Sysrq en el arranque y vuelve a habilitarlas después de reiniciar

Las Magic Sysrq es una combinación de teclas “mágica” a las que el kernel responde independientemente de lo que esté haciendo siempre y cuando no esté bloqueado. Esta combinación de teclas se activa a través del parámetro del kernel CONFIG_MAGIC_SYSRQ. El fichero /proc/sys/kernel/sysrq contiene el valor de este parámetro.

En este fichero se puede configura uno de los siguientes valores:

  • 0 = disable sysrq completely
  • 1 = enable all functions of sysrq
  • 2 = 0x2 - enable control of console logging level
  • 4 = 0x4 - enable control of keyboard (SAK, unraw)
  • 8 = 0x8 - enable debugging dumps of processes etc.
  • 16 = 0x10 - enable sync command
  • 32 = 0x20 - enable remount read-only
  • 64 = 0x40 - enable signalling of processes (term, kill, oom-kill)
  • 128 = 0x80 - allow reboot/poweroff
  • 256 = 0x100 - allow nicing of all RT tasks
❯ cat /proc/sys/kernel/sysrq
438

Actualmente, el valor de este parámtro en el kernel es 438. Es decir, esta combinación de teclas está configurada de manera que permite las características habilitadas por los valores 256, 128, 32, 16, 4 y 2.

Para deshabilitar las Magic Sysrq se puede cambiar el valor de este fichero a 0. Sin embargo, para que esta configuración sea persistente a los reinicios de la máquina, este parámetro se debe espcifica en el fichero /etc/sysctl.conf.

En el fichero /etc/sysctl.conf está especificado el mismo valor que en el fichero /proc/sys/kernel/sysrq aunque esta líea está comentada.

❯ sudo cat /etc/sysctl.conf | grep sysrq
# 0=disable, 1=enable all, >1 bitmask of sysrq functions
# See https://www.kernel.org/doc/html/latest/admin-guide/sysrq.html
#kernel.sysrq=438

Para deshabilitar esta característica del kernel se puede editar este fichero, descomentar esta línea y sustituir el valor 438 por 0.

❯ sudo cat /etc/sysctl.conf | grep sysrq
# 0=disable, 1=enable all, >1 bitmask of sysrq functions
# See https://www.kernel.org/doc/html/latest/admin-guide/sysrq.html
kernel.sysrq=0

Para que esta modificación sea efectiva, hay que cargar la nueva configuración del fichero.

❯ sudo sysctl -p
kernel.sysrq = 0
vm.swappiness = 90

Tras reiniciar el equipo se puede devolver la configuración al valor por defecto en el fichero de configuración.

❯ sudo cat /etc/sysctl.conf | grep sysrq
# 0=disable, 1=enable all, >1 bitmask of sysrq functions
# See https://www.kernel.org/doc/html/latest/admin-guide/sysrq.html
kernel.sysrq=438

❯ sudo sysctl -p
kernel.sysrq = 438
vm.swappiness = 90

❯ cat /proc/sys/kernel/sysrq
438
comments powered by Disqus

Relacionados

Comandos para la programación de tareas

La programación de tareas es una característica muy útil en el ámbito de la administración de sistemas informáticos, especialmente al programar scripts. En este post se repasa brevemente la información más relevante sobre los principales comandos que se pueden usar con esta finalidad.

Leer

Trabajo con el kernel de Linux

En esta entrada se aborda la actualización del kernel de Linux y su instalación desde el código fuente.

Leer

Configuración de switches en GNS3

En este post se muestran varios ejemplos de configuración de switches gestionables en el simulador GNS3. A los dispositivos se les aplican configuraciones como la creación de VLAN, la configuración del port bonding entre switches o el uso del port mirroring para monitorizar el tráfico de la red.

Leer