避免用户破坏并使用脚本

避免用户破坏并使用脚本

是否可以拒绝复制文件的权利?

我有一个脚本,其他人应该可以执行它。他们也可以读取该文件(尽管禁止读取也不会有问题)。但我不想更改并执行该脚本。

设置这些权限不是问题,但可以很容易地复制、更改和运行脚本。这可以避免吗?

操作系统是 Red Hat Enterprise Linux Workstation 版本 6.2(Santiago)。

答案1

您可以使用 sudo 来实现这一点。

您可以允许您的用户 sudo 您的脚本,并且只能使用该脚本。

一步步:

  1. 创建系统“executor_account”帐户(您可以使用任何名称)并授予其脚本权限。不要为此使用 root 帐户。

  2. 配置 sudo。

    您必须学习如何使用 sudo 并允许您的用户执行“sudo executor_account myscript.sh”,仅此而已。可以允许他们执行他们不能执行的文件。我不是 Linux 专家,我不会解释这一点,但您可以在任何地方找到许多有关 sudo 的教程。

我认为这是允许用户执行他无法读取的文件的唯一方法。

脚本将从另一个用户帐户运行,因此脚本的最终“产品”(日志等)将归您创建的特殊帐户所有。如果脚本或脚本执行的程序正在生成某些文件,您必须以某种方式处理这个问题。

答案2

不,Linux 文件权限无法做到这一点。用户必须能够读取 shell 脚本才能执行它 - 这意味着他们可以复制、修改并运行它。

答案3

这有点笨拙,但是——编写一个如下所示的 C 程序:

#包括 <stdio.h>
#包括 <stdlib.h>


        文件*sh;

        sh = popen("/bin/sh", "w");            // 使用“/bin/bash” 是如果你需要。
        如果(sh ==(FILE *)NULL){
                perror(“popen”);
                退出(1);
        }
                                        <-------- 在这里插入魔法。
        fclose(sh);

在“在这里插入魔法。”点,插入要写入脚本的代码sh;例如,

        fprintf(sh, "for x in red blue green\n");
        fprintf(sh, "do\n");
        fprintf(sh, "        echo x = \"$x\"\n");
        fprintf(sh, "done\n");

如果代码不止几行,那么将其存储为字符串数组可能更易于管理。然后编译此程序并使二进制文件只执行(例如模式 710 或 711)。

没有任何解决方案是万无一失的,因为用户虽然能够通过ps另一个窗口看到正在运行的命令,但这只能让他们对脚本有片面的了解。

当然,如果你的脚本的逻辑确实很敏感,真正的答案是将其翻译成可编译的语言。

相关内容