Joh*_*ith 8 mysql linux security
显然,我们不想在每个脚本中对明文密码进行硬编码.这会使密码循环变得困难,因为除了密码首先是明文密码之外,还需要更改大量的脚本.
如果脚本将密码作为参数,那么我们需要担心修改'ps'输出以不显示密码参数的值.我们还必须担心shell历史记录中记录的命令.这可以通过bash上的HISTIGNORE/HISTCONTROL来处理,但是还有其他shell在使用时具有不同且灵活性较差的控件(例如:zsh).我们还可以使用特定于命令行的环境变量(FOO = bar ./script),而'FOO = bar'不会显示在'ps'中,默认情况下,它仍会记录到shell历史记录中.此外,一些系统无论如何都会暴露其他用户的过程环境(通过'ps').
可以使用密码(配置)文件来简单地存储明文密码.该文件可以拥有/许可,以加强其访问权限.但是,在一天结束时,您仍然有明文密码.
提示也是一种选择,但这往往不那么方便(例如,仍然可以通过预期),并且如果脚本需要,则使非交互性变得复杂.
可以使用某些风格的加密,但是我们仍然有类似的问题来处理解密密钥.
我应该选择以上其中一种吗?其他选择可能更优越吗?人们如何处理这种情况是一种安全的方式?
这里的一般目标是,如果攻击者以某种方式进入使用数据库服务器的系统,则攻击者不应该能够组成数据库服务器.例如,攻击不应该只是找到位于某处的密码,不应该观察系统('ps')来发现它,并且不应该"回顾过去" (shell历史)找到它.
我完善意识到有数百万个场景(kmem,交换页面等等等),并且如果攻击者获得root或物理访问并且没有任何东西是100%安全的话,那么大多数赌注都会被关闭.我只是在寻找合理的最佳方法.:-)
如果脚本不使用提示,并且以某种方式知道数据库密码,那么攻击者可以执行您的任何脚本并执行相同的操作。
如果您要求输入密码,则必须将其提供给某些人,他们会将其放入脚本中,或者为每个用户创建一个密码,这提供了多个密码供猜测(并且他们仍然会将其放入脚本中) )。
也许需要考虑的一件事是拥有一个无密码用户,该用户只能在适当的表上执行 SELECT 操作,并且只能从特定主机登录,并且需要密码和其他用户才能执行更敏感的功能?
如果你想隐藏密码,你总是可以拥有一个由两部分组成的系统。虽然您可以做非常复杂的事情,但 XOR(按位异或,在 Perl 和大多数其他语言中)也可以成为您的朋友。对于管理员来说很简单,而对于攻击者来说,没有任何一块是有用的。自动攻击者可能会转向更肥沃的土壤。您甚至可以将其中一个部分保留在另一台主机上,并使用 wget 或 nfs 或其他方式获取它。这样它就可以作为绊线系统的一部分被关闭。
与此同时,也许你需要一些绊网或蜜罐之类的,这样,如果坏人打电话过来,你就可以向他们提供虚假信息,甚至更快地关闭一切。我喜欢使用fail2ban 来进行主动防火墙。它可以扫描日志文件并根据日志中显示的任何内容阻止向您发送您不想要的内容的 IP 地址。它使用正则表达式和任何日志文件来定义事件,并且在规则引擎中具有一定的灵活性。
| 归档时间: |
|
| 查看次数: |
290 次 |
| 最近记录: |