El problema

El problema

El título prácticamente lo dice.Convertir a PDF confiableEs una herramienta valiosa y sería fantástico implementarla en el ecosistema Ubuntu.

Editar: un 'PDF confiable' es un archivo PDF que contiene solo (a) imágenes rasterizadas generadas a partir de un proceso confiable (es decir, en una máquina virtual confiable creada para ese propósito) en cada página y, opcionalmente, (b) OCR de texto de esas imágenes rasterizadas.

Respuesta1

El problema

Tienes un archivo PDF que no es de confianza. Puede contener malware y el malware puede infectar su computadora y causarle cosas terribles.

Desea convertir este PDF en un PDF "confiable" que no contenga ningún malware sin poner en peligro su computadora Ubuntu.

El método

La idea es instalarmultipasoen su computadora Ubuntu y use la máquina virtual (VM) principal predeterminada para "aplanar" el archivo PDF que no es de confianza. El proceso de aplanar el PDF implica convertir el archivo PDF a un archivo postscript (PS) y luego convertir el archivo PS nuevamente a PDF. El PDF resultante es "confiable", ya que no se espera que ningún malware en el PDF original sobreviva al proceso de doble conversión.

Finalmente, una vez completada la conversión, la VM se destruye. De modo que cualquier cambio que el malware pueda realizar en la VM en el PDF original se destruye con él.

Una prueba de concepto

Esta solución se basa en la línea de comandos, donde escribiremos (o pegaremos) comandos en la terminal.

Primero instalemos Multipass en su computadora con el siguiente comando:

sudo snap instalar multipaso

Tienes que hacerlo sólo una vez.

El resto del trabajo lo realiza un script bash. Yo lo llamo aplanar.sh. Guarde el siguiente script en su carpeta de inicio flatten.shy hágalo ejecutable.

#!/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

Digamos que tiene un archivo llamado test.pdfen el que no confía. Utilice el siguiente comando para ejecutar el script:

./flatten.sh test.pdf

Debería test.pdfestar en su carpeta $HOME. Si tiene su archivo PDF en una carpeta diferente, el script (tal como está escrito) no lo encontrará.

Aquí está la lista de cosas que sucederán una vez que inicie este script:

  1. Se creará una máquina virtual
  2. Se instalará una versión mínima de Ubuntu en la VM.
  3. Se instalará el script ghostscriptnecesario para la conversión.
  4. El archivo PDF que no es de confianza se copiará en el almacenamiento virtual de la máquina virtual.
  5. El PDF no confiable se convertirá en un archivo PS temporal y
  6. El archivo PS temporal se convertirá a PDF "confiable" con el prefijo "Truted-".
  7. El PDF confiable volverá a su carpeta de inicio.
  8. La VM se detendrá, eliminará y purgará.

Todo este proceso llevará algún tiempo, particularmente el inicio de la VM y la instalación de ghostscript.

Nota: si el archivo PDF que no es de confianza es muy grande, la máquina virtual Multipass puede quedarse sin memoria virtual asignada de forma predeterminada. Consulte la documentación de Multipass sobre cómo asignar más memoria a la VM.

Abajo

Hasta donde puedo decir, no hay forma de tomar una instantánea de la VM principal en Multipass después de instalar Ghostscript y hacer girar esa VM almacenada para la próxima vez que necesite desinfectar un PDF. Si esto fuera posible, el proceso tardaría un poco menos.

De otra manera

Otra forma de lograr resultados similares puede ser utilizarContenedores LDX/LXC. LXD admite instantáneas y un contenedor personalizado con solo Ghostscript puede ser un poco más liviano que una VM completa. Sin embargo, no tengo ninguna experiencia con LXD/LXC.

Espero que esto ayude

información relacionada