是否可以拒绝复制文件的权利?
我有一个脚本,其他人应该可以执行它。他们也可以读取该文件(尽管禁止读取也不会有问题)。但我不想更改并执行该脚本。
设置这些权限不是问题,但可以很容易地复制、更改和运行脚本。这可以避免吗?
操作系统是 Red Hat Enterprise Linux Workstation 版本 6.2(Santiago)。
答案1
您可以使用 sudo 来实现这一点。
您可以允许您的用户 sudo 您的脚本,并且只能使用该脚本。
一步步:
创建系统“executor_account”帐户(您可以使用任何名称)并授予其脚本权限。不要为此使用 root 帐户。
配置 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
另一个窗口看到正在运行的命令,但这只能让他们对脚本有片面的了解。
当然,如果你的脚本的逻辑确实很敏感,真正的答案是将其翻译成可编译的语言。