想要只执行shell脚本

时间:2011-11-30 23:10:12

标签: bash

我写了一个shell脚本来挂钩到受密码保护的数据库。其他几个想要使用相同的shell脚本来共享数据库访问,但我不想公开正在使用的密码。有没有办法锁定脚本,以便没有人可以读取它只执行它?他们输入他们的sudo密码来运行脚本

也是理想的选择

2 个答案:

答案 0 :(得分:6)

  

有没有办法锁定脚本,以便没有人可以只读取它   执行它?他们输入他们的sudo密码也是理想的选择   运行脚本

不确定。假设包含凭据的脚本为/usr/local/bin/myscript。使此文件由特权用户拥有。假设我们有一个名为“凭据”的用户:

# chown credentials /usr/local/bin/myscript
# chmod 700 /usr/local/bin/myscript

现在只有credentials用户可以阅读并执行此脚本。

创建另一个如下所示的脚本/usr/local/bin/mywrapper

#!/bin/sh
exec sudo -u credentials /usr/local/bin/myscript

并创建适当的/etc/sudoers条目:

auser   ALL=(credentials) /usr/local/bin/myscript

现在,用户auser运行“mywrapper”。这反过来使用sudo来调用真实脚本,这将提示auser输入密码。

我认为这可以做你想要的一切。我们在办公室使用非常类似的机制来保护凭证(在我们的例子中是ssh私钥)。

答案 1 :(得分:0)

为了执行shell脚本,您必须能够读取它。你可以做几件事:

  • 谁管理这个数据库?用户是否可以获得自己的密码以进行只读访问?这将是理想的,因为它可以限制他们访问数据库的一小部分。
  • 如果他们必须具有sudo访问权限才能运行此脚本,可能可以从文件中删除密码并将其删除到设置了600个权限的文件中。问题是这可能会泄漏。例如,如果他们使用set -xv运行脚本会怎么样?然后,他们可以在脚本执行时看到密码。
  • 您是否可以在数据库外部创建他们可能感兴趣的数据子集?那么,让你的脚本访问吗?

或者,您可能希望查看Perl中的几个只读模块。我正在考虑类似Acme::EyeDropsAcme::Bleach的内容,它会从Perl脚本中删除所有那些难看的字母和数字。 (我想知道为什么Python程序员说Perl是不可读的?)

相关问题