Me gustaría poder extraer un archivo tar, de modo que todos los archivos extraídos se coloquen en un determinado directorio de prefijos. Cualquier intento de los archivos tar para escribir en directorios externos debería hacer que la extracción falle.
Como puede imaginar, esto es para que pueda extraer de forma segura un archivo tar no confiable.
¿Cómo puedo hacer esto con GNU tar?
Se me ocurrio:
tar --exclude='/*' --exclude='*/../*' --exclude='../*' -xvf untrusted_file.tar
pero no estoy seguro de que esto sea lo suficientemente paranoico.

-topción.Respuestas:
No necesitas la paranoia en absoluto. GNU
tar, y de hecho cualquier programa bien escritotarproducido en los últimos 30 años más o menos, se negará a extraer archivos en el tarball que comiencen con una barra o que contengan..elementos, por defecto.tarDebe esforzarse para obligar a los programas modernos a extraer tales tarballs potencialmente maliciosos: tanto GNU como BSDtarnecesitan la-Popción para que deshabiliten esta protección. Consulte la sección Nombres de archivos absolutos en el manual de GNU tar.Sin
-Pembargo, POSIX no especifica el indicador, por lo que otrostarprogramas pueden tener diferentes formas de lidiar con esto. Por ejemplo, las herramientas Schilystardel programa de usos-/y-..para desactivar estas protecciones.Lo único que podría considerar agregar a un
tarcomando ingenuo es una-Cbandera para forzarlo a extraer cosas en un directorio temporal seguro, para que no tenga que hacerlocdprimero.A un lado :
Técnicamente,
tarPOSIX ya no lo especifica. Intentaron decirle al mundo informático de Unix que deberíamos estar usandopaxahora en lugar detarycpio, pero el mundo informático los ignoró en gran medida.Es relevante tener en cuenta que la especificación POSIX para
paxno dice cómo debe manejar las barras inclinadas o los..elementos incrustados . Hay un--insecureindicador no estándar para que BSDpaxsuprima las protecciones contra..elementos de ruta incrustados , pero aparentemente no hay una protección predeterminada contra las barras diagonales principales; lapaxpágina de manual de BSD recomienda indirectamente escribir-sreglas de sustitución para tratar el riesgo de ruta absoluto.Ese es el tipo de cosas que suceden cuando un estándar de facto permanece en uso activo mientras que el estándar de jure se ignora en gran medida.
fuente
pax - portable archive interchangeAwww, qué lindo, POSIX pensando que va a reemplazar posiblemente el formato de archivo más utilizado: PCon GNU tar, es simplemente
en un directorio vacio GNU tar elimina automáticamente
/los nombres de los miembros principales cuando se extrae, a menos que explícitamente no se indique lo contrario con la--absolute-namesopción . GNU tar también detecta cuándo el uso de../haría que un archivo se extrajera fuera del directorio de nivel superior y coloca esos archivos en el directorio de nivel superior, por ejemplo, un componentefoo/../../bar/quxse extraerá comobar/quxen el directorio de nivel superiorbar/quxen lugar del padre del directorio de nivel superior . GNU tar también se encarga de los enlaces simbólicos que apuntan fuera del directorio de nivel superior, por ejemplo,foo -> ../..yfoo/barno harábarque se extraiga fuera del directorio de nivel superior.Tenga en cuenta que esto solo se aplica a (versiones suficientemente recientes de) GNU tar (así como a algunas otras implementaciones, por ejemplo, * BSD tar y BusyBox tar). Algunas otras implementaciones no tienen dicha protección.
Debido a los enlaces simbólicos, las protecciones que usa no serían suficientes: el archivo podría contener un enlace simbólico que apunta a un directorio fuera del árbol y extraer archivos en ese directorio. No hay forma de resolver ese problema basándose únicamente en los nombres de los miembros, debe examinar el objetivo de los enlaces simbólicos.
Tenga en cuenta que si está extrayendo en un directorio que ya contiene enlaces simbólicos, es posible que la garantía ya no se mantenga.
fuente
Para cubrir algunos puntos, las otras respuestas no lo han hecho:
Primero, mira lo que hay en el archivo antes de extraerlo:
Si hay algo allí en lo que no confías o no quieres extraer, no extraigas el tarball.
fuente