标签: kernel

Linux 权限 UID 0 与 Ring 0

我正在为计算机安全考试而学习,我正在努力理解以下示例问题。

'解释在 x86 上在 ring 0 中运行和在 Linux 中作为 UID 0 运行之间的区别。举一个例子,说明每个人都能实现但另一个不能。'

我目前的理解是 x86 上的 ring 0 是最高特权的操作系统级别,内核代码在 ring 0 中运行。 UID 0 是基本上可以运行任何东西的 linux 超级用户。以我目前对这些概念的理解,我不明白如何回答这个问题。

请注意,这不是作业问题,也不是我要评分的问题,它只是学习材料。

linux kernel x86

4
推荐指数
1
解决办法
1922
查看次数

VMware 内核模块:找不到兼容版本的 gcc

运行 VMware 内核模块更新程序时,我收到以下消息:

A compatible version of gcc was not found.

如何设置 GCC 来编译 VMware 内核模块?

在此处输入图片说明

在此处输入图片说明

kernel virtual-machine gcc vmware

4
推荐指数
1
解决办法
3万
查看次数

在 gdb 中经过的时间

有没有办法测量在 下运行程序所用的时间gdb

看看这个:

<------------bp---------------------------------->
Run Code Online (Sandbox Code Playgroud)

假设我们正在调试一个文件,并在某个随机位置设置了一个断点。现在gdb我们执行一些操作,然后我们使用gdb命令行 ( run)让程序继续执行。

我的问题在这里。我想测量从bp到程序成功结束或发生某些错误所用的时间。

我的建议是使用.gdbinit文件,在该文件中,我们调用一些 C 函数来在run命令之后启动计时器,并且在执行结束时我们还调用了gettime()C fun。

所以,我的伪代码有点像这样(.gdbinit文件):

break *0x8048452 (random place)
//start time
run
//get time
Run Code Online (Sandbox Code Playgroud)

linux kernel gdb

4
推荐指数
1
解决办法
3514
查看次数

猫:写错误:无效的参数

使用写入自定义字符设备

猫 123 > /dev/chardev

猫:写错误:无效的参数

我已将权限更改为 666,甚至使用 sudo 进行了尝试。结果还是一样。也以类似的方式尝试回声

我使用 Arch linux 4.8。

编辑:驱动程序的代码

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/fs.h>
#include <asm/uaccess.h>


//Prototypes
static int __init init(void);
static void __exit cleanup(void);
static int device_open(struct inode *,struct file *);
static int device_release(struct inode *, struct file *);
static ssize_t device_read(struct file *, char *, size_t, loff_t *);
static ssize_t device_write(struct file *, const char *, size_t, loff_t *);

#define SUCCESS 0
#define DEVICE_NAME "chardev" /* Dev name as it …
Run Code Online (Sandbox Code Playgroud)

kernel devices files cat

4
推荐指数
1
解决办法
1万
查看次数

我可以从 vmlinuz 文件中获取 .config 文件吗?

我正在使用带有自定义内核的 Arch Linux 存储为/boot/vmlinuz-linux1. 我想要的某些功能在其中不起作用,但也有一个/boot/vmlinuz-linux内核可以使这些功能起作用。如何.config从第二个vmlinuz文件中检索内核配置文件,以便在文本编辑器中将其与第一个内核的配置进行比较?

kernel arch-linux configuration

4
推荐指数
1
解决办法
2434
查看次数

内核如何寻址交换分区\文件上的交换内存页?

交换分区不包含结构化文件系统。内核不需要它,因为它在标记为交换区的分区上存储了内存页。由于交换区中可能有多个内存页面,当进程请求将其页面加载到内存中时,内核如何定位每个页面。让我们解释更多,查看 Devuan OS 中交换分区的标题:

#define SWAP_UUID_LENGTH 16
#define SWAP_LABEL_LENGTH 16
struct swap_header_v1_2 {
    char          bootbits[1024];    /* Space for disklabel etc. */
    unsigned int  version;
    unsigned int  last_page;
    unsigned int  nr_badpages;
    unsigned char uuid[SWAP_UUID_LENGTH];
    char          volume_name[SWAP_LABEL_LENGTH];
    unsigned int  padding[117];
    unsigned int  badpages[1];
};
Run Code Online (Sandbox Code Playgroud)

因此,当mkswap对分区执行命令时,这就是放置在该分区上的内容,即交换标头。

现在,让我们假设一个场景,进程 A 的内存页面被交换,因此交换区域中有一个内存页面。当然,交换区中可能有很多内存页。现在,进程 A 需要访问被交换的内存页。进程 A 告诉内核,我可以交换内存页吗?内核说:当然是我亲爱的朋友。内核会在交换分区中寻找进程 A 的内存页。由于交换分区不是一个复杂的结构(不是文件系统),内核如何知道如何在交换分区中定位进程 A 的特定内存页面。

也许内核在某处存储了那些交换页面的扇区地址,所以当一个进程请求它的内存页面时,内核知道在交换分区中查找的位置,从分区读取内存页面并将其加载到内存中。

kernel swap virtual-memory linux-kernel memory-management

4
推荐指数
1
解决办法
1589
查看次数

GDB 中的硬件断点 +QEMU 缺少 start_kernel

我正在尝试使用 GDB 调试在 QEMU 上运行的内核。

内核已使用以下选项编译:

CONFIG_DEBUG_INFO=y
CONFIG_GDB_SCRIPTS=y
Run Code Online (Sandbox Code Playgroud)

我使用以下命令在 qemu 中启动内核:

qemu-system-x86_64 -s -S -kernel arch/x86_64/boot/bzImage
Run Code Online (Sandbox Code Playgroud)

在一个单独的终端中,我从相同的路径启动 GDB 并按顺序发出这些命令:

 gdb ./vmlinux
(gdb) target remote localhost:1234
(gdb) hbreak start_kernel
(gdb) c
Run Code Online (Sandbox Code Playgroud)

我没有提供 rootfs,因为到目前为止我对完整的工作系统不感兴趣,只对内核感兴趣。我还尝试了 hbreak/break 的组合。

内核只是启动并达到内核恐慌,因为无法找到 rootfs……预期。我希望它在 start_kernel 处停止,然后逐步执行代码。

观察:如果我设置一个立即断点,它会工作并停止,但不会在 start_kernel / startup_64 / main

qemu 是否有可能没有调用所有这些函数,或者它是否以某种方式被屏蔽了?

Kernel: 4.13.4 
GDB: GNU gdb (Ubuntu 7.7.1-0ubuntu5~14.04.3) 7.7.1
GCC: gcc (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4    
system: ubuntu 14.04 LTS
Run Code Online (Sandbox Code Playgroud)

注意:这个完全相同的过程适用于内核 3.2.93,但不适用于 4.13.4,所以我想需要更多的配置。我无法在网上找到为内核 4.0 及更高版本启用此调试程序的资源,因此到目前为止我正在继续使用 3.2,欢迎任何和所有输入。

kernel gdb qemu

4
推荐指数
1
解决办法
2794
查看次数

为什么即使 vm.swappiness = 1 RHEL 也使用交换?

RHEL 7.2 内存使用,每个free -m

              total        used        free      shared  buff/cache   available
Mem:         386564       77941       57186         687      251435      306557
Swap:         13383        2936       16381
Run Code Online (Sandbox Code Playgroud)

我们看到使用的swap是2936M

所以我们想通过以下方式将其减少到 min

echo 1 > /proc/sys/vm/swappiness

sysctl -w vm.swappiness=1

echo "vm.swappiness = 1" >> /etc/sysctl.conf
Run Code Online (Sandbox Code Playgroud)

10 分钟后我们再次检查,但操作系统仍然使用交换

free -m

              total        used        free      shared  buff/cache   available
Mem:         386564       77941       57186         687      251435      306557
Swap:         13389        2930       16381
Run Code Online (Sandbox Code Playgroud)

为什么我们没有采取的行动会立即产生影响?

我们是否需要重新启动操作系统,以便让交换曾经是 0 ?

例子

我们运行vmstat

 vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free …
Run Code Online (Sandbox Code Playgroud)

rhel kernel memory swap

4
推荐指数
2
解决办法
4046
查看次数

在嵌入式 Linux 上过滤/限制 ARP 数据包的最佳方法

我在某些网络设备上有一个嵌入式 Linux。因为这个设备非常重要,我必须进行许多网络测试(我有一个单独的设备)。这些测试包括用 ARP 数据包(正常数据包、畸形数据包、不同大小的数据包等)淹没我的设备

我在互联网上阅读了不同的 xx-tables:ebtables、arptables、iptables、nftables 等。我肯定在我的设备上使用 iptables。

  1. 什么 xx 表最适合过滤(限制,而不是丢弃)ARP 数据包?
  2. 我听说了一些关于 /proc/config.gz 文件的信息,它假设包含内核中包含的信息。我检查了未包含的 CONFIG_IP_NF_ARPFILTER。所以 - 为了使用 arptables - 我应该在启用 CONFIG_IP_NF_ARPFILTER 选项的情况下编译内核,对吗?例如 ebtables 也是如此?
  3. 当 iptables 在 OSI 级别 3 上运行时,我读到 ebtables 和 arptables 可在 OSI 级别 2 上运行。所以我认为在级别 2 上过滤任何内容都比在级别 3 上更好(性能?),对吗?
  4. 我在这个网站的某个地方找到了使用 ebtables 过滤 ARP 数据包的答案。ebtables 比 arptables 有什么优势吗?
  5. 额外一个。互联网上了解限制/过滤不同类型数据包和协议的网络流量的最佳来源是什么?

firewall kernel iptables arp netfilter

4
推荐指数
1
解决办法
4687
查看次数

Linux定时器中断

我有两个关于 Linux 内核的问题。具体来说,有没有人确切地知道 Linux 在定时器中断中做了什么?是否有一些关于此的文档?在构建内核时更改 CONFIG_HZ 设置会产生什么影响?

提前致谢!

linux scheduling kernel interrupt

4
推荐指数
1
解决办法
3283
查看次数