我创建了一个脚本,我希望共享系统上的其他用户执行但不能读取。我将权限设置为可执行文件但已撤消R / W权利。
---x--x--x 1 dilletante staff 0 2013-04-02 11:42 expect.sh
然而,脚本无法执行......原因很简单.. 解释器还需要阅读脚本
我想要一个解决方法,如果有的话。我可以将它嵌入到一些编译语言中。那会有用吗? 如果是的话,你能否指出我可以学习如何做的资源..
答案 0 :(得分:6)
shell必须能够读取脚本才能执行它。如果它是一个脚本,你就要求不可能。
您当然可以对可执行程序使用111权限(由ld
命令生成,通常由您选择的编译实现语言的编译器调用)。所有者可以随时更改读取程序的权限,但更常见的是使用511而不是111权限。
通常有一种特定脚本语言的编译器会生成一个与脚本等效的C程序:
shc
— shell script compiler。等
答案 1 :(得分:1)
如果您希望其他用户使用此功能,请尝试使用sudo
示例:
更改执行权
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
根本改变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 *
使用sudo运行脚本
sudo /usr/bin/script.bash <PARAMETERS>
有关sudo的更多信息,请阅读sudo联机帮助页
答案 2 :(得分:1)
可以选择保护shell脚本。由于此处的目标是确保没有人可以阅读或更改它们,您可能需要尝试以下链接:
http://www.kinglazy.com/shell-script-encryption-kinglazy-shieldx.htm
在上面的页面上,您所要做的就是提交您的shell脚本(您可以先提交示例脚本,以免放心)。将为您生成一个zip文件。
<强>安装:强>
上面的安装命令将为您做的是:
它会将加密的脚本安装在目录/ var / tmp / KINGLAZY / SHIELDX-(你的脚本名称)中。
它会在/ bin中放置这个加密脚本的链接 - 这样,每次要运行它时都不需要输入脚本的绝对路径。
确保NO ONE无法修改脚本 - 任何修改加密脚本的尝试都会使其无法运行......直到尝试被删除。
确保没有人可以制作它的工作副本。没有人可以将您的脚本复制到一个僻静的位置,并尝试使用它来查看它是如何工作的。如果他们试图,它将中止并且不会运行。
答案 3 :(得分:0)
我制作了自己的bash混淆器来克服shc的一些缺点,这些缺点真的让我感到困扰(主要的是因为能够使用ps在几乎清晰的文本中看到脚本)。 您可以查看https://github.com/louigi600/obash是否比shc更好。