执行脚本而不读取权限

时间:2017-08-25 11:17:38

标签: bash permissions executable usergroups

我想允许用户执行包含敏感数据的bash脚本。因此,我不希望他们拥有阅读权限。 A'直接'解决方案seems to be impossible,但我可能在expect man page中找到了一种解决方法:

  

像往常一样创建Expect脚本(包含秘密数据)。   使其权限为750(-rwxr-x ---)并由受信任的组拥有,   即,允许阅读它的组。如有必要,请创建一个新的   为此目的的小组。接下来,创建具有权限的/ bin / sh脚本   2751(-rwxr-s-x)由同一组拥有。

我试图按如下方式复制: 在一个文件夹中,我有两个脚本:

script.sh:

#!/bin/sh
echo "targetscript echo"

runscript.sh:

#!/bin/sh
echo "runscript echo"
groups
./script.sh

我按照手册页中的建议给了他们权利:

groupadd scriptrunner
chown {myusername}:scriptrunner runscript.sh
chmod 2751 runscript.sh
chown root:scriptrunner script.sh
chmod 750 script.sh

ls -l的输出似乎没问题:

-rwxr-s--x. 1 {myusername} scriptrunner 51 Aug 25 13:04 runscript.sh
-rwxr-x---. 1 root         scriptrunner 35 Aug 25 13:01 script.sh

但是,当我在没有root的情况下运行./runscript.sh时,我收到以下错误:

runscript echo
{myusername} wheel
./runscript.sh: line 4: ./script.sh: Permission denied

我不知道出了什么问题。任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:2)

我会回到根本问题,因为我认为如果没有预期的黑客攻击会更容易解决。

因此,您需要的是拥有脚本的执行权限,而不是读取权限。这仅适用于二进制文件(即不是解释的脚本) - 请参阅此处的详细信息https://unix.stackexchange.com/questions/34202/can-a-script-be-executable-but-not-readable

因此,通过首先将bash脚本编译为二进制文件(使用shc - 请参阅此处https://unix.stackexchange.com/questions/64762/how-to-convert-a-shell-script-into-a-binary-executable)然后在二进制文件上设置仅执行权限,您可能会感觉更好。之后,您的用户应该能够执行(但不能读取)二进制文件。