在 Linux 上运行敏感命令(包括密码)而不暴露数据

在 Linux 上运行敏感命令(包括密码)而不暴露数据

我在共享网络主机上有一个帐户,允许我通过 SSH 在服务器上工作。由于使用网络安装程序安装 Magento 时遇到一些问题,我切换到命令行安装。安装命令如下所示:

php -f install.php -- \
...
--db_host "dbhost" \
--db_name "dbname" \
--db_user "username" \
--db_pass "password" \
...
--admin_username "username" \
--admin_password "password" \
...

当命令运行时(并且运行几分钟),当然该服务器上的其他人都可以通过检查正在运行的进程(例如)来查看参数(和密码)ps aux。我只是想知道是否有可能以某种方式隐藏这些数据(例如使用某种包装脚本/程序)?

答案1

不容易。如果你编写了一个执行该命令的包装器脚本,该命令仍会出现在 中ps

如果您对 PHP 有足够的了解,您可以打开它install.php,查找它处理这些用户/密码标志的位置并自己对这些值进行硬编码(确保脚本具有 700 个权限,以便其他人无法读取它),然后您可以运行该命令而不需要这些标志。

假设他们的脚本不会试图猜测它是如何运行的并且做出不适当的反应,你可以做这样的事情:

<?php
  unset($argv);
  $argv=array("install.php",
     "--db_host","dbhost",
     "--db_name","dbname",
     ...
     "--and_so_on","value"
     );
  include("install.php");
?>

作为一个新脚本(再次模式 700)并运行它php newinstall.php$argv通常是命令参数的数组(以命令名称开头),因此在这里您可以使用unset()现有的脚本并创建一个包含所有所需命令行选项的新脚本,然后使用include()install.php 让 PHP 执行该脚本(使用经过修改的 $argv 列表让 install.php 认为它是用这些选项执行的)。

答案2

一种技术性较低的方法(我意识到最终这不是您问题的答案!),但在这种情况下,为了方便起见,我过去只是使用一次性详细信息,一旦安装,就通过管理系统/生成的配置文件进行更改。

相关内容