7 permissions root password execute-command
有些应用程序我不希望人们能够打开,除非他们拥有 root 权限,但是我不想给程序 root 权限。那么我怎样才能做到只有 root 可以运行某些应用程序,但这些应用程序实际上并不以 root 身份运行(出于安全原因,我不希望它们运行)?我正在运行 Ubuntu GNOME 15.04、GNOME Shell 和 GNOME 3.16。
这个答案是对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 解决方案是:
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
以无数种方式进行微调(请参阅参考资料),因此这个简单的 hack 的有效性将取决于您对它的自定义程度。
小智 7
尝试使用setuid
from 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
。