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

我有一个共享的Web主机上的帐户,它允许我通过SSH在服务器上工作。 由于使用Web安装程序安装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 )来查看参数(和密码)。 我只是想知道是否有可能以某种方式隐藏数据(例如,某种包装脚本/程序)?

不容易。 如果您编写了执行该命令的包装脚本,那么该命令仍将显示在ps

如果你知道足够多的PHP,你可以打开这个install.php ,find它处理这些用户/通行标志的位置,并自己对这些值进行硬编码(确保脚本有700个perm,这样没有人可以读取它),那么你可以运行命令而不需要标志。

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

 <?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()现有的命令参数,并用你需要的所有命令行选项创build一个新的命令参数,然后你将include() install.php让PHP执行这个脚本(使用篡改的$ argv列表让install.php认为它是用这些选项执行的)。

一个技术性较差的方法(最终我不会意识到你的问题的答案!),但在这种情况下,为了方便起见,我过去只是使用一次性的细节,一旦安装完成,就通过pipe理系统/生成的configuration文件更改它们。