gpt4 book ai didi

linux - 有没有办法使某个脚本的 SIGSTOP 无效?

转载 作者:行者123 更新时间:2023-12-03 10:01:25 25 4
gpt4 key购买 nike

我创建了一个脚本,我希望它对 SIGSTOP 几乎“免疫”。
我了解 SIGKILL 和 SIGSTOP 都不能被捕获或忽略。
我知道 Linux 的 init 系统无法接收到“致命”信号,因为它的信号结构标志上有 SIGNAL_UNKILLABLE 标志(尽管该句子的后半部分大部分时间都在我脑海中浮现)。
我愿意编辑我的内核以授予此脚本豁免权,唯一的问题是我不知道如何。
所以,我的问题是,有没有办法使某个脚本/进程的 SIGSTOP 无效?

由于我的脚本的服务文件中的 Restart 参数(使用 systemd),我能够处理 SIGKILL,虽然我已经滚动浏览手册,为暂停的进程寻找类似的东西,但我还没有找到任何东西。

对于 SIGSTOP 导致的进程暂停,是否有类似于 Restart=always 的内容?

我宁愿不必经历改变内核或与内核相关的过程,但如果这是我唯一的方法。

谢谢。

最佳答案

好的,所以我能想到的最好的解决方案是 SELinux。

SELinux 是由 NSA 创建的内核附加组件,后来向公众发布。它通常用于 Linux 系统,默认情况下在 Android 设备上提供。 SELinux 允许创建“上下文”。上下文是提供给文件和进程的附加标签,允许分割职责和权限。

这如何解决您的问题?好吧,您可以限制您的用户进程(甚至是 root 用户)的 SELinux 权限,这样您甚至根本不允许向其他进程发出信号。实际上,您可以阻止与它的任何交互。如果您愿意,您甚至可以阻止自己关闭 SELinux(尽管从操作的角度来看,最好不要关闭它)。在某种程度上,这可能是您最接近不可破解范围的解决方案。话虽如此,为此目的的 SELinux 设置和配置并不完全是在公园里散步。文档是有限的(但存在),特定于发行版,在某些情况下甚至是深奥的。我自己对 SELinux 有一些经验。

编辑:
做一些快速的谷歌搜索,似乎可以在 Arch 上安装 SELinux,但与 Arch 上的大多数东西一样,它需要一些努力 - 超过了 StackOverflow 注释 block 中的内容。但是,一旦安装了 SELinux,我将在这里简要描述您的目标:

  • 确定您当前所处的上下文。使用“id”命令应该提供此上下文。
  • 使用 context process transition这样当您执行脚本时,该脚本就会在新的上下文中运行。您可能需要为您的脚本运行创建一个新的上下文。
  • 创建 sepolicy 规则,允许该脚本根据需要与您的进程交互。也许这包括在不同的上下文中杀死其他进程的能力,或者使用嗅探从 tcp 端口读取等等等等。你可以使用 audit2allow程序来帮助您创建这些规则。

  • 默认情况下,SELinux 拒绝任何它没有明确允许的事情。您现在的目标是确保允许您在系统上执行的所有操作,并添加策略规则以允许所有这些操作。查看 SELinux 审计日志是查看 SELinux 所提示的所有内容的好方法 - 您的工作是完成所有这些审计失败并将其转换为“允许”规则。

    完成所有这些后,只需确保不要“允许”您的进程/shell 开始的任何上下文都能够终止或发出脚本运行的上下文,您应该完成。现在尝试 SIGSTOP 或 SIGKILL 应该会生成“权限被拒绝错误”。

    关于linux - 有没有办法使某个脚本的 SIGSTOP 无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59852298/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com