Linux
在 Linux 上執行敏感命令(包括密碼)而不暴露數據
我在共享網路主機上有一個帳戶,它允許我通過 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
,查找它處理這些使用者/傳遞標誌的位置並自己硬編碼這些值(確保腳本具有 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 認為它是使用這些選項執行的)。