4

我创建了一个脚本,我希望我们共享系统上的其他用户执行但不读取该脚本。我将所有权限设置为可执行,但撤销了 R/W 权限。

---x--x--x 1 dilletante staff 0 2013-04-02 11:42 expect.sh

但是脚本执行失败...原因很简单..解释器还需要阅读脚本

如果有的话,我想要一个解决方法..我可以将它嵌入到一些编译语言中..那行得通吗?如果是的话,你能指出我可以学习如何做到这一点的资源吗?

4

4 回答 4

7

shell 必须能够读取脚本才能执行它。如果它是一个脚本,你要求的是不可能的。

您当然可以在可执行程序上使用 111 权限(由ld命令生成,通常由您选择的编译实现语言的编译器调用)。所有者可以随时更改读取程序的权限,但使用 511 比使用 111 权限更常规。

通常有针对特定脚本语言的编译器会生成与该脚本等效的 C 程序:

等等。

于 2013-04-02T06:17:10.110 回答
1

如果您希望其他用户使用此功能,请尝试 sudo

例子:

  1. 更改执行权

    chmod 500 /usr/bin/script.bash
    ll /usr/bin/script.bash
    
    -r-x------ 1 <USER> <GROUP> 1174 23. Jan 13:24 /usr/bin/script.bash
    
  2. 作为 root 更改 sudoers

    visudo
    
    ## Allows ALL to run /usr/bin/script.bash as <USER> without password
    ## The asterisk is if you want to use any commandline parameters 
    ALL  ALL=(<USER>) NOPASSWD: /usr/bin/script.bash *
    
  3. 使用 sudo 运行脚本

    sudo /usr/bin/script.bash <PARAMETERS>
    

有关 sudo 的更多信息,请阅读 sudo 手册页

于 2014-01-23T13:46:35.510 回答
1

除了保护您的 shell 脚本之外,还有另一种方法。由于此处的目标是确保没有人可以阅读或更改它们,因此您可能想尝试以下链接:

http://www.kinglazy.com/shell-script-encryption-kinglazy-shieldx.htm

在上面的页面上,您所要做的就是提交您的shell脚本(您可以先提交一个示例脚本,以使您省心)。将为您生成一个 zip 文件。

安装:

  1. wget 链接到压缩文件
  2. 解压缩新下载的 zip 文件
  3. cd /tmp/KingLazySHIELD
  4. ./install.sh /var/tmp/KINGLAZY/SHIELDX-(name-of-your-script) /bin -force

上面的安装命令将为您做的是:

  1. 它将在目录 /var/tmp/KINGLAZY/SHIELDX-(name-of-your-script) 中安装加密脚本。

  2. 它会在 /bin 中放置一个指向该加密脚本的链接 - 这样,您无需在每次运行时都输入脚本的绝对路径。

  3. 确保没有人可以修改脚本 - 任何修改加密脚本的尝试都将使其无法操作......直到尝试被删除。

  4. 确保绝对没有人可以制作它的工作副本。没有人可以将您的脚本复制到一个僻静的位置并尝试使用它来查看它是如何工作的。如果他们尝试这样做,它将中止并且不会运行。

于 2016-05-02T04:17:12.033 回答
0

我制作了自己的 bash 混淆器来克服 shc 的一些真正困扰我的缺点(主要是能够使用 ps 以几乎清晰的文本形式查看脚本)。如果https://github.com/louigi600/obash比 shc 更好地为您服务,您可以看看。

于 2017-02-09T14:30:06.710 回答