如何阻止其他用户(包括 root)执行给定的程序?

如何阻止其他用户(包括 root)执行给定的程序?

在 Debian 等 Linux 系统中,如何防止其他用户使用已安装的应用程序(除非他们输入密码)?其他类型的身份验证令牌也是可以接受的。

我想阻止其他用户,包括根,使用我已安装的应用程序。

答案1

你的问题是仍然不清楚。

  1. 如果您想“防止其他用户(除了您自己和 )使用已安装的应用程序” root,只需将其保护 700(或 500),正如 Jarmund 的回答所说。这不会停止root,但您说,“如果 root 用户会 [破坏] 它 - 这并不重要。”我不清楚您对“其他用户”的立场。你说,“我想阻止其他用户……使用我已安装的应用程序。”这是否意味着

    • 你不想任何人否则就无法运行该程序。如果通过密码强制执行则没问题(除了您之外没有人知道)。
    • 已选择其他用户能够运行该程序。您愿意通过告诉他们密码来授权选定的用户。
    • 已选择其他用户能够运行该程序。您特别希望通过告诉选定用户密码来授权他们。

    如果这是第一点,那么最简单的方法可能就是只执行可执行文件,并接受能够绕过该保护的chmod事实。root

  2. 如果是第二点,请检查您的系统是否有 ACL。如果有,请设置一个访问控制列表,只允许您选择的用户执行该文件。当然这root也不会停止。

  3. 如果是第三点——你特别想使用密码(或者如果拒绝访问对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之外的不受欢迎的用户。请注意,如果其他用户可以读取文件但不能执行它,他们仍然可以复制它并更改他们自己副本上的位,因此如果您想阻止执行,您必须禁用具有权限的权限。rootxrx

但是,您无法通过root上述机制阻止执行,任何文件都root可以chmod,也无法将所有者和所属组更改为任何内容。绝对阻止root执行文件的唯一方法是让该文件根本不在系统上。

您可以通过将可执行文件存储在加密卷中,并在调用可执行文件之前解锁该卷,然后立即关闭该卷来接近此目的。但是,进程root可以通过 读取任何其他进程的执行映像/proc,因此理论上另一个进程可以root从内存中复制可执行文件。我不确定是否可以使用内核编译选项来改变 Linux 的这种行为,如果可以,那么这可能是值得考虑的事情。

如果有不受信任的人以 身份登录root,或者不受信任的进程以 身份运行root,您确实必须解决这些问题。您可以研究虚拟化,并在其自己的 VM 中隔离系统中不受信任的部分。

相关内容