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

7 permissions root password execute-command

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

Rma*_*ano 8

这个答案是对Heather答案的补充(这会起作用)。

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

在这种情况下,为什么不简单地(1)

sudo chgrp sudo /usr/bin/applicationcommand
sudo chmod 750 /usr/bin/applicationcommand
Run Code Online (Sandbox Code Playgroud)

? 如果用户能够使用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以无数种方式进行微调(请参阅参考资料),因此这个简单的 hack 的有效性将取决于您对它的自定义程度。


小智 7

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

#!/bin/sh
setuid $ORIG_USER applicationcommand
exit 0
Run Code Online (Sandbox Code Playgroud)

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

alias applicationcommand="sh /path/to/shell/script"
Run Code Online (Sandbox Code Playgroud)

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