在 Debian 等 Linux 系统中,如何防止其他用户使用已安装的应用程序(除非他们输入密码)?其他类型的身份验证令牌也是可以接受的。
我想阻止其他用户,包括根,使用我已安装的应用程序。
答案1
你的问题是仍然不清楚。
如果您想“防止其他用户(除了您自己和 )使用已安装的应用程序”
root
,只需将其保护 700(或 500),正如 Jarmund 的回答所说。这不会停止root
,但您说,“如果 root 用户会 [破坏] 它 - 这并不重要。”我不清楚您对“其他用户”的立场。你说,“我想阻止其他用户……使用我已安装的应用程序。”这是否意味着- 你不想任何人否则就无法运行该程序。如果通过密码强制执行则没问题(除了您之外没有人知道)。
- 你想已选择其他用户能够运行该程序。您愿意通过告诉他们密码来授权选定的用户。
- 你想已选择其他用户能够运行该程序。您特别希望通过告诉选定用户密码来授权他们。
?
如果这是第一点,那么最简单的方法可能就是只执行可执行文件,并接受能够绕过该保护的
chmod
事实。root
如果是第二点,请检查您的系统是否有 ACL。如果有,请设置一个访问控制列表,只允许您选择的用户执行该文件。当然这
root
也不会停止。如果是第三点——你特别想使用密码(或者如果拒绝访问对
root
你来说真的很重要)——加密是可行的方法。用密码加密你的可执行文件,从系统中删除未加密的程序,并将密码告诉你的朋友。例如,如果你的程序被调用
myprog
,你可以这样做openssl aes-256-cbc -e -in myprog -out mycode
它将要求您输入加密密码(两次),然后将程序的加密副本写入
mycode
。(您可以省略-e
(加密);它是默认的。)然后您可以编写如下脚本:#!/bin/sh clear_prog=$(mktemp) chmod 700 "$clear_prog" openssl aes-256-cbc -d -in /path/to/mycode -out "$clear_prog" "$clear_prog" "$@" rm "$clear_prog"
(用于解密。) 当有人解密时,仍然存在复制您的程序的
-d
风险。root
答案2
您的要求的棘手之处在于您还想阻止 root 运行它。基本上,root 用户可以对系统做任何他们想做的事情,毕竟,他们应该这样做。没有这种能力的 root 用户就像没有他们工作大楼钥匙的保安或看门人。
chmod
但是,只要您拥有该文件的所有权,就可以使用 来阻止其他用户运行可执行文件: chmod 700 /some/executable/file
。这将授予文件(可执行文件)的所有者所有权限(读/写/执行),而系统上的其他用户则无权访问。虽然直觉上认为只需要删除执行权限,但用户仍然可以将可执行文件复制到自己的目录中,然后使其再次可执行。因此,还必须删除读取权限。
答案3
我想阻止其他用户(包括 root)使用我已安装的应用程序。
正确设置文件的所有者和所属组,以及它将阻止除执行文件chmod
之外的不受欢迎的用户。请注意,如果其他用户可以读取文件但不能执行它,他们仍然可以复制它并更改他们自己副本上的位,因此如果您想阻止执行,您必须禁用具有权限的权限。root
x
r
x
但是,您无法通过root
上述机制阻止执行,任何文件都root
可以chmod
,也无法将所有者和所属组更改为任何内容。绝对阻止root
执行文件的唯一方法是让该文件根本不在系统上。
您可以通过将可执行文件存储在加密卷中,并在调用可执行文件之前解锁该卷,然后立即关闭该卷来接近此目的。但是,进程root
可以通过 读取任何其他进程的执行映像/proc
,因此理论上另一个进程可以root
从内存中复制可执行文件。我不确定是否可以使用内核编译选项来改变 Linux 的这种行为,如果可以,那么这可能是值得考虑的事情。
如果有不受信任的人以 身份登录root
,或者不受信任的进程以 身份运行root
,您确实必须解决这些问题。您可以研究虚拟化,并在其自己的 VM 中隔离系统中不受信任的部分。