
標題幾乎說明了這一點。轉換為受信任的 PDF是一個很有價值的工具,如果能在 Ubuntu 生態系統中實現它那就太好了。
編輯:「可信任PDF」是一種PDF 文件,其中僅包含(a) 每個頁面上由可信任進程(即在為此目的而啟動的可信任VM 中)產生的光柵圖像,以及可選的(b) 來自這些進程的文字OCR光柵影像。
答案1
問題
您有一個不受信任的 PDF 檔案。它可能包含惡意軟體,而該惡意軟體可能會感染您的電腦並對電腦做出可怕的事情。
您希望將此 PDF 轉換為沒有任何惡意軟體的「可信任」PDF,而不會危及您的 Ubuntu 電腦。
方法
想法是安裝多次通過在您的 Ubuntu 電腦中,並使用預設的主虛擬機器 (VM) 來「扁平化」不受信任的 PDF 檔案。拼合 PDF 的過程涉及將 PDF 文件轉換為 postscript (PS) 文件,然後將 PS 文件轉換回 PDF。產生的 PDF 是“可信的”,因為原始 PDF 中的任何惡意軟體預計都不會在雙重轉換過程中倖存下來。
最後,一旦轉換完成,虛擬機器就會被銷毀。因此,惡意軟體可能對原始 PDF 中的 VM 所做的任何變更都會隨之被破壞。
概念證明
該解決方案基於命令列,我們將在終端機中鍵入(或貼上)命令。
首先讓我們使用以下命令在您的電腦中安裝 Multipass:
sudo snap install 多通道
您只需要做一次。
其餘的工作由 bash 腳本完成。我稱之為 flatten.sh。將下面的腳本保存在您的主資料夾中flatten.sh
並使其可執行。
#!/bin/bash
if [ -z $1 ]; then
echo "No argument set. Valid argument is a PDF filename.pdf in the $HOME folder"
read -ep "Enter filename: " FULLNAME
else
FULLNAME=$1
fi
if [ ! -f $FULLNAME ]; then
echo "The file $FULLNAME not found."
echo "Valid argument is a PDF filename.pdf in the $HOME folder"
echo "exiting..."
exit 1
fi
INPNAME=$(basename $FULLNAME)
DIR=$(dirname $FULLNAME)
OUTNAME="Trusted-$INPNAME"
multipass start
multipass exec primary -- sudo apt update
multipass exec primary -- sudo apt install ghostscript -y
multipass exec primary -- cp "Home/$INPNAME" .
multipass exec primary -- pdf2ps "$INPNAME" temp
multipass exec primary -- ps2pdf temp "$OUTNAME"
multipass exec primary -- mv "$OUTNAME" Home/
multipass stop primary
multipass delete primary
multipass purge
假設您有一個test.pdf
您不信任的文件。使用以下命令運行腳本:
./flatten.sh test.pdf
該文件test.pdf
應該位於您的 $HOME 資料夾中。如果您的 PDF 檔案位於其他資料夾中,則腳本(如編寫的那樣)將找不到它。
以下是啟動此腳本後將發生的事情清單:
- 將創建一個虛擬機
- VM 中將安裝最小版本的 Ubuntu
ghostscript
將安裝轉換所需的腳本- 不受信任的 PDF 檔案將複製到 VM 的虛擬儲存中。
- 未經驗證的 PDF 將轉換為臨時 PS 文件,並且
- 臨時 PS 檔案將轉換為帶有“TRUTED-”前綴的“受信任”PDF。
- 受信任的 PDF 將移回您的主資料夾。
- VM 將被停止、刪除和清除。
整個過程將需要一些時間,特別是 VM 的啟動和ghostscript
.
注意:如果不受信任的 PDF 檔案非常大,Multipass VM 可能會耗盡預設分配的虛擬記憶體。有關如何為虛擬機器分配更多記憶體的信息,請參閱多通道文件。
缺點
據我所知,在安裝 Ghostscript 後,無法在 Multipass 中拍攝主虛擬機的快照,並在下次需要清理 PDF 時旋轉該儲存的虛擬機器。如果這是可能的,那麼該過程將花費更少的時間。
其他方式
實現類似結果的另一種方法可能是使用LDX/LXC貨櫃。 LXD 支援快照,且僅包含 Ghostscript 的自訂容器可能比完整的 VM 輕一些。但是,我對 LXD/LXC 沒有任何經驗。
希望這可以幫助