我已经创建了一个脚本,并且希望它对SIGSTOP几乎是“免疫”的。
我了解SIGKILL和SIGSTOP不能被捕获或忽略。
我知道Linux的初始化系统由于在其信号结构标志上具有SIGNAL_UNKILLABLE标志而无法接收到“致命”信号(尽管该语句的后半部分在我头上飞得很高)。
我愿意编辑内核以授予此脚本权限,唯一的问题是我不知道怎么做。
因此,我的问题是,是否有一种方法可以使特定脚本/进程的SIGSTOP无效?
由于脚本的服务文件中的Restart参数(使用systemd),我能够处理SIGKILL。尽管我在手册中滚动查找与挂起进程类似的东西,但还没有发现任何东西。
是否有与SIGSTOP引起的进程暂停类似的Restart = always相似的东西?
我宁愿不必经历更改内核中或与内核相关的事情的过程,但是如果这是我唯一的方法。
谢谢。
最佳答案
好的,所以我能想到的最好的解决方案是SELinux。
SELinux是由NSA创建的内核插件,后来被发布给公众。它通常在Linux系统上使用,默认情况下在Android设备上使用。 SELinux允许创建“上下文”。上下文是提供给文件和进程的附加标签,允许细分责任和权限。
这如何解决您的问题?好吧,您可以将SELinux权限限制为您的用户进程(甚至对于root用户),以至根本不允许您发信号通知其他进程。实际上,您可以防止与其进行任何交互。如果愿意,您甚至可以阻止自己关闭SELinux(尽管从操作的 Angular 来看,最好不要这样做)。在某种程度上,这可能是您接近无法破解的解决方案的最接近的解决方案。话虽如此,为此目的而进行的SELinux设置和配置并不完全是在公园散步。文档是有限的(但存在),特定于发行版的,在某些情况下甚至是深奥的。我自己对SELinux确实有一些经验。
编辑:
快速搜索一下,似乎可以在Arch上安装SELinux,但是与Arch上的大多数事情一样,这需要一些努力-超出StackOverflow注释块的范围。但是,一旦安装了SELinux,我将在这里简要描述您的目标集:
默认情况下,SELinux拒绝任何它明确不允许的内容。现在的目标是确保允许您可能要在系统上执行的所有操作,并添加策略规则以允许所有这些操作。查看SELinux审核日志是查看SELinux抱怨的一切的好方法-将所有这些审核失败转换为“允许”规则是您的工作。
完成所有这些操作后,只需确保不要“允许”进程/shell进入的任何上下文能够杀死或发出脚本在其中运行的上下文,那么您应该这样做。现在尝试SIGSTOP或SIGKILL应该会生成“权限被拒绝错误”。
关于linux - 有没有一种方法可以使特定脚本的SIGSTOP无效?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59852298/