程序需要由任何用户以root身份运行并且可以位于任何地方

use*_*127 5 linux sudo

我有一些名为 foo 的程序,在执行时需要 root 权限。foo 需要能够由任何用户运行并且可以位于任何路径。该程序可以位于任何路径的原因是因为我们公司正在开发程序 foo,每个用户在使用该程序时可能在某个个人目录中拥有该程序的个人版本。

我的问题是,处理这个问题最安全的方法是什么?我一直在研究 sudoers 文件,基本上有两个想法。

  1. 列出程序在 sudoers 文件中可以位于的所有路径。这是有问题的,因为它需要频繁编辑 sudoers 列表,并且仍然会带来安全风险,因为非 root 用户将拥有自己的 foo 副本,并且可以通过 foo 复制某些系统程序,然后以 root 身份使用它。

  2. 编写一个名为 start_foo 的脚本,该脚本对传递的程序执行一些输入验证(例如大小和名称),然后启动传递的 foo。start_foo 可以存在于root 中/usr/bin并由 root 拥有,但任何人都可以运行。此选项仍然包含能够使用另一个需要 root 的程序覆盖用户 foo 程序的安全漏洞,但希望大小检查能够捕获一些恶意案例。

有没有一种“规范”的方法来解决我没有找到或想到的这个问题?如果不是,以上或其他可能的解决方案中哪一个是处理该问题的最佳方法?

Wil*_*ill 1

需要注意的是,允许程序拥有 root 权限并由任何用户运行的“正确方法”是使用setuidsetgid传递给chmod. 本教程解释了该过程。您必须是 root 才能应用setuidsetgid标志,并且该程序必须由 root 拥有。

需要注意的是,允许用户以 root 权限运行程序是极其不安全的。程序代码中的任何漏洞都可以让普通用户获得 root 权限。多年来,许多 Linux 漏洞利用了有缺陷的二进制setuid文件来获得权限升级。

仅供参考和教育目的,具体操作方法如下:

chown root /usr/bin/myprogram
chmod u+s /usr/bin/myprogram
Run Code Online (Sandbox Code Playgroud)

但是,正如其他人上面所说,不要这样做!