Эта проблема
У вас есть ненадежный файл PDF. Он может содержать вредоносное ПО, и вредоносное ПО может заразить ваш компьютер и сделать с ним ужасные вещи.
Вы хотите преобразовать этот PDF-файл в «надежный» PDF-файл, не содержащий вредоносных программ, не подвергая опасности ваш компьютер с Ubuntu.
Метод
Идея в том, чтобы установить Многопроходный на вашем компьютере с Ubuntu и используйте основную виртуальную машину (ВМ) по умолчанию, чтобы «сгладить» ненадежный PDF-файл. Процесс выравнивания PDF включает преобразование файла PDF в файл PostScript (PS), а затем преобразование файла PS обратно в PDF. Полученный PDF-файл является «доверенным», поскольку ожидается, что любое вредоносное ПО в исходном PDF-файле не переживет процесс двойного преобразования.
Наконец, после завершения преобразования виртуальная машина уничтожается. Таким образом, любые изменения, которые могут быть внесены в виртуальную машину вредоносным ПО в исходном PDF-файле, уничтожаются вместе с ним.
Доказательство концепции
Это решение основано на командной строке, где мы будем вводить (или вставлять) команды в терминал.
Сначала давайте установим Multipass на ваш компьютер с помощью следующей команды:
sudo snap установить мультипасс
Вы должны сделать это только один раз.
Остальную работу выполняет bash-скрипт. Я называю это flatten.sh. Сохраните приведенный ниже скрипт в своей домашней папке как сгладить.sh
и сделать его исполняемым.
#!/бин/баш
если [-z $1]; тогда
echo "Аргумент не задан. Допустимым аргументом является имя файла PDF.pdf в папке $HOME"
читать -ep "Введите имя файла: " ПОЛНОЕ ИМЯ
еще
ПОЛНОЕ ИМЯ=$1
фи
если [ ! -f $ ПОЛНОЕ ИМЯ]; тогда
echo "Файл $FULLNAME не найден."
echo "Действительный аргумент - имя файла PDF.pdf в папке $HOME"
эхо "выход..."
выход 1
фи
INPNAME=$(базовое имя $FULLNAME)
DIR=$(имя каталога $FULLNAME)
OUTNAME="Надежный-$INPNAME"
многоходовой пуск
первичный multipass exec -- обновление sudo apt
первичный многопроходный exec -- sudo apt install ghostscript -y
первичный многопроходный exec -- cp "Home/$INPNAME" .
многопроходный исполняемый первичный -- pdf2ps "$INPNAME" временный
многопроходный исполняемый первичный -- ps2pdf temp "$OUTNAME"
multipass exec primary -- mv "$OUTNAME" Home/
многопроходная остановка первичная
многопроходный удалить первичный
многоходовая продувка
Допустим, у вас есть файл с именем тест.pdf
что вы не доверяете. Используйте следующую команду для запуска скрипта:
./flatten.sh тест.pdf
тест.pdf
должен находиться в вашей папке $HOME. Если у вас есть файл PDF в другой папке, скрипт (как он написан) не найдет его.
Вот список вещей, которые произойдут после запуска этого скрипта:
- Будет создана виртуальная машина
- На виртуальной машине будет установлена минимальная версия Ubuntu.
- Скрипт будет установлен
призрачный скрипт
, необходимый для преобразования
- Ненадежный PDF-файл будет скопирован в виртуальное хранилище виртуальной машины.
- Ненадежный PDF-файл будет преобразован во временный файл PS и
- Временный файл PS будет преобразован в «доверенный» PDF с префиксом «Truted-».
- Надежный PDF-файл будет перемещен обратно в вашу домашнюю папку.
- ВМ будет остановлена, удалена и очищена.
Весь этот процесс займет некоторое время, особенно запуск виртуальной машины и установка призрачный скрипт
.
Примечание. Если ненадежный PDF-файл очень большой, многопроходной виртуальной машине может не хватить виртуальной памяти, выделенной по умолчанию. См. документацию по многопроходному режиму, чтобы узнать, как выделить больше памяти для виртуальной машины.
Недостатки
Насколько я могу судить, нет возможности сделать снимок основной виртуальной машины в Multipass после установки Ghostscript и использовать эту сохраненную виртуальную машину для следующего раза, когда вам нужно очистить PDF-файл. Если бы это было возможно, процесс занял бы немного меньше времени.
Другой путь
Другим способом достижения аналогичных результатов может быть использование Контейнеры LDX/LXC. LXD поддерживает моментальные снимки, и пользовательский контейнер только с Ghostscript может быть немного легче, чем полноценная виртуальная машина. Однако у меня нет опыта работы с LXD/LXC.
Надеюсь это поможет