【问题标题】:Is there a way to nullify SIGSTOP for a certain script?有没有办法使某个脚本的 SIGSTOP 无效?
【发布时间】:2020-01-22 03:44:37
【问题描述】:

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

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

SIGSTOP导致进程挂起是否有类似Restart=always的东西?

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

谢谢。

【问题讨论】:

  • 这闻起来像XY problem。为什么需要消除这些信号?为什么/谁在发送这些信号?
  • @kaylum 我不想说,但这是为了帮助我戒掉色情习惯。
  • 嘿,蒂格,我真诚地感谢您坦率地说明您为什么想要解决这个问题。我还没有解决方案,但我正在努力解决。
  • @TeagueFoster 即使您将 root 密码提供给其他人,您仍然可以配置 sudo 以允许您运行一些管理命令,例如 apt 来安装软件包。也就是说,您可以将一些“安全”的命令列入白名单。
  • 嘿蒂格,至少有一个基本答案可以解决您提出的问题。但是,为了暂时脱离角色,我可能会建议解决您的根本问题的绝对最佳方法是找到可以让您负责的人。

标签: linux linux-kernel signals systemd


【解决方案1】:

好吧,我能想到的最佳解决方案是 SELinux。

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

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

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

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

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

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

【讨论】:

  • 我会试试 SELinux!如果您想尝试为我当前的系统提出解决方案(Arch [或者老实说,任何发行版会让您更容易]),我会傻瓜拒绝。所以,绝对!
  • 我查看了如何在 SELinux 中创建新上下文,但我找不到任何看起来不像阿拉姆语的文档。当你说上下文时,你是指一种新类型吗?
  • 好吧,如果您正在寻找一位讲亚拉姆语的人,我听说耶稣说得很流利:) 是的,这就是困难所在。我相信该类型是用于流程的。此链接可能会有所帮助:access.redhat.com/documentation/en-us/red_hat_enterprise_linux/…
猜你喜欢
  • 2013-01-10
  • 2012-03-04
  • 1970-01-01
  • 2019-09-12
  • 2015-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多