如何使得文件只能由 root 执行,但不能以 root 身份执行?

如何使得文件只能由 root 执行,但不能以 root 身份执行?

有些应用程序我不希望人们打开,除非他们有 root 权限,但我不想给这些程序 root 权限。那么我怎样才能让只有 root 才能运行某些应用程序,但这些应用程序实际上并不以 root 身份运行(出于安全原因,我不希望它们以 root 身份运行)?我正在运行 Ubuntu GNOME 15.04、GNOME Shell 和 GNOME 3.16。

答案1

这个答案是对希瑟的一个(将会起作用)。

首先,考虑到在 Unix(和 Linux)中,如果一个人能够获得 root 权限,他们就可以做任何事情。在 Heather 的回答中,没有什么可以阻止你的用户sudo /usr/bin/applicationcommand(稍微搜索一下真实路径或其他什么)。但我想这对你来说没问题。

那么,为什么不简单地(1)

sudo chgrp sudo /usr/bin/applicationcommand
sudo chmod 750 /usr/bin/applicationcommand

? 如果用户能够使用sudo,则意味着(2)他们属于该sudo组;上述命令使该命令applicationcommand仅对组成员具有可读/可执行权限sudo。但是,当他们运行该命令时,他们将以真实用户的身份运行该命令,就像运行任何其他命令一样。

然而,“经典”的 Unix 解决方案是:

  1. 创建一个组,并命名为privileged
  2. sudo chgrp privileged /usr/bin/myapp进而sudo chmod 750 /usr/bin/myapp
  3. 添加用户(无特权!)您希望能够运行该应用程序到组privileged

现在用户将myapp以其用户身份运行,无需任何sudo权限。

请注意,如果您希望应用程序以不同的用户身份运行,您可以使用 set-uid 机制结合以上技术。


脚注:

(1):请注意,如果应用程序具有 set-gid 标志(例如,某些邮件程序会发生这种情况),则您无法执行此操作。在更改二进制文件的组之前,请先检查它。

(2):在大多数配置中。sudo可以以无数种方式进行微调(参见man sudoers),因此这种简单破解的有效性将取决于您对其进行了多少自定义。

答案2

尝试使用setuid来自包的super。执行sudo apt-get install super,然后创建一个只能以 root 身份运行的 shell 脚本。让该 shell 脚本只运行一个命令:

#!/bin/sh
setuid $ORIG_USER applicationcommand
exit 0

然后,为每个用户设置一个别名,以便applicationcommand通过添加到每个.bashrc文件中来指向您创建的 shell 脚本:

alias applicationcommand="sh /path/to/shell/script"

或者,除了创建之外,alias您还可以编辑.desktop要运行的应用程序的文件,假设您的应用程序有一个.desktop文件(如果它不是在 GUI 中运行的应用程序,而是在 CLI 中运行的应用程序,则可能没有文件.desktop),以便该Exec=行后面有,或者如果您决定创建别名,则有别名的名称。您将在和中sh /path/to/shell/script找到.desktop文件。/usr/share/applications~/.local/share/applications

相关内容