Después de leer algunas respuestas bastante agradables de esta pregunta , todavía no sé por qué querría fingir que es root sin obtener ninguno de los beneficios de ser root.
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?
Una discusión de Grupos de Google aquí señala que necesita fakeroot para compilar un núcleo Debian (si desea hacerlo desde un usuario no privilegiado). Mi comentario es que, la razón por la que necesita ser root para compilar es probablemente porque los permisos de lectura no se establecieron para otros usuarios. Si es así, ¿no es una violación de seguridad que fakeroot permita la compilación (lo que significa que gcc ahora puede leer un archivo que era para root)?
Esta respuesta aquí describe que las llamadas reales del sistema se realizan con uid / gid real del usuario , así que de nuevo, ¿dónde ayuda fakeroot?
¿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?
Por lo que he reunido, fakeroot es útil cuando quieres cambiar el propietario de cualquier archivo de paquete que hayas creado para rootear. Pero puede hacer eso con chown, entonces , ¿ dónde me falta entender cómo se supone que se usará este componente?
Respuestas:
Porque no puedes hacer eso con
chown
, al menos no como usuario no root. (Y si está ejecutando como root, no necesitafakeroot
). Ese es el objetivo defakeroot
: 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
, oinstall -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 permitetar
ejecuciones posteriores, por ejemplo, para almacenar archivos como propiedad de root.fakeroot
no engañatar
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 necesitafakeroot
producir un tarball que contenga un archivo propiedad de root y suid; si tiene un binarioevilbinary
, en ejecucióntar cf evil.tar --mode=4755 --owner=root --group=root evilbinary
, como usuario normal, creará un tarball que contieneevilbinary
, 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):La primera parte obviamente falla si no eres root. Sin embargo, cuando se ejecuta bajo
fakeroot
, como usuario normal, el proceso se conviertefakeroot
pretende que tiene éxito y recuerda la propiedad modificadatar
(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ó anteriormentePor 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 ellas
fakeroot
. Esto es compatibledpkg
directamente con laRules-Requires-Root
directiva (verrootless-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: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:
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.fuente
tar --mode --owner
todos y cada uno de los archivos agregados al archivo (y también funciona con otros programas). Los posibles problemas surgen si / cuando desempaqueta un archivo tar o archivo no confiable como raíz, no cuando lo crea.NO. La raíz falsa le permite ejecutar herramientas de manipulación de permisos e informes, informará constantemente. Sin embargo, en realidad no otorgará estos permisos. Simplemente parecerá que los tienes (falso). No cambiará nada fuera del medio ambiente.
Es útil, si desea crear una estructura de directorio, que contenga propiedad y permisos, que su usuario no pueda establecer, que luego usará tar, zip u otro paquete.
Que no realmente elevar los permisos, es falso. No le permite hacer nada (borrar, 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 una falla de seguridad, ya que no permite el acceso, ni nada que no pueda hacer sin él. Se ejecuta sin privilegios. Todo lo que dosis es interceptar llamadas a
chown
,chmod
, etc. ellas un no-operación hace, excepto que registra lo que habría sucedido. También intercepta llamadas astat
etc. para que informe los permisos y la propiedad, desde su propia base de datos interna, como si se hubieran hecho los otros 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 / editable anteriormente, no será legible / editable. Cualquier archivo especial (por ejemplo, dispositivos) creado, no tendrá poderes especiales. Cualquier set-uid (a otro usuario), los archivos no se establecerán-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, como ninguna otra aplicación podría hacer. Dentro de la máquina virtual, puede parecer que haces cualquier cosa. Puede reinventar el sistema de seguridad para que sea igual o diferente. Sin embargo, todo esto existirá en el host, como recursos propiedad del usuario / grupo del proceso que ejecuta el entorno virtual.
fuente
Ya hay dos respuestas buenas y muy detalladas aquí, pero solo señalaré que el párrafo introductorio de la página de manual original 1 en realidad lo explica de manera bastante clara y concisa:
fakeroot
Fakeroot permite a un usuario no root crear archivos que contengan archivos propiedad de root, lo cual es una parte crítica de la generación y distribución de paquetes de software binario en Linux. Sin ellos
fakeroot
, los archivos de paquetes tendrían que generarse mientras se ejecutan como raíz real, de modo que contengan la propiedad y los permisos correctos del archivo. Eso sería un riesgo de seguridad. Crear y empaquetar software potencialmente no confiable es una gran exposición si se hace con privs raíz. Gracias afakeroot
, un usuario sin privilegios con archivos sin privilegios aún puede generar archivos que contienen archivos con propiedad raíz. 2Pero no es un riesgo de seguridad, porque no hay nada en el archivo es en realidad propiedad de root hasta que los archivos se EXTRAEN . 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
usuario privilegiado extrae un archivo asistido que contiene archivos "raíz", es donde la raíz "falsa" finalmente se vuelve real. Hasta ese momento, no se obtienen ni se omiten los privilegios de root reales.Notas
fakeroot
si estuvieran instalados, incluidosfakeroot-ng
ypseudo
. Pero, en mi humilde opinión, ni la página de manual de "imitador" es tan clara acerca de ir directamente al grano en esta pregunta. Quédese con el original, únicofakeroot
OGOtras distribuciones / sistemas de empaque superan esto simplemente al no utilizar la propiedad raíz en sus archivos de paquetes. En Fedora, por ejemplo, un usuario sin privilegios puede compilar, instalar y empaquetar el software sin necesidad de hacerlo
fakeroot
. Todo se hace dentro del$HOME/rpmbuild/
espacio del usuario , y los pasos normalmente privilegiados comomake install
ser redirigido (a través de mecanismos como--prefix
yDESTDIR
) a una$HOME/rpmbuild/BUILDROOT/
jerarquía que podría considerarse una especie de espacio "fakechroot" (sin usar realmentefakechroot
).Pero incluso durante
make install
, todo se ejecuta como propiedad del usuario sin privilegios. La propiedad y los permisos de los archivos extraídos se establecerán enroot,root
y0644
(o0755
para los ejecutables) de manera predeterminada, a menos que se anulen en el.spec
archivo de definición del paquete ( ) en cuyo caso se almacenan como metadatos dentro del paquete final. Debido a que los permisos o la propiedad no se aplican realmente hasta el proceso de instalación del paquete rpm (privilegiado), nofakeroot
se necesita ni root ni durante el empaquetado. Pero enfakeroot
realidad es solo un camino diferente hacia el mismo resultado.fuente
fakeroot-ng
pretende reemplazarfakeroot
, pero en la práctica no lo ha reemplazado, y AFAIKfakeroot
sigue siendo la herramienta utilizada en Debian de forma predeterminada (cuando sea necesario).fakeroot
manual, y Google me dejó en casafakeroot-ng
(disfrazado defakeroot(1)
), y supongo que presumí en exceso. Pero ahora veo que fakeroot-ng no se ha actualizado desde 2014 , mientras que fakeroot todavía está activo . Aparentemente también hay un pseudo que lo intentó hace un par de años, pero ahora se ha estancado. Ajustaré mi respuesta en consecuencia.fakeroot
manual en el sitio de Debian conduce afakeroot-ng
la versión por defecto. Echa un vistazo al último párrafo de lafakeroot-ng
para un giro divertido ;-).