Bash
執行前驗證命令二進製文件
是否有任何方法可以檢查您從 bash 腳本中實際執行的內容?
假設您的 bash 腳本正在呼叫多個命令(例如:
tar
,scp
,mysqldump
),並且您願意確保這tar
是實際的,真實的tar
,這可以通過root
使用者作為文件和父目錄所有者以及唯一具有寫入權限的使用者來確定而不是一些/tmp/surprise/tar
擁有www-data
或apache2
成為所有者的人。當然我知道
PATH
環境,我很想知道這是否可以從正在執行的 bash 腳本中額外檢查,如果可以,具體如何?範例:(虛擬碼)
tarfile=$(which tar) isroot=$(ls -l "$tarfile") | grep "root root" #and so on...
您可以從一開始就執行正確的二進製文件,而不是驗證您要執行的二進製文件。例如,如果你想確保你不會執行
/tmp/surprise/tar
,只需/usr/bin/tar
在你的腳本中執行。或者,$PATH
在執行任何東西之前將您的值設置為合理的值。如果您不信任
/usr/bin/
其他系統目錄中的文件,則無法重新獲得信心。在您的範例中,您正在檢查所有者ls
,但您怎麼知道您可以信任ls
?相同的論點適用於其他解決方案,例如md5sum
和strace
。在需要高度信任系統完整性的情況下,使用IMA等專業解決方案。但這不是您可以從腳本中使用的東西:整個系統必須以一種特殊的方式設置,並具有不可變文件的概念。