我有一台运行 Ubuntu 10 的服务器,它主要有带有 MySQL 数据库的 PHP 网站。
我需要编写一个备份脚本
- 备份数据库
- 压缩所有 php 文件。
用 PHP 还是 shell 编写备份脚本更安全?还是无所谓?
我更喜欢 PHP,因为它让我只需要在一个地方,即一个 PHP 文件中就可以拥有数据库密码。
如果我在shell中写这个,那么我需要把数据库密码放在shell脚本中。当我修改密码时,我需要在两个地方修改它。
答案1
从安全角度来说,最好的情况是您的 mysql 密码根本不会暴露或硬编码在脚本中。如果您计划执行外部工具(如 mysqldump)来备份数据库,则 php 和 shell 脚本都需要解密密码,因此 - 不,无论您选择哪种解决方案,都没有额外的安全性。关于最后一个问题,shell 脚本很容易从 php 配置文件中获取密码(提示:grep 和 sed 是您的好朋友),因此您不必在很多地方进行修改。关于 php 与 shell - php 的 cli 表现相当不错,唯一的区别是您可能必须用 php 编写大量代码来做同样的事情,而 shell 脚本只需一行即可完成。
答案2
以 root 身份编写脚本,将密码放入 root 的 .my.cnf(权限为 600)。然后,您无需输入密码即可运行 mysql 命令。
我已经听到了上百万人的尖叫声 - 但我的逻辑很简单。如果有人闯入你的服务器并设法将其权限提升到 root,那么你已经输了,他们已经可以访问所有内容了。
如果只有 root 可以读取 .my.cnf,那么它就和在任何其他文件中输入密码一样安全,但这意味着你永远不会在命令行中运行传递密码的脚本,因为这些脚本可以被任何用户使用 ps -ef。