我希望shell脚本可执行但不可读

时间:2013-04-02 06:13:59

标签: linux shell permissions

我创建了一个脚本,我希望共享系统上的其他用户执行但不能读取。我将权限设置为可执行文件但已撤消R / W权利。

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

然而,脚本无法执行......原因很简单.. 解释器还需要阅读脚本

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

4 个答案:

答案 0 :(得分:6)

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

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

通常有一种特定脚本语言的编译器会生成一个与脚本等效的C程序:

答案 1 :(得分: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. 根本改变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>
    
  4. 有关sudo的更多信息,请阅读sudo联机帮助页

答案 2 :(得分:1)

可以选择保护shell脚本。由于此处的目标是确保没有人可以阅读或更改它们,您可能需要尝试以下链接:

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

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

<强>安装:

  1. wget link-to-the-zip-file
  2. 解压缩-new-downloaded-zip-file
  3. cd / tmp / KingLazySHIELD
  4. ./ install.sh / var / tmp / KINGLAZY / SHIELDX-(你的脚本名称)/ bin -force
  5. 上面的安装命令将为您做的是:

    1. 它会将加密的脚本安装在目录/ var / tmp / KINGLAZY / SHIELDX-(你的脚本名称)中。

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

    3. 确保NO ONE无法修改脚本 - 任何修改加密脚本的尝试都会使其无法运行......直到尝试被删除。

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

答案 3 :(得分:0)

我制作了自己的bash混淆器来克服shc的一些缺点,这些缺点真的让我感到困扰(主要的是因为能够使用ps在几乎清晰的文本中看到脚本)。 您可以查看https://github.com/louigi600/obash是否比shc更好。