Hasta ahora, lo que puedo deducir es que fakeroot se usa para dar propiedad a un archivo que debe 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
: permitir que los programas que esperan ejecutarse como root se ejecuten como un usuario normal, al tiempo que se pretende que las operaciones que requieren root tengan éxito.
Esto se usa normalmente al compilar un paquete, de modo que el proceso de instalación del paquete que se está instalando puede continuar sin errores (incluso si se ejecuta chown root:root
, o install -o root
, etc.). fakeroot
recuerda la propiedad falsa que pretendía dar archivos, por lo que las operaciones posteriores que miran la propiedad ven esto en lugar de la real; esto permite tar
ejecuciones posteriores, 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 al alquitrán para que cree un archivo propiedad de root, ¿por qué no hacer algo similar con SUID?
fakeroot
no engaña tar
a hacer nada, 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 necesita fakeroot
producir un tarball que contenga un archivo propiedad de root y suid; si tiene un binario evilbinary
, en ejecución tar cf evil.tar --mode=4755 --owner=root --group=root evilbinary
, como usuario normal, creará un tarball que contiene evilbinary
, propiedad de root y suid. Sin embargo, no podrá extraer ese tarball y preservar esos permisos a menos que lo haga como root: aquí no hay escalada de privilegios. fakeroot
es un privilegio deherramienta de escalado: le permite ejecutar una compilación como usuario normal, al tiempo que conserva los efectos que la compilación habría tenido si se hubiera ejecutado como raíz, 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 comprender el uso fakeroot
con más detalle, considere que una distribución de distribución típica implica las siguientes operaciones (entre muchas otras):
- instalar archivos, propiedad de root
- ...
- archivar esos archivos, aún propiedad de root, de modo que cuando se extraigan, serán 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 convierte
- instalar archivos, propiedad de root: esto falla, pero
fakeroot
pretende que tiene éxito y recuerda la propiedad modificada
- ...
- archivar esos archivos, aún propiedad de root: cuando
tar
(o cualquier archivo que se esté usando) 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 una compilación de paquetes sin ser root, mientras obtiene los mismos resultados que obtendría si realmente se ejecutara como root. El uso 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 ellasfakeroot
. Esto es compatible dpkg
directamente con la Rules-Requires-Root
directiva (ver rootless-builds.txt
).
Para comprender el propósito fakeroot
y los aspectos de seguridad de la ejecución como root o no, puede ser útil considerar el propósito del empaquetado. Cuando instala un software desde la fuente, para usarlo en todo el sistema, proceda de la siguiente manera:
- construir el software (que se puede hacer sin privilegios)
- instale el software (que debe hacerse como root, o al menos como un usuario autorizado para escribir en las ubicaciones apropiadas del sistema)
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 el software, el proceso se convierte en:
- construir el software (sin privilegios especiales)
- pretender instalar el software (nuevamente sin privilegios especiales)
- capturar la instalación del software como un paquete (ídem)
- hacer que el paquete esté disponible (ídem)
Ahora un usuario completa el proceso instalando el paquete, que debe hacerse como root (o de nuevo, un usuario con los privilegios apropiados para escribir en las ubicaciones apropiadas). Aquí es donde se realiza el proceso privilegiado retrasado, 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 ejecutarlo como root.