Bash

不使用文件系統臨時讀寫數據

  • July 24, 2019

我在管理 debian 盒子的流浪環境中使用 ansible。由於具有保險庫加密數據(例如數據庫根密碼)的多個 ansible 供應商,我必須由第一個供應商輸入保險庫密碼一次。目前,此密碼儲存在/tmp每個 ansible 供應商中,由腳本讀取,並被最後一個供應商覆蓋,/dev/null然後被最後一個供應商刪除。

Ansible 能夠呼叫返回保險庫密碼的腳本。所以這個腳本將在一個單獨的 shell 中執行。

如果攻擊者設法闖入虛擬機,他就有機會恢復任何臨時文件並獲得保管庫密碼。

雖然這些流浪環境將用於生產,但我正在尋找一種更安全的方法。我首先想到的是以某種方式讀取和寫入記憶體。因此,VM 重新啟動會擦除記憶體。我知道上面提到的數據可以以某種方式在磁碟上交換。但我認為獲取這些數據比臨時文件方法更難。

編輯

如果配置程序失敗,我忘了提及安全風險。然後最後一個provisioner 將不會被執行,臨時文件會保留在文件系統上。


我提供了一個額外的答案,僅針對對導致該問題的起源問題的解決方案感興趣的任何人顯示集成解決方案。

使用以下命令創建 1 MB RAM 磁碟tmpfs

mkdir /tmp/ramdisk
mount -t tmpfs -o size=1m myramdisk /tmp/ramdisk

ramfsRAM 磁碟不交換,但在使用 RAM 磁碟時可以關閉和打開交換:tmpfsswapoff -aswapon -a如果需要確保在使用tmpfsRAM 磁碟期間沒有發生交換。解除安裝:

umount /tmp/ramdisk

也許我錯過了一些東西,但我看不到在 ; 中描述 RAM 磁碟的好處/etc/fstab;但是,如果需要,以下內容應該足以使 RAM 磁碟root僅對使用者可用(mode=0700):

tmpfs /tmp/ramdisk tmpfs rw,mode=0700,size=1m

引用自:https://unix.stackexchange.com/questions/505826