有些应用程序我不希望人们打开,除非他们有 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 解决方案是:
- 创建一个组,并命名为
privileged
。 sudo chgrp privileged /usr/bin/myapp
进而sudo chmod 750 /usr/bin/myapp
。- 添加用户(无特权!)您希望能够运行该应用程序到组
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