
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.sh
y 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.pdf
en el que no confía. Utilice el siguiente comando para ejecutar el script:
./flatten.sh test.pdf
Debería test.pdf
estar 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:
- Se creará una máquina virtual
- Se instalará una versión mínima de Ubuntu en la VM.
- Se instalará el script
ghostscript
necesario para la conversión. - El archivo PDF que no es de confianza se copiará en el almacenamiento virtual de la máquina virtual.
- El PDF no confiable se convertirá en un archivo PS temporal y
- El archivo PS temporal se convertirá a PDF "confiable" con el prefijo "Truted-".
- El PDF confiable volverá a su carpeta de inicio.
- 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