添加非 root 用户通常不可用的“有用”系统调用
Posted
技术标签:
【中文标题】添加非 root 用户通常不可用的“有用”系统调用【英文标题】:Adding a "useful" syscall not normally available to a non-root user 【发布时间】:2011-05-01 15:06:40 【问题描述】:我已经实现了一个功能有限的简单 Hello World 系统调用——它只是从用户模式转换到内核模式,打印与内核消息一起记录的消息,然后转换回用户模式。
获得额外积分的下一步是添加一个有用的(新)系统调用,该系统调用通常对非 root 用户可用。
系统调用可以像我们喜欢的那样简单,但我正在努力想出任何想法......有人可以指出我正确的方向或可以轻松实现的东西吗? (我们得到的提示是使用您的新系统调用进行调试!)
【问题讨论】:
【参考方案1】:内核结构中有大量关于进程的信息:页面位置、内存统计信息、I/O 统计信息和文件句柄信息、CPU 调度信息等。虽然其中大部分可能通过诸如此类的方式提供给用户proc
文件系统,以编程方式获取该信息可能需要解析 proc
输出等。提供一种获取有关进程的此类信息的方法(可能暂时不太关注可能出现的安全问题)可能有用。
【讨论】:
【参考方案2】:也许是一个新的调用,专门从受信任的 NTP 服务器更新系统日期和时间? 我相信普通用户自己无法做到这一点。
以某种方式更改网络设置?释放/更新 DHCP 租约,或实施简单的网络位置,这些位置是存储在根可写配置文件中的预定义批次设置。
【讨论】:
-1 这些东西都不是特别适合内核空间。【参考方案3】:用户通常不能将自己拥有的文件的所有权赠与其他用户(当然,这样做是有充分理由的!)。你可以实现一个系统调用来做到这一点。不要忘记清除 setuid 位!
【讨论】:
【参考方案4】:最简单的方法 - 调试 - 将创建一个系统调用,让您可以直接访问内核的“printk”调用!
【讨论】:
【参考方案5】:将当前进程的 uid 设置为 0 怎么样,本质上是一个“后门”系统调用,它为调用它的任何用户提供 root 访问权限?
【讨论】:
以上是关于添加非 root 用户通常不可用的“有用”系统调用的主要内容,如果未能解决你的问题,请参考以下文章