From 08633bcd04260ab538548efc698e8a992b12678f Mon Sep 17 00:00:00 2001 From: Kien Nguyen Tuan Date: Thu, 5 Dec 2024 10:36:54 +0700 Subject: [PATCH] add post --- content/posts/linux-sysrq.md | 243 +++++++++++++++++++++++++++++++++++ 1 file changed, 243 insertions(+) create mode 100644 content/posts/linux-sysrq.md diff --git a/content/posts/linux-sysrq.md b/content/posts/linux-sysrq.md new file mode 100644 index 0000000..94d3993 --- /dev/null +++ b/content/posts/linux-sysrq.md @@ -0,0 +1,243 @@ +--- +title: "Linux Magic System Request Key Hacks" +date: "2024-12-05T09:44:34+07:00" +tags: ["linux", "tips", "tech"] +comments: true +toc: true +draft: false +--- + +Source: + +## Giới thiệu + +Trong quá trình vận hành, bạn đã bao giờ gặp tình trạng hệ thống Linux của mình bị "treo" hoặc không phản hồi? Khi đó, hãy sử dụng **Magic System Request Key (SysRq)** để được cứu rỗi. Vậy nó là gì và có thể làm gì? + +SysRq là một tính năng của Linux, cho phép người dùng gửi "tín hiệu cầu cứu" trực tiếp đến kernel của hệ điều hành. + +{{< figure class="figure" caption="sysrq - from trufflesecurity.com" src="https://framerusercontent.com/images/wjLSwytVCtdnGhq2xK8m6qSo4.png" >}} + +## Cấu hình SysRq + +Để cấu hình SysRq, bạn có thể sử dụng command sau: + +```shell +echo "number" >/proc/sys/kernel/sysrq +``` + +Giá trị của "number" có thể nằm trong các trường hợp sau: + +```shell + 0 - disable sysrq completely + 1 - enable all functions of sysrq + >1 – bitmask to allow specific sysrq functions + 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 +``` + +Kiểm tra giá trị hiện tại của sysrq: + +```shell +root@vm1:/home/kien# cat /proc/sys/kernel/sysrq +176 +# 176 không match với giá trị nào, well, thực ra 176 ở đây là 16+32+128 = 176 +# +# 16 = 0x10 - enable sync command +# 32 = 0x20 - enable remount read-only +# 128 = 0x80 - allow reboot/poweroff + +# Để test, bật hết lên cho đơn giản +root@vm1:/home/kien# root@vm1:/home/kien# echo 1 > /proc/sys/kernel/sysrq +``` + +## Cách sử dụng + +Bạn có thể sử dụng tính năng bằng cách ấn tổ hợp phím (tùy thuộc hệ điều hành, đối với x86 là `ALT-SysRq-`, bàn phím của bạn thường sẽ có SysRq keyboard, để ý nhé) hoặc echo ký tự commands vào `/proc/sysrq-trigger`. + +```shell +echo > /proc/sysrq-trigger +``` + +{{< details title="Danh sách command key (ấn để show all)" open=false >}} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Command

Function

b

Will immediately reboot the system without syncing or unmounting +your disks.

c

Will perform a system crash and a crashdump will be taken +if configured.

d

Shows all locks that are held.

e

Send a SIGTERM to all processes, except for init.

f

Will call the oom killer to kill a memory hog process, but do not +panic if nothing can be killed.

g

Used by kgdb (kernel debugger)

h

Will display help (actually any other key than those listed +here will display help. but h is easy to remember :-)

i

Send a SIGKILL to all processes, except for init.

j

Forcibly “Just thaw it” - filesystems frozen by the FIFREEZE ioctl.

k

Secure Access Key (SAK) Kills all programs on the current virtual +console. NOTE: See important comments below in SAK section.

l

Shows a stack backtrace for all active CPUs.

m

Will dump current memory info to your console.

n

Used to make RT tasks nice-able

o

Will shut your system off (if configured and supported).

p

Will dump the current registers and flags to your console.

q

Will dump per CPU lists of all armed hrtimers (but NOT regular +timer_list timers) and detailed information about all +clockevent devices.

r

Turns off keyboard raw mode and sets it to XLATE.

s

Will attempt to sync all mounted filesystems.

t

Will dump a list of current tasks and their information to your +console.

u

Will attempt to remount all mounted filesystems read-only.

v

Forcefully restores framebuffer console

v

Causes ETM buffer dump [ARM-specific]

w

Dumps tasks that are in uninterruptible (blocked) state.

x

Used by xmon interface on ppc/powerpc platforms. +Show global PMU Registers on sparc64. +Dump all TLB entries on MIPS.

y

Show global CPU Registers [SPARC-64 specific]

z

Dump the ftrace buffer

0-9

Sets the console log level, controlling which kernel messages +will be printed to your console. (0, for example would make +it so that only emergency messages like PANICs or OOPSes would +make it to your console.)

R

Replay the kernel log messages on consoles.

+{{}} + +## Một số command keys hữu ích + +> Để dễ hình dung, ví dụ dưới đây sẽ sử dụng phương án echo ký tự vào /proc/sysrq-trigger + +### Poweroff + +```shell +root@vm1:/home/kien# echo o > /proc/sysrq-trigger +``` + +### Reboot + +```shell +root@vm1:/home/kien# echo b > /proc/sysrq-trigger +``` + +### Crash + +Trigger crashdump thủ công nếu hệ thống bị treo. Đây cũng là một cách hay để giả lập kernel crashdump. + +```shell +root@vm1:/home/kien# echo c > /proc/sysrq-trigger +``` + +### Đồng bộ filesystems + +```shell +root@vm1:/home/kien# echo s > /proc/sysrq-trigger +``` + +### Remount filesystem read-only + +```shell +root@vm1:/home/kien# echo u > /proc/sysrq-trigger +root@vm1:/home/kien# touch abc +touch: cannot touch 'abc': Read-only file system +``` + +### Kill tất cả processes trừ tiến trình init + +Command key này đặc biệt hữu ích nếu bạn có tiến trình không thể kill, đặc biệt nếu tiến trình đó liên tục spawning ra các tiến trình khác. + +```shell +# Linux gửi SIGTERM đến tất cả các processes, trừ init +root@vm1:/home/kien# echo e > /proc/sysrq-trigger + +# Linux gửi SIGKILL đến tất cả các processes, trừ init +root@vm1:/home/kien# echo i > /proc/sysrq-trigger +``` + +### Gọi OOM Killer + +OOM Killer được gọi và hoàn thành nhiệm vụ của nó - kill tiến trình gây high memory usage. + +```shell +root@vm1:/home/kien# echo f > /proc/sysrq-trigger +# Check kern.log để kiểm tra log +3585:Dec 5 03:31:40 vm1 kernel: [ 195.899186] sysrq: Manual OOM execution +3586:Dec 5 03:31:40 vm1 kernel: [ 195.901176] kworker/0:1 invoked oom-killer: gfp_mask=0xcc0(GFP_KERNEL), order=-1, oom_score_adj=0 +``` + +### Xem danh sách blocked state processes + +```shell +root@vm1:/home/kien# echo w > /proc/sysrq-trigger +# Check kern.log để kiểm tra +Dec 5 03:33:02 vm1 kernel: [ 277.781446] sysrq: Show Blocked State +```