【问题标题】:Capabilities to run start-stop-daemon运行 start-stop-daemon 的能力
【发布时间】:2018-04-25 18:15:34
【问题描述】:

我想停止由 root 启动的进程 (proc2) 通过我的非特权进程 (proc1)。

我的进程 proc1 调用 execl("/bin/sh","sh","-c","/etc/init.d/proc2 restart",nullptr)。

/etc/init.d/proc2 restart 调用 start-stop-daemon

由于缺乏杀死 proc2 (suid root) 的能力而失败

必须为非特权进程 proc1 设置什么样的功能才能运行 start-stop-daemon (kill proc2)?

【问题讨论】:

  • 您可以使用sudo 并为该进程设置规则。
  • 你能举例说明你现在在做什么吗?
  • 我必须将功能限制为所需的集合,即非特权进程只能杀死特权进程。

标签: c linux


【解决方案1】:

我会将您的问题改写为如何从用户杠杆过程中触发管理任务(需要 root 权限)?

设置一个特权中继的常用方法,该中继将接受从非特权任务中激活。在 Unix/Linux 世界中有两种经典的方法可以做到这一点:

  1. legacy way:root 拥有的可执行文件,设置了 seuid 位,只能由允许执行特权任务的一组用户执行。但是 setuid 可执行文件具有很高的风险,因为任何错误都可能导致严重后果。众所周知的sudo 只是这种root seutid 可执行文件的一个示例,但它已经过广泛的测试
  2. 守护进程方式:特权守护进程等待某个事件并执行特权任务。与非特权世界的接口只是事件,因此通常认为风险较低。事件通常是目录中存在文件、写入 fifo 文件或网络数据包中的消息。

无论哪种方式,您都必须考虑安全问题:如何确保仅合法触发特权任务。

【讨论】:

  • 我在考虑使用功能实用程序。非特权进程必须通过 execl 将 CAP_KILL 传递给 bash。这样 bash 将获得部分特权并可能杀死特权进程。
猜你喜欢
  • 1970-01-01
  • 2022-01-22
  • 1970-01-01
  • 2014-09-30
  • 2012-06-23
  • 1970-01-01
  • 2016-07-03
  • 2013-07-24
  • 1970-01-01
相关资源
最近更新 更多