未经用户许可以用户身份运行程序?

未经用户许可以用户身份运行程序?

有一个程序我害怕在 root 下运行(可能包含漏洞),并且我不想设置用户执行权限,从而导致该功能无法使用,例如其他一些程序。

首先想到的是在 root 下运行(程序根目录:用户)

#!/bin/sh
chmod 750 program && su - user -c program; chmod 700 program

第二个想法是仅为该程序创建一个用户,但我还没有遇到过设置权限以使新用户仅具有一个程序的权限,并且拒绝访问其他所有程序。另外,如果程序使用 GUI,则 X11 访问可能会出现问题。

我想以非特权身份运行该程序(常规的)用户,但我不希望该程序能够由任何其他进程或其他任何人运行(当然 root 不算)。


例如,有一个截图程序,如何才能让只有我可以使用,而不是浏览器中的病毒?

这是没有意义的。如果该浏览器病毒能够执行进程,那么它就拥有下载具有相同功能的程序或实现该功能本身所需的一切;

首先想到的是,如果我们谈论的是安装了 suid 位的程序,要安装它我需要 root 访问权限。这意味着通过浏览器进入但无法获得 root 访问权限的病毒将能够使用该程序。如果不允许从用户帐户执行程序,病毒就不会启动它,并且如果没有 root 访问权限,它就无法安装它,即使用它。


或者一个模拟击键的程序,这样只有我可以运行它(通过包装器或密码或 sudo 作为 root 或其他东西),但不能运行病毒或其他程序/进程。

答案1

您不需要对程序做任何特殊的事情:root 可以使用他们想要的任何用户身份运行程序,例如 su 或 sudo,如您所演示的。但随后该用户需要执行该程序。因此,你想要的是不可能的,让一个程序由另一个用户执行,但不允许该用户执行你的程序。

您的整个“更改权限,运行,改回”似乎也是徒劳的,因为目标用户(或者具体来说,程序本身)可以在运行时制作副本。或者甚至只是进入后台,愉快地退出并且不关心文件权限,因为它已经在后台运行。

至少在 Linux 系统上,有一个用户“nobody”是很常见的,它基本上没有特权,但用于运行不应做太多事情的守护进程。拥有多个此类用户是可能的,但可能表明您确实需要思考您想要保护什么,因为:

有一个程序我害怕在root下运行(可能包含漏洞),并且我不想设置用户执行权限,从而导致该功能无法使用,例如其他一些程序

毫无意义。您的其他程序可能有相同的安全问题,或者它们可以构建相同的程序。天哪,有了启动任何东西的能力并安装了一半正常的 shell,你应该能够在你的机器上构建一个完整的远程 shell 服务。

这有点类似于说

我不想让乘客携带这种牌子的螺丝上飞机,这些螺丝存在质量控制问题,谁知道当他们开始用这种垃圾更换飞机上的螺丝时会发生什么!

问题不在于乘客是否能接触到损坏的螺丝,而在于你允许他们用螺丝刀撬动机翼。

你试图在这里获得错误的结局。通过(不一定是伟大的)Unix 特权概念,用户总是可以造成严重破坏或发布他们自己的文件。如果他们可以执行任意软件,你就无法保护他们免受侵害。

您可以保护系统免受用户造成超出其​​自身范围的损害。但这不是阻止他们运行可执行文件的问题(这只能做用户无论如何都可以做的事情),而是阻止以该用户身份运行的东西造成损害。这就是文件权限的用途,SELinux 帮助做的事情,等等。

另外,如果程序使用 GUI,则 X11 访问可能会出现问题。

让 X11 客户端访问您的 X11 服务器基本上游戏就结束了。他们可以合成任何按键,例如。打开终端并输入 rm -rf /。


因此,您实际上不太清楚您所考虑的安全边界是什么。


例如,有一个截图程序,如何才能让只有我可以使用,而不是浏览器中的病毒?

这是没有意义的。如果该浏览器病毒能够执行进程,那么它就拥有下载具有相同功能的程序或实现该功能本身所需的一切;两者都是恶意软件中相对常见的事情。再次,禁止具体的可执行文件确实没有什么以保护您的系统。

相关内容