Linux
文章平均质量分 71
Linux
北观止
欢迎留言讨论,期待与你共同进步
展开
-
走进Linux内核之XFRM框架
笔者此前对Linux内核相关模块稍有研究,实现内核级通信加密、视频流加密等。下面开始上才艺,带你走进Linux内核之XFRM框架。原创 2021-09-21 14:26:40 · 3129 阅读 · 0 评论 -
走进Linux内核之Netfilter框架
笔者此前对Linux内核相关模块稍有研究,实现内核级通信加密、视频流加密等。话不多说直接上才艺,现在带你走进Linux内核之Netfilter框架。原创 2021-09-21 14:24:06 · 593 阅读 · 0 评论 -
OpenMCU&H323
请阅读下面两篇文章OpenMCU:先跑起来之Install FROM packagesH323plus的编译安装配置与使用:从头开始确认运行状态1.主机一号openmcu运行状态netstat -lntp[root@host ~]# netstat -lntpActive Internet connections (only servers)Proto Recv-Q Send-Q Local Address Foreign Address State.原创 2020-12-05 22:50:21 · 936 阅读 · 0 评论 -
OpenMCU:先跑起来之Install FROM packages
简介部署环境依赖安装编译源码问题解决访问页面原创 2020-11-22 00:25:44 · 501 阅读 · 0 评论 -
内核如何检测SOFT LOCKUP与HARD LOCKUP?
所谓lockup,是指某段内核代码占着CPU不放。Lockup严重的情况下会导致整个系统失去响应。转载 2021-07-16 19:37:28 · 649 阅读 · 0 评论 -
ubuntu:“NMI watchdog: BUG: soft lockup-CPU#0 stuck for 22s“
NMI watchdog: BUG: soft lockup - CPU#2 stuck for 22s![migration/2:18]原创 2021-07-16 19:32:27 · 7425 阅读 · 0 评论 -
Linux 云计算底层技术之一文读懂 Qemu 架构
Qemu 架构Qemu 是纯软件实现的虚拟化模拟器,几乎可以模拟任何硬件设备,我们最熟悉的就是能够模拟一台能够独立运行操作系统的虚拟机,虚拟机认为自己和硬件打交道,但其实是和 Qemu 模拟出来的硬件打交道,Qemu 将这些指令转译给真正的硬件。转载 2021-04-08 20:31:09 · 4281 阅读 · 0 评论 -
LAMP:Linux安装Apache、MySQL、PHP
LAMP手动安装原创 2021-04-02 21:20:03 · 179 阅读 · 0 评论 -
宝塔面板BT Panel弹窗强制绑定宝塔账号关闭解除教程
宝塔面板BT Panel弹窗强制绑定宝塔账号关闭解除教程/www/server/panel/data/bind.pl原创 2021-03-17 21:03:56 · 14859 阅读 · 3 评论 -
Shell脚本实现自动登录服务器
1.登录脚本login_server.sh#!/bin/bash# ReferenceLink:https://yq.aliyun.com/articles/516347#show all host infos of serverList.txtif [[ -f ./serverList.txt ]]then hostNum=`cat ./serverList.txt | wc -l`else echo "No .serverList.txt in ./ dir, please原创 2020-06-11 19:24:27 · 1518 阅读 · 0 评论 -
站长常用Shell脚本整理分享(全)
站长常用Shell脚本整理分享站长常用Shell脚本整理分享1-10站长常用Shell脚本整理分享11-20站长常用Shell脚本整理分享21-30站长常用Shell脚本整理分享31-40站长常用Shell脚本整理分享41-50站长常用Shell脚本整理分享51-59长期更新...原创 2020-06-11 19:25:21 · 303 阅读 · 0 评论 -
OpenMCU:先跑起来之docker
简介部署环境安装docker镜像openmcuopenmcu:V4.2.1dockerfile构建运行docker容器访问页面原创 2020-11-22 00:15:12 · 756 阅读 · 0 评论 -
Docker容器安装与基本配置之Centos
在centos中进行Docker容器安装与基本配置原创 2020-10-27 20:52:50 · 177 阅读 · 0 评论 -
Linux内核笔记009 - 中断、异常、陷阱、Bottom half、信号
1. 中断本质:保存当前执行现场+触发指令跳转 记得刚学习C语言时,只要找个包含if语句的程序,然后通过理解整个程序执行到这条语句时,发生了什么,自然就明白if语句的作用了。同样,为了理解"中断"的含义,我特别建议站在可以看见整个系统的角度,去看出现中断时,整个系统这个"大程序"是如何执行的。 时钟中断(硬件触发,对于软件是被动的)、异常(软件缺页、除0bug等情况无意触发)、陷阱(软件显式执行int指令触发)出现时,都会穿过一道"门",跳转到内核在"门"中设置的指令地址处执行,所以它们...转载 2020-10-13 21:38:24 · 1054 阅读 · 0 评论 -
linux-5.6.6 内核引导
本文详细讲解linux内核的加载过程,参考linux-insiders,并结合linux-5.6.6代码对原文的部分老旧内容做修改引导1.按下电源开关后, CPU设置寄存器为预定值,程序在实模式下运行,程序首先执行0xfffffff0(映射至ROM)处内容,此处为复位向量,直接跳转至BIOS。2.BIOS初始化,检查硬件,寻找可引导设备,跳转至引导扇区代码(boot.img)寻找可引导设备方式: 定位MBR分区, 引导扇区存储在第一个扇区(512字节)的头446字节处。引导扇区以0x5.转载 2020-12-23 20:50:51 · 595 阅读 · 0 评论 -
linux 内核提权总结(demo+exp分析) -- 任意读写(四)
hijack_modprobe_path篇原理同hijack_prctl, 当用户执行错误格式的elf文件时内核调用call_usermodehelper(char *modprobe_path ...) 修改modprobe后,即可实现root权限任意命令执行 攻击流程 (内核任意读写漏洞)内核修改全局变量 modprobe_path为目标指令 写入错误格式elf文件,并手动执行,触发 原文地址一. 利用步骤1. 定位modprobe_path(开启kaslr转载 2020-12-23 20:52:08 · 296 阅读 · 0 评论 -
linux 内核提权总结(demo+exp分析) -- 任意读写(三)
hijack_prctl篇 prctl函数: 用户态函数,可用于定制进程参数,非常适合和内核进行交互 用户态执行prctl函数后触发prctl系统调用 内核接收参数后执行security_task_prctl security_task_prctl执行hook.task_prctl poweroff_work_func函数: 内核函数,执行 run_cmd(poweroff_cmd),即root权限执行poweroff_cmd 攻击流程: 劫持hook.task_转载 2020-12-23 20:51:58 · 301 阅读 · 0 评论 -
linux 内核提权总结(demo+exp分析) -- 任意读写(二)
hijack_vdso篇 vdso: 内核实现的一个动态库,存在于内核,然后映射到用户态空间,可由用户态直接调用 内核中的vdso如果被修改,那么用户态空间的vdso也会同步被修改 攻击流程 (内核任意代码执行漏洞)内核调用set_memory_rw 函数修改内核vdso页面属性,使得用户态可以直接修改vdso,劫持vdso为shellcode,触发条件同1 (内核任意读写漏洞)内核修改内核vdso数据,写入shellcode,使得用户态vdso中函数被劫持,当高权限进程调用v转载 2020-12-23 20:51:48 · 275 阅读 · 0 评论 -
linux 内核提权总结(demo+exp分析) -- 任意读写(一)
cred篇每个线程在内核中都对应一个线程结构块thread_info thread_info中存在task_struct类型结构体 struct task_struct中存在cred结构体用来保存线程权限 攻击流程 定位某进程的cred结构体 将cred结构提结构体的uid~fsgid全部覆写为0(前28字节) 原文地址一. 利用步骤1. 定位cred结构体 task_struct中存在char comm[TASK_COMM_LEN] co.转载 2020-12-23 20:51:38 · 440 阅读 · 0 评论 -
linux 内核提权总结(demo+exp分析) -- ROP(二)
ret2usr CR4篇 smep: smep是内核的一种保护措施, 使得内核不可执行用户态代码 内核通过CR4寄存器的第20位来控制smep, 第20位为0时,smep被关闭 攻击流程 提前在用户态代码中构造进程提权代码(get_root) ROP技术修改CR4第20位数据为0(关闭smep), 通常使用 mov cr4, 0x6f0 修改 rip 直接指向用户态提权代码,实现进程提权 原文地址一. 判断是否开启smep1.查看 boot.shqemu转载 2020-12-23 20:51:25 · 332 阅读 · 0 评论 -
linux 内核提权总结(demo+exp分析) -- ROP(一)
基础ROP篇(linux 5.0.21)内核提权与用户态攻击的区别攻击流程 用户态攻击: 执行 system("/bin/sh") 获得shell 内核提权: 内核执行 commit_creds(prepare_kernel_cred(0)) 使进程获得root权限 用户态进程执行system("/bin/sh") 获得root权限 shell 原文地址理解难点 内核rop链构造 用户态进程与内核之间的切换 一. 漏洞分析建议初学者先了解基础的驱动程序转载 2020-12-23 20:51:10 · 1572 阅读 · 0 评论 -
Linux内核笔记008 - 中断的概念及硬件支持
1. 概念了解 有时候,应用程序开发的经验,很容易使我们的视野,停留在单个进程中,反而阻碍理解。我的方法是,把整个系统看成一个"大程序",这个程序最开始只有内核部分,随着执行,它又动态加载了一些指令和数据,作为自身的"生长部分",也就是说,把"进程"理解为整个"大程序"的"生长部分"。这样理解的好处是,会让视野从单个进程中走出来,从而才能看得清整个系统的运行逻辑: ① 任何时刻,这个"大程序"只有一条指令在被CPU执行。 ② 系统启动阶段,从内核的代码开始执行,内核运行过程...转载 2020-10-13 21:38:13 · 1089 阅读 · 0 评论 -
Linux内核笔记007 - 内存管理的进一步封装
内存管理学习到现在这个阶段,虽然内容又长又抽象,但其实仅仅才是整个高楼大厦中埋在地里的那部分,包括: Linux内核笔记001、Linux内核笔记002,说明了Intel 80386 CPU为内存管理提供的硬件特性;Linux内核笔记004、Linux内核笔记005、Linux内核笔记006,说明了Linux内核按"页面"为单位,对各个进程的虚拟内存空间、对整个系统的物理内存空间和交换分区的基础管理。而实际应用场景,需要利用这些最基础的方式,封装更多的内存管理方式。 根据我个人的总结,实...转载 2020-10-13 21:38:02 · 381 阅读 · 0 评论 -
Linux内核笔记006 - 交换分区
1. 交换分区概念 一个cpu,同一时刻只能执行一条指令,执行某个进程时,其它进程一定是停止状态。那么,当cpu切换到进程B运行时,如果系统中已经没有空闲的物理内存页面了,内核就会选择一个其它进程占用的物理内存页面,将其内容备份到磁盘上,这样就可以先腾出来给当前正在运行的进程B使用了,这个过程叫做"页面换出",当切换到进程A运行时,再重新分配一个物理内存页面(如果也没有空闲物理内存页面,同样执行换出操作),并且从磁盘上恢复换出的内容,这个过程叫做"页面换入"。用于备份内存数据的磁盘空间,就是"交换..转载 2020-10-13 21:37:50 · 766 阅读 · 0 评论 -
Linux内核笔记005 - 越界访问内存,Linux内核处理过程
1. 几个重要的数据结构和函数内存管理本质 在Linux内核笔记004中,已经引出了"分配"的概念,它本质上就是在保护模式下,做两件事: ① 隔离同一进程已使用和未使用虚拟内存空间,以及整个系统的已使用和未使用物理内存空间 具体实现:记录已每个进程已使用的虚拟地址,和整个系统已使用的物理地址,分配时使用未使用的。 ② 隔离不同进程的用户空间 具体实现:为每个进程0-3G范围的虚拟地址,建立独立的映射,...转载 2020-10-13 21:37:39 · 1607 阅读 · 0 评论 -
Linux内核笔记004 - 从内存管理开始,认识Linux内核
1. 系统初始化 Linux内核笔记001、Linux内核笔记002、Linux内核笔记003,对应的是《Linux内核源代码情景分析》第一章内容,在进入第二章学习之前,本篇笔记先跳跃到第10.1节——系统初始化(第一阶段):实模式 内存是挥发性的存储介质,断电后,数据就没有了,相应的,开机时,是通过"烧"在不挥发存储介质上的初始引导程序(比如BIOS程序),将内核程序从磁盘引导区读入内存的。在内核被加载到内存后,指令就会从BIOS跳转到内核代码开始执行,这时CPU还是实模式状...转载 2020-10-13 21:37:27 · 373 阅读 · 0 评论 -
Linux内核笔记003 - Linux内核代码里面的C语言和汇编语言
1. Linux内核中的C语言 Linux内核是用GNU C编写,从而必须用gcc编译,另外gcc编译器在发展过程中,在不断的扩展和舍弃一些东西,所以就会出现一种情况:高版本gcc编译不了低版本内核、低版本gcc也编译不了高版本内核。所以在编译内核时,一定要使用跟内核版本差不多时期的gcc版本。带返回值的宏函数#include <stdio.h>#define FUN() ({ \ int ret = 100; \ printf("do somethi...转载 2020-10-13 21:37:11 · 801 阅读 · 0 评论 -
Linux内核笔记002 - i386 的页式内存管理机制
1. 虚拟地址只要不是实际内存的地址,都是虚拟地址,通常就是指逻辑地址,逻辑地址是指指令中的地址,比如写一个下面这样的程序#include <stdio.h> static char ch = 'A'; int main(){ printf("%p, %c\n", &ch, ch); return 0;}执行"gcc test.c -g -Wall",然后执行"objdump -S a.out",查看main()函数的反编译结果:int .转载 2020-10-13 21:36:42 · 282 阅读 · 0 评论 -
Linux内核笔记001 - Intel X86 CPU 系列的寻址方式
1. 段寄存器 上图是Intel X86系列的CPU,在Pentium之前的发展过程:4004:8位CPU 8086~80286:16位CPU,即逻辑运算单元(ALU)的位数为16,但地址总线为20位,另外80286开始支持保护模式,但只支持实模式到保护模式的单向切换 80386:32位CPU, ALU为32位,地址总线也设计成32位了 我有个自我认识,就是在学习的时候,比较喜欢钻牛角尖,比如我就为这些问题纠结过:8086为什么要把地址总线设计成20位? 地址总线...转载 2020-10-13 21:36:15 · 614 阅读 · 0 评论 -
shell脚本加密工具shc
shell脚本加密工具shc原创 2020-08-30 12:54:51 · 507 阅读 · 0 评论 -
Docker容器安装与基本配置之Ubuntu
在ubuntu中进行docker容器安装与基本配置原创 2020-08-13 18:32:35 · 430 阅读 · 0 评论 -
Xmanager远程访问Ubuntu1604LTS
Xmanager远程访问Ubuntu1604LTS简述:ubuntu1604:xmanager+xdmcp+lightdm+xubuntu(xfce)桌面环境附文1.安装gdm3与lightdm$ sudo apt install gdm -y会弹出窗口,选择lightdm就好。2.配置lightdm配置文件需要新建,lightdm.conf and gdm.schemas$ sudo nano /etc/lightdm/lightdm.conf粘贴以下内容:[SeatDefa原创 2020-08-13 18:19:43 · 481 阅读 · 0 评论 -
Centos7 Minimal安装常用工具包
1.虚拟机上传下载组件( 支持从windows直接拖拽文件,相当好用)yum -y install lrzszrz+文件名(上传)sz+文件名(下载)vim net-tools git2.gcc (nginx之类由c语言开发的,编译的时候需要用到)yum -y install gcc-c++3.PCRE (Perl库,包括 perl 兼容的正则表达式库)yum -y install pcre pcre-devel4.zlib (zlib库提供了很多种压缩和解压缩的方式)yum -y in原创 2020-08-13 18:19:58 · 1695 阅读 · 0 评论 -
Bash scripting
title: Bash scriptingcategory: CLIlayout: 2017/sheettags: [Featured]updated: 2019-10-02keywords:VariablesFunctionsInterpolationBrace expansionsLoopsConditional executionCommand substitution摘选自:https://github.com/rstacruz/cheatsheets项目的bash..转载 2020-10-11 18:52:14 · 468 阅读 · 0 评论 -
站长常用Shell脚本整理分享51-59
51、一键配置 VNC 远程桌面服务器(无密码版本)#!/bin/bash# 一键配置 VNC 远程桌面服务器(无密码版本) # 脚本配置的 VNC 服务器,客户端无需密码即可连接# 客户端仅有查看远程桌面的权限,没有鼠标和键盘的操作权限 rpm --quiet -q tigervnc‐serverif [ $? -ne 0 ];then yum -y tigervnc‐serverfix0vncserver AcceptKeyEvents=0 AlwaysShared=1 \转载 2020-10-11 18:48:04 · 385 阅读 · 0 评论 -
站长常用Shell脚本整理分享41-50
41、统计 Linux 进程相关数量信息#!/bin/bash# 统计 Linux 进程相关数量信息 running=0sleeping=0stoped=0zombie=0# 在 proc 目录下所有以数字开始的都是当前计算机正在运行的进程的进程 PID# 每个 PID 编号的目录下记录有该进程相关的信息for pid in /proc/[1‐9]*do procs=$[procs+1] stat=$(awk '{print $3}' $pid/stat)# 每个 pid 目录转载 2020-10-11 18:47:23 · 288 阅读 · 0 评论 -
站长常用Shell脚本整理分享31-40
31、显示当前计算机中所有账户的用户名称 #!/bin/bash # 显示当前计算机中所有账户的用户名称 # 下面使用3种不同的方式列出计算机中所有账户的用户名# 指定以:为分隔符,打印/etc/passwd 文件的第 1 列awk -F: '{print $1}' /etc/passwd # 指定以:为分隔符,打印/etc/passwd 文件的第 1 列cut -d: -f1 /etc/passwd # 使用 sed 的替换功能,将/etc/passwd 文件中:后面的所有内容替换转载 2020-10-11 18:47:00 · 282 阅读 · 0 评论 -
站长常用Shell脚本整理分享21-30
21、检查特定的软件包是否已经安装#!/bin/bash# 检查特定的软件包是否已经安装 if [ $# -eq 0 ];then echo "你需要制定一个软件包名称作为脚本参数" echo "用法:$0 软件包名称 ..."fi# $@提取所有的位置变量的值,相当于$*for package in "$@"do if rpm -q ${package} &>/dev/null ;then echo -e "${package}\033[32m 已经安装\03转载 2020-10-11 18:46:23 · 355 阅读 · 0 评论 -
站长常用Shell脚本整理分享11-20
11、编写 nginx 启动脚本#!/bin/bash# 编写 nginx 启动脚本 # 本脚本编写完成后,放置在/etc/init.d/目录下,就可以被 Linux 系统自动识别到该脚本# 如果本脚本名为/etc/init.d/nginx,则 service nginx start 就可以启动该服务# service nginx stop 就可以关闭服务# service nginx restart 可以重启服务# service nginx status 可以查看服务状态 progra转载 2020-10-11 18:45:16 · 256 阅读 · 0 评论 -
站长常用Shell脚本整理分享1-10
https://www.kancloud.cn/microcloud/btcn/15052731、编写hello world脚本#!/bin/bash# 编写hello world脚本echo "Hello World!"2、统计当前 Linux 系统有登录权限的账号数#!/bin/bash# 统计当前 Linux 系统中可以登录计算机的账户数量grep "bash$" /etc/passwd | wc -l3、批量修改扩展名脚本#!/bin/bash# 编写批量修改扩展名脚.转载 2020-10-11 18:44:42 · 418 阅读 · 0 评论