root 如何启动一个只有 root 才能杀死的进程?

Geo*_*e Y 4 permissions audit rsyslog administrative-privileges

在后台启动进程或将其作为systemd服务很容易。

然而,如果我想启动一个进程来监视Linux机器上的活动,那么它就成为了攻击的目标。如果任何用户想做坏事,它会首先通过简单地执行或 来终止该进程,即使他们只是sudoers 或wheel用户。killsystemctl stop

有没有办法强制执行只能杀死的进程root


伙计们,只要想到连rsyslog服务都可以被杀死,你就应该承认 Linux 确实是多么脆弱。这就像飞行员可以关闭黑匣子一样。有航空公司允许这种情况发生吗?或者是否有人给飞行员一份允许名单,以阻止他们采取任何措施来拯救飞机?当然,飞行员可以让飞机坠毁,但黑匣子会记录下来。

从安全角度来看,我关于禁止名单的提议是合法的,尽管它可能会让你感到害怕。所以不要试图责怪提出问题的人,好吗?

Nik*_*nov 31

拥有不受限制的 sudo/wheel 权限,任何人都可以撤消您所做的任何事情。即使您设法通过消除直接终止进程的可能性(例如使用 )来实现此目的sudo kill,仍然可以使用其他 sudo 命令来规避此问题,或者您也将自己锁定在管理之外。

问问自己,为什么不受信任的用户首先拥有不受限制的 sudo 权限?他们不应该。仅将此类特权给予您完全信任的人。如果仍有一些特权命令需要执行,请仅对这些命令启用 sudo:

+netmgr /usr/sbin/ifup, /usr/sbin/ifdown
Run Code Online (Sandbox Code Playgroud)

(用于visudo -f /etc/sudoers.d/netmgr将其放入 sudoers 附加文件中)。

这样您就可以允许用户仅运行sudo /usr/sbin/ifupsudo /usr/sbin/ifdown,但不允许运行其他 sudo 命令。中还有大量其他示例、说明和安全注意事项man sudoers。阅读!

审计通常以其他方式完成。特别是,您设置另一台计算机,配置其系统日志以接受来自远程站的日志。在有问题的机器上,您设置了日志记录,以便除了本地存储之外,它还会将所有日志发送到日志记录机器中。即使有人禁用此日志发送,禁用本身的操作也会被记录下来,所以至少您会知道谁是罪魁祸首。

  • @GeorgeY 如果有人可以获得 root 访问权限,那么他们就可以杀死你的进程。如果有人_实际上_正在这样做并且不会停止,那么解决方案就不是技术性的:你需要让管理层参与进来。 (10认同)
  • “root”和“wheel”是一模一样的神一样的特权。忍受吧。如果你不想给他们root,就不要给他们wheel。时期。 (9认同)
  • 如果你已经获得 root 权限,你可能会更糟,将上述过程替换为报告一切正常但允许你继续进行邪恶活动的过程。 (6认同)
  • @GeorgeY 那么什么阻止他们只运行 `sudo bash` 然后成为 root 呢? (6认同)
  • @GeorgeY,你不能让一个进程无法被 root 杀死。root 就是上帝,你不能禁用它做某事。sudo 可以让你有效地root。我认为唯一可行的解​​决方案是不授予 root 权限。我的建议是使用 sudo 的内置功能;如果这还不够,你必须发明自己的 sudo。编写一个kill或systemctl stop的代理应用程序,它会过滤掉禁止杀死的东西,或者更好,只允许某些东西被杀死,等等。您必须包装您希望非 root 用户可以调用的*所有*内容。 (4认同)
  • @GeorgeY,这就是恶搞:Windows 中也存在同样的权限问题,但管理员/本地系统和域管理员之间的细节略有不同,并且数据泄漏通常是通过损害有权访问数据的 Web 应用程序而根本没有权限升级的情况下完成的。 (2认同)

bta*_*bta 18

你不能赋予某人权力,然后又阻止他们使用它。你必须严格限制你赋予他们的权力,只包括你希望他们拥有的权力。

您在评论中说:

我必须允许他们使用killorsystemctl stop因为有一些应用程序确实需要这些权限来完成他们的工作

这并不意味着这些用户需要访问这些命令,而只需要访问那些应用程序。用户的运行权限有限sudo ./someprogram,一旦该程序以 root 身份运行,它就可以kill根据需要使用 等。不过,用户无法直接访问这些内部命令。

从根本上讲,用户不需要访问命令,他们需要访问功能。如果kill风险太大,则阻止对其进行访问并提供其他更安全的方法来实现相同的结果。也许您创建了一个小型实用程序safekill,其行为类似于kill但拒绝终止某些进程的请求。为您的用户提供 sudo 访问权限safekill,但不是真正的kill. 如果用户总是使用这些命令来做同样的事情,请将整个过程封装在一个小程序中,并让他们使用它而不是手动执行(例如,他们会运行而不是单独sudo restart_webservers终止并重新启动所有不同的服务器进程) 。您的用户仍然可以访问他们所需的功能,但他们无法直接使用危险武器。

根据您的特定设置,可能还有另一种更极端的执行机制可用。一些处理器具有可用的看门狗定时器。修改您的活动监控程序以启动看门狗并每隔几秒钟重置一次。如果有人设法杀死您的监视器,看门狗计时器将到期,系统将自行重新启动,在启动时重新启动监视器程序。这不会严格阻止监视器被禁用,但会禁止任何人在禁用它后做任何有意义的事情。这也会在您的系统日志中创建漂亮的大危险信号。大多数带有看门狗的系统都会报告看门狗何时触发特定的重新启动。当用户登录 shell 时发生的看门狗触发的重新启动应该被视为非常可疑。


小智 10

Linux菜鸟在这里。您是否可以考虑编写只执行这些人应该做的事情的程序或脚本,然后使它们成为 root 所有者并添加它们 setuid 位?当然,一个大问题是您可能不希望其他人运行这些命令。不知道你能否获取到原始的用户信息。当然,使用 setuid/setgid 时始终需要格外小心。

  • 该程序*可以*获取原始用户信息。显然, getuid() 仍然返回原始用户。setuid用户是geteuid()(“有效UID”) (4认同)
  • 事实上,*这*是通常的做法。*这*就是 `sudo` 本身的工作方式。 (4认同)

归档时间:

查看次数:

5680 次

最近记录:

4 年 前