¿Por qué necesitamos fakerootcomando en absoluto? ¿No podemos simplemente usar los comandos sudoo su?
La página del manual dice:
fakeroot: ejecuta un comando en un entorno que simula privilegios de root para la manipulación de archivos
About.com dice:
Da un entorno raíz falso. Este paquete está destinado a habilitar algo como:
dpkg-buildpackage -rfakerootes decir, eliminar la necesidad de convertirse en root para la construcción de un paquete. Esto se hace mediante el establecimientoLD_PRELOADdelibfakeroot.so, que proporciona envolturas alrededorgetuid,chown,chmod,mknod,stat, ..., creando así un entorno raíz falsa. Si no comprende nada de esto, ¡no lo necesitafakeroot!
Mi pregunta es, ¿qué propósito especial resuelve eso simple suo sudono? Por ejemplo, para reempaquetar todos los paquetes instalados en ubuntu, le damos el siguiente comando:
$ fakeroot -u dpkg-repack `dpkg --get-selections | grep install | cut -f1`
¿Podemos hacer el comando anterior con sudo o su en lugar de fakeroot como este:
$ sudo dpkg-repack `dpkg --get-selections | grep install | cut -f1`
EDITAR:
Corriendo:
$ sudo dpkg-repack `dpkg --get-selections | grep install | cut -f1`
me da este error:
el directorio de control tiene malos permisos 700 (debe ser> = 0755 y <= 0775)
¿Alguna razón por qué?

sudoosuporque es su máquina.fakeroottiene dos usos: 1) engaña a los programas haciéndole creer que es un usuario root, lo que puede requerir algún software propietario mal escrito, incluso si no es necesario (por lo general, el desarrollador de Windows se ha convertido en Linux) y 2) permite emular el modo de archivo y los cambios de propiedad que no haría De lo contrario, no podrá hacerlo, principalmente para crear untararchivo con los permisos y la propiedad correctos, útil, por ejemplo, al empaquetar software.fakeroot! Si no puede pensar en una situación en la quefakerootsea útil, literalmente no la necesita. Pero las personas que de hecho lo necesitan entienden completamente el caso de uso.Respuestas:
Imagine que es un desarrollador / mantenedor de paquetes, etc. que trabaja en un servidor remoto. Desea actualizar el contenido de un paquete y reconstruirlo, descargar y personalizar un kernel desde kernel.org y compilarlo, etc. Al intentar hacer esas cosas, descubrirá que algunos pasos requieren que tenga
rootderechos (UIDyGID0) por diferentes razones (seguridad, permisos pasados por alto, etc.). Pero no es posible obtenerrootderechos, ya que está trabajando en una máquina remota (y muchos otros usuarios tienen el mismo problema que usted). Esto es exactamente lo quefakeroothace: pretende un efectivoUIDyGIDde 0 al entorno que lo requiere.En la práctica nunca obtienes
rootprivilegios reales (al contrariosuysudoque mencionas).fuente
fakerootpara cambiar la configuración del sistema? Porque el comando que ejecutaremos pensará que se está ejecutando como root y hará lo que queramos que haga. ¿no es así?Para ver claramente la diferencia entre fakeroot y un sudo / su real, simplemente haga:
Mientras esté dentro del shell fakeroot, parece que es root, siempre y cuando no intente hacer nada que realmente necesite privilegios de root. Y esto es exactamente lo que necesita una herramienta de empaque para hacer paquetes que tengan sentido en cualquier máquina.
De hecho, cuando usa fakeroot para empaquetar, lo que quiere lograr es hacer que las herramientas que ejecuta bajo fakeroot vean sus archivos como propiedad de root. Nada más y nada menos. De hecho, su o sudo no funcionará para obtener la propiedad correcta del archivo.
fuente
.debarchivo de este tipo, todos mis/usrarchivos pertenecen a quien sea que llame el usuariofakeroot?fakerootshell, parecen ser. Cuando se crea el paquete .deb dentro de este shell, el propietario del archivo se lee del sistema de archivos (quefakerootintercepta y devuelveroot) y se almacena en el paquete. Al instalar el paquete, dpkg requiere acceso de root porque el paquete indica que el archivo debe ser propiedad de root.Dado que las respuestas son difíciles de entender (para mí mismo) y me tomó un poco de tiempo entenderlo ( este comentario me hizo entenderlo), voy a dar una explicación con suerte mejor.
1. Lo que sucede en fakeroot
Nada más que lo que sucede con tu propio usuario. Absolutamente nada más. Si usted
fakeroot(que cuando se le llama le da un nuevo shell, como losudoharía), simule hacer cosas para las que necesitaba permiso y salga, no pasará absolutamente nada.Si lo piensas, es una pérdida de tiempo total. ¿Por qué harías cosas que en realidad no sucederán? Es una locura. Simplemente podría no haber hecho nada de eso y no habría habido diferencia, ya que no hay rastro de ello.
Espera un minuto...
2. El rastro de fakeroot
No podía ser una huella dejada de
fakeroot. Veamos los comandos en la respuesta de MortenSickel, que es bastante agradable y merece un voto positivo:A primera vista, parece que haberlo usado
fakerootfue una pérdida total de tiempo. Al final, si no lo hubiera usadofakeroot, habría obtenido lo mismo.Lo sutil aquí es esto:
Lo que significa que el contenido del archivo todavía recuerda ser una raíz. Se podría decir que no usar
fakeroothabría producido los mismos resultados. Tienes razón, este ejemplo es demasiado simple.Tomemos otro ejemplo:
Vamos a ver que pasó. Fingí serlo
root, lo cual es totalmente ineficaz, y creéxyy. Fingíxpertenecermyuseryypertenecerroot. En realidad, ambos pertenecenmyuser(como podemos ver al final), pero solo fingí que era así.Luego creé una lista y guardé mi imaginación en un archivo. Más tarde, cuando miro hacia atrás en el archivo, puedo ver a quién imaginé que deberían pertenecer los archivos. Una vez más, en realidad no son propiedad de personas que imaginé, simplemente lo imaginé.
3. Entonces ... ¿Por qué quieres eso otra vez?
Puede decir que realmente no necesitaba fingir ser root para crear esa lista. Podría simplemente haber creado el listado, luego editarlo para reflejar mi imaginación. Tienes razón, no necesitabas
fakerooteso. De hecho, sabiendo que enfakerootrealidad no hace nada, no puedes haber ganado ninguna habilidad que no tenías antes.Pero , y esto es de lo que
fakerootse trata, editar la lista podría no ser trivial. Como ocurre con un paquete que se puede instalar en su sistema, tiene un formatotared,gziped,xzed,bzip2ed o cualquier otro formato que mantenga sus archivos juntos y recuerde sus permisos y propietarios. ¿Puede modificar fácilmente el archivo comprimido y editar la propiedad de un archivo? No sé sobre ti, pero no puedo pensar en una manera.¿Podría haber una herramienta construida que, una vez que todo esté comprimido, modifique el archivo comprimido y edite programáticamente las propiedades y los permisos? Sí, podría. Entonces, podría fingir las propiedades antes de comprimirlas o cambiarlas después. La gente de Debian decidió que lo primero es más fácil.
4. ¿Por qué no solo usar
sudo?En primer lugar, no necesita privilegios de root para compilar software y no necesita privilegios de root para comprimirlos. Entonces, si no lo necesita, realmente debería ser un usuario de Windows para pensar en obtener ese permiso. Pero aparte del sarcasmo, es posible que ni siquiera tenga una contraseña de root.
Además, digamos que tienes permisos de root. Y supongamos que desea simular que un archivo debe tener acceso de lectura solo a la raíz. Entonces
sudo, en realidad, cambias el propietario del archivo y los permisos aroot, sales del shell raíz e intentas empaquetar todo. Fallas porque ahora ya no puedes leer el archivo ya que no tienes acceso de root. Entonces debesudocomprimir y compilar el paquete como root. Efectivamente, tienes que hacer todo como root.Esto es malo TM .
Como empaquetador, no necesita permisos de root y no debería obtenerlo. Cuando instala un paquete, es posible que necesite instalar algún archivo (
A) como root y ahí es donde necesita los permisos de root. Todo lo quefakeroothace es hacer esto posible. Permite que el empaquetador enumereAcomo propiedad de root para el archivador, de modo que cuando el usuario descomprime el paquete, el archivador exige permiso de root y creaAcomo propiedad de root.fuente
So either you could fake the ownerships before compressing, or change them after. Debian people decided the former is easier.Esto me ayudó mientras pensaba '¿por qué no modificarlo después?'AFAIK, fakeroot 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 raíz. Sin fakeroot, uno tendría que tener privilegios de root para crear los archivos constitutivos de los archivos con los permisos y la propiedad correctos, y luego empaquetarlos, o uno tendría que construir los archivos directamente, sin usar el archivador.
fakeroot funciona reemplazando las funciones de la biblioteca de manipulación de archivos (chmod (), stat (), etc.) por otras que simulan el efecto que habrían tenido las funciones reales de la biblioteca, si el usuario hubiera sido realmente root.
Sinopsis
Compruebe más aquí: fakeroot
fuente
the program running in it thinks it has root privilegesy el programa que tiene privilegios de root? Si puedo hacer unrm -rf /y el programa, ejecutarlo piensa que tengo privilegios de root ...rmla verificación de que tiene permisos suficientes, pero el núcleo en sí mismo no le permite hacerlo; launlinkllamada al sistema fallaría. No depende solo de la aplicación manejar los permisos, o podría escribir su propia aplicación que no verifique los permisos y haga lo que quiera con ellaLo he usado para crear scripts de paquetes. No estaba seguro de que la persona que ejecuta el script tenga acceso a nivel raíz, pero el script aún necesitaba generar, por ejemplo, un archivo tar que contuviera archivos que pertenecieran a root. La forma más sencilla de hacerlo fue ejecutar el script de creación de paquetes en fakeroot, que engañó al archivero para que creyera que los archivos pertenecen a la raíz, y los empaquetó como tal dentro del archivo. De esta manera, cuando el paquete se descomprimió en la máquina de destino (en una máquina completamente diferente), los archivos no pertenecían a usuarios extraños o inexistentes.
Pensando en ello, el único lugar que he visto fue para construir algún tipo de archivo: rootfs de sistemas integrados, archivos tar.gz, paquetes rpm, paquetes .deb, etc.
fuente
fakerootes una herramienta alternativa para el software de empaque con errores: no hay ninguna razón por la que deba ser root para crear dichos paquetes, pero dado que no le permiten especificar permisos de archivos de otra manera que no sea configurarlos directamente en el sistema de archivos antes de que no tenga elecciónUn uso común es averiguar a qué archivos realmente quería acceder un binario que fallaba. Es decir, descubrir y corregir o solucionar errores causados por rutas codificadas y manejo inadecuado de excepciones.
fuente
Puede usar fakeroot sin tener privilegios de root. Si tuviera
suy / osudopudiera destruir su sistema de una manera simplerm -rf /, pero con fakeroot como máximo, eliminaría su directorio de inicio.fuente
fakeroot. Puede eliminar su directorio personal como usted mismo.La respuesta simple:
su y sudo ejecutan comandos como root. fakeroot no, fuera de su disposición de caja de arena parcial.
fuente