GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo fakeroot no es una brecha de seguridad en Linux?

Hasta ahora, lo que puedo deducir es que fakeroot se usa para dar propiedad a un archivo que necesita ser root cuando se descomprime/tar'ed. Mi pregunta es, ¿por qué no puedes hacer eso con chown?

Porque no puedes hacer eso con chown , al menos no como usuario no root. (Y si está ejecutando como root, no necesita fakeroot .) Ese es el objetivo de fakeroot :para permitir que los programas que esperan ejecutarse como root se ejecuten como un usuario normal, mientras se finge que las operaciones que requieren root tienen éxito.

Esto se usa normalmente cuando se crea un paquete, de modo que el proceso de instalación del paquete que se está instalando pueda continuar sin errores (incluso si ejecuta chown root:root , o install -o root , etc.). fakeroot recuerda la propiedad falsa que pretendía dar a los archivos, por lo que las operaciones posteriores que buscan la propiedad ven esto en lugar de la verdadera; esto permite posteriores tar se ejecuta, por ejemplo, para almacenar archivos como propiedad de root.

¿Cómo detiene fakeroot las escaladas de privilegios no deseadas en Linux? Si fakeroot puede engañar a tar para que cree un archivo que era propiedad de root, ¿por qué no hacer algo similar con SUID?

fakeroot no engaña a tar para hacer cualquier cosa, conserva los cambios que la compilación desea realizar sin permitir que esos cambios surtan efecto en el sistema que aloja la compilación. No necesitas fakeroot para producir un tarball que contenga un archivo propiedad de root y suid; si tiene un evilbinary binario , ejecutando tar cf evil.tar --mode=4755 --owner=root --group=root evilbinary , como usuario habitual, creará un tarball que contenga evilbinary , propiedad de root, y suid. Sin embargo, no podrá extraer ese tarball y conservar esos permisos a menos que lo haga como root:aquí no hay escalada de privilegios. fakeroot es un privilegio de -herramienta de escalamiento:le permite ejecutar una compilación como un usuario normal, al tiempo que conserva los efectos que la compilación habría tenido si se hubiera ejecutado como root, lo que permite que esos efectos se reproduzcan más tarde. Aplicar los efectos “de verdad” siempre requiere privilegios de root; fakeroot no proporciona ningún método para adquirirlos.

Para entender el uso de fakeroot con más detalle, considere que una compilación de distribución típica involucra las siguientes operaciones (entre muchas otras):

  • archivos de instalación, propiedad de root
  • ...
  • archivar esos archivos, aún propiedad de root, para que cuando se extraigan, sean propiedad de root

La primera parte obviamente falla si no eres root. Sin embargo, cuando se ejecuta bajo fakeroot , como usuario normal, el proceso se vuelve

  • instalar archivos, propiedad de root — esto falla, pero fakeroot finge tener éxito, y recuerda el cambio de propiedad
  • ...
  • archivar esos archivos, aún propiedad de root, cuando tar (o cualquier archivador que se esté utilizando) pregunta al sistema cuál es la propiedad del archivo, fakeroot cambia la respuesta para que coincida con la propiedad que registró anteriormente

Por lo tanto, puede ejecutar la compilación de un paquete sin ser root, mientras obtiene los mismos resultados que obtendría si realmente estuviera ejecutando como root. Usando fakeroot es más seguro:el sistema aún no puede hacer nada que su usuario no pueda hacer, por lo que un proceso de instalación no autorizado no puede dañar su sistema (más allá de tocar sus archivos).

En Debian, las herramientas de compilación se han mejorado para que ya no sea necesario, y puede compilar paquetes sin fakeroot . Esto es compatible con dpkg directamente con el Rules-Requires-Root directiva (ver rootless-builds.txt ).

Para entender el propósito de fakeroot , y los aspectos de seguridad de ejecutarse como root o no, podría ser útil considerar el propósito del empaquetado. Cuando instala una pieza de software desde la fuente, para usarla en todo el sistema, debe proceder de la siguiente manera:

  1. construir el software (que se puede hacer sin privilegios)
  2. instalar el software (que debe hacerse como raíz, o al menos como un usuario con permiso para escribir en las ubicaciones del sistema adecuadas)

Cuando empaqueta una pieza de software, está retrasando la segunda parte; pero para hacerlo con éxito, aún necesita "instalar" el software en el paquete en lugar de en el sistema. Entonces, cuando empaqueta software, el proceso se convierte en:

  1. crear el software (sin privilegios especiales)
  2. simule instalar el software (nuevamente sin privilegios especiales)
  3. capturar la instalación del software como un paquete (ídem)
  4. hacer que el paquete esté disponible (ídem)

Ahora un usuario completa el proceso instalando el paquete, lo que debe hacerse como root (o nuevamente, un usuario con los privilegios apropiados para escribir en las ubicaciones apropiadas). Aquí es donde se realiza el proceso privilegiado demorado, y es la única parte del proceso que necesita privilegios especiales.

fakeroot ayuda con los pasos 2 y 3 anteriores al permitirnos ejecutar procesos de instalación de software y capturar su comportamiento, sin ejecutar como root.


NO. La raíz falsa le permite ejecutar herramientas de manipulación de permisos e informes, informará de manera consistente. Sin embargo, en realidad no otorgará estos permisos. Parecerá que los tienes (falsos). No cambiará nada fuera del entorno.

Es útil, si desea crear una estructura de directorio, que contenga la propiedad y los permisos, que su usuario no pueda establecer, que luego descargue tar, zip u otro paquete.

no Realmente eleva los permisos, es falso. No le permite hacer nada (eliminar, escribir, leer) que de otro modo no podría hacer. Podría producir el paquete (en teoría) sin él. Podría obtener un informe falso (ls ) sin él.

No es un fallo de seguridad, porque no permitir el acceso, o cualquier cosa que no pueda hacer sin él. Se ejecuta sin privilegios. Todo lo que hay que hacer es interceptar llamadas a chown , chmod , etc. Los convierte en una no operación, excepto que registra lo que habría sucedido. También intercepta llamadas a stat etc. para que reporte permisos y propiedad, desde su propia base de datos interna, como si se hubieran hecho los demás comandos. Esto es útil, porque si luego comprime el directorio, tendrá los permisos falsos. Si luego descomprime, como root, los permisos se volverán reales.

Cualquier archivo que no sea legible/escribible antes, seguirá sin ser legible/escribible. Cualquier archivo especial (por ejemplo, dispositivos) creado, no tendrá poderes especiales. Cualquier set-uid (a otro usuario), los archivos no se establecerán en uid. Cualquier otra escalada de privilegios no funcionará.

Es un tipo de máquina virtual:una máquina virtual, en general, puede simular cualquier entorno/SO, pero no puede hacer nada al host que cualquier otra aplicación no pueda hacer. Dentro de la máquina virtual, puede aparecer para hacer cualquier cosa. Puede reinventar el sistema de seguridad para que sea igual o diferente. Sin embargo, todo existirá en el host, como recursos propiedad del usuario/grupo del proceso que ejecuta el entorno virtual.


Ya hay dos respuestas buenas y muy detalladas aquí, pero solo señalaré que el párrafo introductorio del original fakeroot La página de manual lo explica de manera bastante clara y concisa:

raíz falsa ejecuta un comando en un entorno en el que parece tener privilegios de root para la manipulación de archivos. Esto es útil para permitir a los usuarios crear archivos (tar, ar, .deb, etc.) con archivos en ellos con permisos/propiedad de raíz. Sin raíz falsa uno necesitaría tener privilegios de root para crear los archivos constituyentes de los archivos con los permisos y propiedad correctos, y luego empacarlos, o uno tendría que construir los archivos directamente, sin usar el archivador.

Fakeroot permite que un usuario que no sea root cree archivos que contengan archivos propiedad de root, lo cual es una parte fundamental de la generación y distribución de paquetes de software binario en Linux. Sin fakeroot , los archivos del paquete tendrían que generarse mientras se ejecutan como raíz real, para que contengan la propiedad y los permisos correctos del archivo. Eso sería ser un riesgo para la seguridad. Crear y empaquetar software potencialmente no confiable es una gran exposición si se hace con privilegios de root. Gracias a fakeroot , un usuario sin privilegios con archivos sin privilegios aún puede generar archivos que contengan archivos con propiedad raíz.

Pero no es un riesgo de seguridad, porque nada en el archivo es realmente propiedad de root hasta que los archivos sean EXTRACTOS . E incluso entonces, los archivos solo se extraerán con sus permisos de raíz intactos si lo hace un usuario privilegiado. Ese paso, donde un fakeroot Un usuario privilegiado extrae un archivo asistido que contiene archivos "raíz":es donde la raíz "falsa" finalmente se vuelve real. Hasta ese momento, nunca se obtienen ni se eluden privilegios reales de root.

Notas

  1. Fakeroot ha generado algunos competidores/imitadores que se harán pasar por fakeroot si está instalado, incluido fakeroot-ng y pseudo . Pero en mi humilde opinión, ni la página del manual del "imitador" es tan clara acerca de ir directamente al grano en esta pregunta. Sigue con el original, uno y único fakeroot OG
  2. Otras distribuciones/sistemas de empaquetado superan esto simplemente no utilizando la propiedad raíz en sus archivos de paquetes. En Fedora, por ejemplo, un usuario sin privilegios puede compilar, instalar y empaquetar software sin necesidad de fakeroot . Todo se hace dentro del $HOME/rpmbuild/ del usuario. espacio y pasos normalmente privilegiados como make install ser redirigido (a través de mecanismos como --prefix y DESTDIR ) a un $HOME/rpmbuild/BUILDROOT/ jerarquía que podría considerarse una especie de espacio "fakechroot" (sin usar realmente fakechroot ).

    Pero incluso durante make install , todo se ejecuta como propiedad del usuario sin privilegios. La propiedad y los permisos del archivo extraído se establecerán en root,root y 0644 (o 0755 para ejecutables) de forma predeterminada, a menos que se anule en la definición del paquete (.spec ) en cuyo caso se almacenan como metadatos dentro del paquete final. Debido a que no se aplican permisos o propiedad hasta el proceso de instalación (privilegiado) del paquete rpm, ni root ni fakeroot es necesario durante el envasado. Pero fakeroot es realmente un camino diferente al mismo resultado.


Linux
  1. Cómo eliminar el archivo de correo raíz (buzón) en Linux

  2. Cómo personalizar los entornos de usuario de Linux

  3. ¿Linux Setuid no funciona?

  4. Linux:¿por qué no funciona Setuid?

  5. Cómo crear usuarios casi equivalentes a root pero no usuarios idénticos a root en Linux

Cómo ver o enumerar trabajos cron en Linux

Cómo cambiar la contraseña de root en Ubuntu Linux

Cómo instalar WordPress en Linux Mint 19

Cómo cifrar el sistema de archivos raíz en Linux

Cómo cambiar la contraseña de root en Linux

Cómo cambiar la contraseña de root en Kali Linux