¿Por qué necesitamos fakeroot
comando en absoluto? ¿No podemos simplemente usar los comandos sudo
o 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 -rfakeroot
es decir, eliminar la necesidad de convertirse en root para la construcción de un paquete. Esto se hace mediante el establecimientoLD_PRELOAD
delibfakeroot.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 su
o sudo
no? 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é?
sudo
osu
porque es su máquina.fakeroot
tiene 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 untar
archivo con los permisos y la propiedad correctos, útil, por ejemplo, al empaquetar software.fakeroot
! Si no puede pensar en una situación en la quefakeroot
sea ú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
root
derechos (UID
yGID
0) por diferentes razones (seguridad, permisos pasados por alto, etc.). Pero no es posible obtenerroot
derechos, ya que está trabajando en una máquina remota (y muchos otros usuarios tienen el mismo problema que usted). Esto es exactamente lo quefakeroot
hace: pretende un efectivoUID
yGID
de 0 al entorno que lo requiere.En la práctica nunca obtienes
root
privilegios reales (al contrariosu
ysudo
que mencionas).fuente
fakeroot
para 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
.deb
archivo de este tipo, todos mis/usr
archivos pertenecen a quien sea que llame el usuariofakeroot
?fakeroot
shell, parecen ser. Cuando se crea el paquete .deb dentro de este shell, el propietario del archivo se lee del sistema de archivos (quefakeroot
intercepta 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 losudo
harí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
fakeroot
fue 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
fakeroot
habrí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éx
yy
. Fingíx
pertenecermyuser
yy
pertenecerroot
. 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
fakeroot
eso. De hecho, sabiendo que enfakeroot
realidad no hace nada, no puedes haber ganado ninguna habilidad que no tenías antes.Pero , y esto es de lo que
fakeroot
se trata, editar la lista podría no ser trivial. Como ocurre con un paquete que se puede instalar en su sistema, tiene un formatotar
ed,gzip
ed,xz
ed,bzip2
ed 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 debesudo
comprimir 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 quefakeroot
hace es hacer esto posible. Permite que el empaquetador enumereA
como propiedad de root para el archivador, de modo que cuando el usuario descomprime el paquete, el archivador exige permiso de root y creaA
como 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 privileges
y el programa que tiene privilegios de root? Si puedo hacer unrm -rf /
y el programa, ejecutarlo piensa que tengo privilegios de root ...rm
la verificación de que tiene permisos suficientes, pero el núcleo en sí mismo no le permite hacerlo; launlink
llamada 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
fakeroot
es 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
su
y / osudo
pudiera 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