只想执行shell脚本

问题描述 投票:0回答:3

我编写了一个 shell 脚本来连接受密码保护的数据库。其他几个人希望使用相同的 shell 脚本来共享数据库访问权限,但我不想公开正在使用的密码。有没有一种方法可以锁定脚本,以便没有人可以读取它并且只能执行它?他们输入 sudo 密码来运行脚本也是理想的选择

bash
3个回答
7
投票

有没有一种方法可以锁定脚本,这样就没有人可以读取它并且只能 执行它?他们输入 sudo 密码也是理想的选择 运行脚本

当然。 假设包含凭据的脚本是

/usr/local/bin/myscript
。 使该文件归特权用户所有。 假设我们有一个名为“credentials”的用户:

# 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 私钥)。


0
投票

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

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

或者,您可能想看看 Perl 中的几个只读模块。我正在考虑像 Acme::EyeDropsAcme::Bleach 这样的东西,它可以从 Perl 脚本中删除所有那些难看的字母和数字。 (我想知道为什么 Python 程序员说 Perl 不可读?)


0
投票

这对我有用。尝试 1: - chmod 700specialFile - 或special_script 2: - chmod +t 特殊文件 ; ls -la 特殊文件注释 gecko

-rwx-----T 1 meUser meUser 123 十月 16 20:51 规格文件* 系统上没有其他帐户可以触及它 ls/cat/grep/sed/more 所有渲染权限都被拒绝。 深入了解 *Nix ACL 访问控制列表。 require ,acl, 添加到您的挂载点区域 ext4 Discard,noatime 1 1 --->chgToo---> ext4 Discard,acl,noatime 1 1 (仅显示文件“type or -t ext4”中条目的右侧 现在,FS 将检查每个 inode 权限,其深度和独特性但值得改进。 祝你好运。

© www.soinside.com 2019 - 2024. All rights reserved.