Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
处理需要数据库(MySQL)密码的脚本的安全方法是什么?_Mysql_Linux_Security - Fatal编程技术网

处理需要数据库(MySQL)密码的脚本的安全方法是什么?

处理需要数据库(MySQL)密码的脚本的安全方法是什么?,mysql,linux,security,Mysql,Linux,Security,显然,我们不想在每个脚本中硬编码明文密码。这将使循环密码变得困难,因为除了明文密码外,还需要更改大量脚本 如果脚本将密码作为参数,那么我们需要担心修改“ps”输出以不显示密码参数的值。我们还必须担心命令被记录在shell历史记录中。这可能通过bash上的HISTIGNORE/HISTCONTROL来处理,但也有其他shell使用不同且不太灵活的历史记录控件(例如:zsh)。 我们还可以使用特定于命令行的环境变量(FOO=bar./script),虽然“FOO=bar”不会出现在“ps”中,但默认

显然,我们不想在每个脚本中硬编码明文密码。这将使循环密码变得困难,因为除了明文密码外,还需要更改大量脚本

如果脚本将密码作为参数,那么我们需要担心修改“ps”输出以不显示密码参数的值。我们还必须担心命令被记录在shell历史记录中。这可能通过bash上的HISTIGNORE/HISTCONTROL来处理,但也有其他shell使用不同且不太灵活的历史记录控件(例如:zsh)。 我们还可以使用特定于命令行的环境变量(FOO=bar./script),虽然“FOO=bar”不会出现在“ps”中,但默认情况下,它仍然会记录到shell历史记录中。此外,有些系统无论如何都会暴露其他用户的进程环境(通过“ps”)

可以使用密码(配置)文件来简单地存储明文密码。可以拥有/许可此文件以加强其访问。但是,在一天结束时,你仍然有一个明文密码

提示也是一种选择,但这往往不太方便(例如,仍然可以通过expect实现),如果脚本需要这样做,则会使非交互性变得复杂

可以使用某种风格的加密,但我们仍然需要处理解密密钥的类似问题

不管怎样,我还是应该选择上面的一个吗?还有其他可能更好的选择吗?人们如何处理这种情况是一种安全的方式

这里的总体目标是,如果攻击者以某种方式进入使用数据库服务器的系统,则攻击者不应该能够组成数据库服务器。例如,攻击不应该只是在某处找到密码,不应该通过观察系统(‘ps’)来发现密码,也不应该通过“及时回顾”(shell历史)来找到密码


我知道有数百万种情况(kmem、交换页面等),如果攻击者获得root或物理访问权限,大多数赌注都是无效的,没有什么是100%安全的。我只是在寻找合理的最佳方法。:-)

如果脚本不使用提示,并且不知何故知道db密码,那么攻击者可以执行您的任何脚本并执行相同的操作

如果你要密码,你必须把它给一些人,他们会把它放在他们的脚本中,或者为每个用户创建一个密码,这提供了多个密码来猜测(他们仍然会把它放在他们的脚本中)

也许有一件事要考虑的是有一个无密码的用户,只能在适当的表上选择,只能从特定的主机登录,并要求密码和其他用户更敏感的功能?

如果您想隐藏密码,您可以始终使用由两部分组成的系统。虽然您可以做非常复杂的事情,但XOR(按位异或,在perl和大多数其他语言中)也可以是您的朋友。这对于管理员来说很简单,而对于攻击者来说,没有一件东西是有用的。自动攻击者可能会移动到更肥沃的土地上。您甚至可以将其中一个部件保留在另一台主机上,并使用wget或nfs或其他方式获取它。这样它就可以作为tripwire系统的一部分被关闭


同时,也许你需要一些Tripwire或蜜罐之类的东西,这样如果坏人打电话来,你就可以给他们假消息,甚至更快地把事情关了。我喜欢主动防火墙的fail2ban。它可以扫描日志文件并根据日志中显示的任何内容阻止向您发送您不想要的crud的ip地址。它使用regexp和任何日志文件来定义事件,并且在规则引擎中具有一定的灵活性

我不是unix管理员,但是。。。让脚本在无登录帐户下运行,并将脚本(和密码文件)的权限设置为500,怎么样。这将限制对root用户和脚本用户的访问。

您可能希望探索TPM()

许多安全产品使用TPM存储关键的安全相关密钥。另一个想法是使用存储在智能卡中的证书加密密码

干杯,
GK

您可以将.my.cnf文件放在可以访问脚本的用户的主目录中,其中包含他们的信息,mysql可以从那里而不是从命令行读取。您还必须将环境变量设置为指向~/.my.cnf,但是。。。我不确定是MYSQL\u HOME还是SYSCONFDIR或其他*。它仍然是一个纯文本文件,但如果您仅将该文件限制为所有者,它应该可以吗?它至少可以防止密码进入
ps

医生的页面都暗示了这一点


(*免责声明:根据任何定义,我都不是管理员,只会惹麻烦)

根据数据的重要性,您可以实施各种措施

将密码存储在只有root用户才能读取的文件中。读取密钥的脚本应以root用户身份启动,读取密码,使用具有所需最低权限的数据库帐户建立数据库连接,从内存中擦除密码,然后下拉(可能有帮助)到非特权系统帐户

使用简单的脚本/触发器来监视数据库服务器上的数据库会话(会话开始和结束时间、用户、ip地址、执行的命令),监视系统上sudo的使用等