我在 ubuntu 上,正在foo.sh
后台运行一个脚本。如何保护它不被使用 sudo 的用户杀死?如何保护这个进程不被我自己杀死?
我希望在看门狗发现脚本进程被终止后关闭 PC。我不能直接终止看门狗来欺骗这个保护吗?
我安装了watchdog
,但我不知道如何使用它。请帮忙,给我一个示例命令。
.. 如果您想知道,foo.sh 是一个脚本,它会在运行 X 分钟后关闭我的电脑,就像计划关机一样。我想安排关机,但最后我后来取消了它。我必须阻止自己取消它。
答案1
如何保护它不被用户用 杀死
sudo
?如何保护此进程不被我自己杀死?
如果您是唯一的用户(因此系统范围的更改只会影响您),我认为有一种方法,一个繁琐的技巧。
- 确保脚本以 root 身份运行,并且只有 root 可以使用它(即您需要
sudo
终止它)。 准备一份
/etc/group
:sudo cp -a /etc/group /etc/group.limited
编辑副本,以便您的用户不在该
sudo
组中。将副本绑定安装
/etc/group
:sudo mount --bind /etc/group.limited /etc/group
从现在开始,诸如
pkexec
或之类的工具systemctl
将拒绝提升的访问权限,因为它们将读取该文件并知道您不应该在该sudo
组中。更改不会
sudo
轻易产生影响。该工具可能依赖也可能不依赖该sudo
群体。如果确实如此,它仍会感知到您在群组中,因为您登录时就在群组中。我猜您不想注销并再次登录。要欺骗sudo
您,需要一个单独的步骤。/dev/null
绑定挂载/etc/sudoers
:sudo mount --bind /dev/null /etc/sudoers
(或者您可以准备一个备用
sudoers
文件并安装它)。退出任何可以以 root 身份运行任意命令的提升的 shell 或提升的程序。
这些坐骑不是永久的。重启后它们就会消失,然后你就可以sudo
再次使用了。
请注意,该解决方案不仅会阻止您终止脚本;它还会(或试图)阻止您以 root 身份执行任何操作。这可能不是您想要的。不过,如果您保留以 root 身份执行某些操作的能力,那么可能还有办法做更多事情并最终终止脚本。
将此答案视为草图。我无法保证它会禁用所有提升为根的方法。特别是:
su -
如果您提供 root 密码,它仍然可以工作(不过我猜您可以绑定挂载)/dev/null
。/bin/su
- 我认为在其他发行版中相关组可能是
admin
或wheel
。 - 您能做什么
pkexec
取决于/usr/share/polkit-1/
和/etc/polkit-1/
(也许还有其他地方?)中的规则。规则可能很复杂,因此仅仅将自己从正确的组中移除可能还不够。