SELinux:给文件单独打标签

需求:针对某个设备文件,阻止除特定进程以外的进程写入。 拿 /dev/tty20 做试验。实验环境:Fedora 38,x64 虚拟机。 给设备打标签,阻止普通写 创建 .te 策略文件之最最基础版: 1policy_module(tty20, 1.0.0) 2 3type tty20_t; 构建并加载策略模块: 1make -f /usr/share/selinux/devel/Makefile 2semodule -i tty20.pp 这里参考了这篇问答 。 尝试变更 /dev/tty20 的标签: 1chcon -t tty20_t /dev/tty20 大概率会因为缺少必要的权限而报错。 查看最近 AVC 类型的审计日志: …

关于 SELinux 策略的点滴

具体规则的查询 关于 SELinux 策略,我们时常要去了解:关于系统中的一个操作,为什么 SELinux 会允许/拒绝;其背后具体的规则是怎样的。此时我们可以使用 sesearch 来查询策略中具体的规则: 1# 探究【主体 A】对【客体 B】是否有【类型 C】的【权限 D】: 2# sesearch -A -s A -t B -c C -p D 3sesearch -A -s kernel_t -t unconfined_t -p setsched 4sesearch -A -s kernel_t -t unconfined_t -c key -p view 在查出对应的规则后,可以配合 seinfo 进一步了解规则中主、客体的 …

Git Relevant Operations

Oh My Zsh’s git plugin responds slowly in big repo Add following lines into (local) .git/config or (global) ~/.gitconfig: link 1git config --add oh-my-zsh.hide-status 1 2git config --add oh-my-zsh.hide-dirty 1 Recover from shallow clone 1git fetch --unshallow https://stackoverflow.com/a/6802238 Shallow clone …

Linux 内核问题调试手段

源代码定位方法 我们经常需要根据内核错误日志,在源代码中比较精确地定位到发生错误的那一行。一般而言,我们通过错误发生的地址来定位对应的源代码:(链接 ) 1# 注意:这里的 vmlinux 需要带有调试信息 2addr2line -f -e vmlinux <asm_addr> 然而在内核错误日志中,调用栈常以形如 bdi_register+0xec/0x150 的形式1展示函数调用地址,而 addr2line 无法解读这样的格式。此时我们可以使用 GDB 来解析该地址: 1# In `gdb vmlinux`, compiled with CONFIG_DEBUG_INFO=y 2 3list …

Linux 内核问题调试手段——QEMU 专题

VM 启动后没有输出?莫慌~ 一般而言,在运行 qemu-system-xxx 启动虚拟机后,我们希望在主机的当前终端上看到内核的启动日志,并在虚拟机启动后用该终端直接操作虚拟机。然而有时,当前终端在运行了 qemu-system-xxx 后却毫无动静。此时,在确认内核可以正常启动的前提下,要去确认几件事情: 当前终端对 QEMU 虚拟机而言是什么设备; 当前内核使用的 /dev/console 指向了哪个设备。 先找到一个可用的虚拟机终端(比如通过 VNC 连接的方式),然后向 /dev/{console,tty{,S}{0,1,...}} 等物理终端设备文件逐个尝试输入一些内容,看看哪个文件能让主机的当前终端有输出1。确定了是哪 …