¿Por qué necesitamos el comando fakeroot? ¿No podemos simplemente usar los comandos sudo o su?

La página de manual dice:

fakeroot – ejecuta un comando en un entorno falsificando privilegios de root para manipulación de archivos

About.com dice:

Da una raíz falsa Este paquete está diseñado para habilitar algo como: dpkg-buildpackage -rfakeroot es decir, para eliminar la necesidad de convertirse en root para la compilación de un paquete. Esto se hace configurando LD_PRELOAD a libfakeroot.so, que proporciona envoltorios alrededor de getuid, chown, chmod, mknod, stat, …, creando así un entorno raíz falso. Si no «No entiendo nada de esto, no necesitas fakeroot!

Mi pregunta es, ¿qué sp propósito especial, ¿resuelve que un simple su o sudo no «t»? Por ejemplo, para volver a empaquetar todos los paquetes instalados en ubuntu, 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 así:

$ sudo dpkg-repack `dpkg --get-selections | grep install | cut -f1` 

EDITAR:

Ejecutando:

$ sudo dpkg-repack `dpkg --get-selections | grep install | cut -f1` 

me da este error:

el directorio de control tiene permisos incorrectos 700 (deben ser> = 0755 y < = 0775)

¿Por qué?

Comentarios

  • Es una buena idea, por razones de seguridad, evitar hacer como root todo lo que podría hacer como usuario normal, incluso si puede ejecutar sudo o su porque es su máquina. fakeroot tiene dos usos 1) engaña a los programas haciéndoles creer que usted es realmente 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 pasado a Linux) y 2) permite emular el modo de archivo y los cambios de propiedad que no sería ‘ de otro modo podría hacer, principalmente para crear un archivo tar con los permisos correctos y propiedad, útil por ejemplo al empaquetar software.
  • Creo que la nota en el extracto de About.com lo resume: Si no ‘ Si entiendes nada de esto, no necesitas fakeroot! Si no puedes ‘ no pensar en una situación en la que fakeroot es útil, entonces literalmente no ‘ no lo necesita. Pero las personas que de hecho lo necesitan comprenden completamente el caso de uso.

Respuesta

Imagínese que está un desarrollador / mantenedor de paquetes, etc. trabajando en un servidor remoto. Desea actualizar el contenido de un paquete y reconstruirlo, descargar y personalizar un kernel de kernel.org y compilarlo, etc. Mientras intenta hacer esas cosas, descubrirá que algunos pasos requieren que tenga root derechos (UID y GID 0) por diferentes motivos (seguridad, permisos pasados por alto, etc.). Pero no es posible obtener root derechos, ya que estás trabajando en una máquina remota (y muchos otros usuarios tienen el mismo problema que tú). Esto es exactamente lo que fakeroot lo hace: pretende un UID y GID efectivos de 0 al entorno que los requiere.

En la práctica, nunca obtienes privilegios root reales (en oposición a su y sudo que mencionas).

Comentarios

  • entonces, no puedo ‘ t usar para cambiar la configuración del sistema. Porque el comando que ‘ estaremos ejecutando pensará que ‘ se está ejecutando como root y haremos lo que queramos que haga. ganó ‘ ¿verdad?
  • @mrid Tenga en cuenta el » En la práctica, nunca obtiene privilegios reales de root «. Entonces la respuesta es no

Responder

Para ver claramente la diferencia entre fakeroot y un sudo / su real, simplemente haz:

$ fakeroot # echo "Wow I have root access" > root.tst # ls -l root.tst -rw-rw-r-- 1 root root 23 Oct 25 12:13 root.tst # ls -l /root ls: cannot open directory /root: Permission denied # exit $ ls -l root.tst -rw-rw-r-- 1 ubuntu ubuntu 23 Oct 25 12:13 root.tst 

Siempre que estés dentro del shell fakeroot, parece que eres root, siempre y cuando no intentes hacer nada que realmente necesita privilegios de root. Y esto es exactamente lo que necesita una herramienta de empaquetado 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. Entonces, de hecho, su o sudo no funcionarán para obtener la propiedad correcta del archivo.

Comentarios

  • ¿No es peligroso el faker? Si creo un archivo con el bit suid y rx perm, el archivo será creado propiedad de root, ejecutable por cualquiera, ¡como root! ¿O quizás la configuración del bit suid no funcione?
  • No es bueno. Probé esto yo mismo. La razón principal para fakeroot es obtener la raíz de propiedad: root en paquetes integrados sin ser realmente root. Sin embargo, los paquetes instalados tendrán los permisos adecuados.
  • Todo fue muy confuso hasta que leí el comentario de @ ntzrmtthihu777 ‘.
  • Lo siento, No ‘ no entiendo la descripción. ¿Por qué no parchear las herramientas para que ‘ no se quejen si usted no es root? Como pregunta relacionada: después de todo, los archivos que crea bajo fakeroot no son en realidad propiedad de root. ¿No ‘ t esto implicaría que cuando instalo un archivo .deb, todos mis /usr los archivos son propiedad de cualquier usuario llamado fakeroot?
  • @ JohannesSchaub-litb, no, ese ‘ es el punto. Los archivos no son propiedad de root, pero dentro de un fakeroot shell, se ven como son. Cuando se crea el paquete .deb dentro de este shell, el propietario del archivo se lee desde el sistema de archivos (que fakeroot intercepta y devuelve root) y almacenado en el paquete. Al instalar el paquete, dpkg requiere acceso de root porque el paquete indica que el archivo debe ser propiedad de root.

Respuesta

Dado que las respuestas son difíciles de entender (para mí) y me tomó pensar un poco para entenderlas ( este comentario me hizo entenderlo), «m vamos a dar una explicación con suerte mejor.

1. Qué sucede en fakeroot

Nada más que lo que sucede con tu propio usuario. Absolutamente nada más. Si fakeroot (que cuando se llama te da un nuevo shell, como lo haría sudo), finge hacer cosas para las que necesitabas permiso y sal, no pasaría absolutamente nada.

Si lo piensa bien, es una total pérdida de tiempo. ¿Por qué harías cosas que no sucederán en realidad? Es una locura. Simplemente podría no haber hecho nada de eso y no habría habido diferencia, ya que no hay rastro de eso.

Espere un minuto …

2. El rastro de fakeroot

podría quedar un rastro de fakeroot. Veamos los comandos en Respuesta de MortenSickel que es bastante agradable y merece un voto a favor:

$ fakeroot # echo "Wow I have root access" > root.tst # ls -l root.tst -rw-rw-r-- 1 root root 23 Oct 25 12:13 root.tst # ls -l /root ls: cannot open directory /root: Permission denied # exit $ ls -l root.tst -rw-rw-r-- 1 ubuntu ubuntu 23 Oct 25 12:13 root.tst 

A primera vista, parece haber usado fakeroot fue una total pérdida de tiempo. Al final, si no hubiera usado fakeroot, habría obtenido lo mismo

Lo sutil aquí es esto:

$ cat root.tst Wow I have root access 

Lo que significa que el contenido del archivo aún recuerda ser una raíz. Podría decirse que no utilizar fakeroot habría producido los mismos resultados. Tiene razón, este ejemplo es demasiado simple.

Tomemos otro ejemplo:

$ fakeroot # touch x # touch y # chown myuser:myuser x # ls -l > listing # exit $ ls -l total 4 -rw-rw-r-- 1 myuser myuser 152 Jan 7 21:39 listing -rw-rw-r-- 1 myuser myuser 0 Jan 7 21:39 x -rw-rw-r-- 1 myuser myuser 0 Jan 7 21:39 y $ cat listing total 0 -rw-rw-r-- 1 root root 0 Jan 7 21:39 listing -rw-rw-r-- 1 myuser myuser 0 Jan 7 21:39 x -rw-rw-r-- 1 root root 0 Jan 7 21:39 y 

Veamos qué pasó. Fingí ser root, que es totalmente ineficaz, y creé x y y. Fingí que x pertenecía a myuser y y pertenecía a root. En realidad, ambos pertenecen a myuser (como podemos ver al final), pero solo fingí que fuera 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. Nuevamente, en realidad no pertenecen a personas que imaginé, simplemente me lo imaginé.

3. Entonces … ¿Por qué quieres eso de nuevo?

Puedes decir que realmente no necesitaba fingir que soy root para crear esa lista. Simplemente podría haber creado la lista y luego editarla para reflejar mi imaginación. Tienes razón, no necesitas fakeroot para eso. De hecho, sabiendo que fakeroot no hace nada en realidad, no es posible que haya adquirido ninguna habilidad que no tuviera antes.

Pero , y esto es de lo que se trata fakeroot, editar la lista no es trivial.Como sucede con un paquete que se puede instalar en su sistema, tiene un tar 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é ustedes, pero no puedo pensar en una forma.

¿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, puede falsificar 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 usar sudo?

En primer lugar, no necesita privilegios de root para crear software y no necesita privilegios de root para comprimirlos. Entonces, si no lo necesita, tendría que ser realmente un usuario de Windows para pensar siquiera en obtener ese permiso. Pero dejando de lado el sarcasmo, es posible que ni siquiera tenga una contraseña de root.

Además, digamos que tiene permisos de root. Y digamos que quiere fingir que un archivo debería tener acceso de lectura sólo al raíz. Entonces, sudo, en realidad cambia el propietario del archivo y los permisos a root, sale del shell de root e intenta empaquetar todo. Fallas porque ahora no puedes leer más el archivo porque no tienes acceso de root. Entonces tienes que sudo y comprimir y construir el paquete como root. Efectivamente, tienes que hacerlo todo como root.

Esto es TM malo.

Como empaquetador, no necesita permisos de root y no debería obtenerlos. Cuando Si instala un paquete, es posible que necesite instalar algún archivo (A) como root y ahí es donde necesita permisos de root. Todo lo que fakeroot hace es hacer esto posible. Permite que el empaquetador enumere A como propiedad de root para el archivador, de modo que cuando el usuario descomprime el paquete, el archivador exige permiso de root y crea A como propiedad de root.

Comentarios

  • Excelente redacción, esto lo aclara.
  • So either you could fake the ownerships before compressing, or change them after. Debian people decided the former is easier. Esto me ayudó mientras seguía pensando ‘ ¿por qué no modificarlo después? ‘.
  • Gracias, esto aclara la confusión que tuve después de leer la respuesta de @Morten ‘

Answer

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 con permisos / propiedad de root. Sin fakeroot, uno necesitaría tener privilegios de root para crear los archivos constituyentes 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 las funciones reales de la biblioteca habrían tenido si el usuario hubiera sido realmente root.

Sinopsis:

 fakeroot [-l|--lib library] [--faked faked-binary] [--] [command] 

Ver más aquí: fakeroot

Comentarios

  • @MaskTheSmokin: Entonces, fakeroot te da poder de superusuario solo para operaciones de manipulación de archivos, ¿verdad?
  • Realmente no da superpoder de usuario, solo lo finge: el programa que se ejecuta en él cree que tiene privilegios de root, mientras que en realidad todavía usa los privilegios normales del usuario ‘.
  • ¿Dónde está la diferencia entre the program running in it thinks it has root privileges y el programa que tiene privilegios de root? Si puedo hacer un rm -rf / y el programa, al ejecutarlo, cree que tengo privilegios de root …
  • @userunknown Es posible que pueda omitir rm ‘ s comprueba que tienes permisos suficientes, pero el kernel en sí no ‘ no te permitirá hacerlo ; la llamada al sistema unlink fallaría. ‘ no depende solo de la aplicación para manejar los permisos, o usted ‘ podrá escribir su propia aplicación que no ‘ t verifica los permisos y haz lo que quieras con ellos
  • Un ejemplo para dilucidar la necesidad de fakeroot sería fantástico. Puedo ver los usos de fakeroot, pero no ‘ no veo por qué la gente no puede ‘ solucionar los permisos de root hasta el punto de ‘ es más fácil de falsificar.

Respuesta

Lo he usado para scripts de creación de paquetes. No estaba seguro de que la persona que ejecutaba el La secuencia de comandos tiene acceso de nivel de raíz, pero la secuencia de comandos aún necesitaba generar, digamos, un archivo tar que contenía archivos que pertenecen a la raíz. La forma más sencilla de hacerlo era ejecutar la secuencia de comandos de creación de paquetes en fakeroot, que engañó al archivador haciéndole creer que el Los archivos pertenecen a la raíz y los empaquetan como tales dentro del archivo. De esta manera, cuando el paquete se desempaquetaba 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 embebidos, archivos tar.gz, paquetes rpm, paquetes .deb, etc.

Comentarios

  • fakeroot es una herramienta alternativa para software de empaquetado con errores: no hay ninguna razón por la que necesite ser root para crear tales paquetes, b pero como no ‘ no le permiten especificar permisos de archivo de ninguna otra manera que no sea configurándolos directamente en el sistema de archivos de antemano, no tiene otra opción

Respuesta

Un uso común es averiguar a qué archivos realmente quería acceder un binario defectuoso. Es decir, descubrir y corregir o solucionar errores causados por rutas codificadas y manejo inadecuado de excepciones.

Responder

Puede use fakeroot sin tener realmente privilegios de root. Si tuvieras su y / o sudo, podrías destruir tu sistema con un simple rm -rf /, pero con fakeroot como máximo, eliminaría su directorio de inicio.

Comentarios

  • Eso no ‘ t explica la necesidad de fakeroot. Puede eliminar su directorio personal como usted mismo.

Responder

La respuesta simple:

su y sudo ejecutan comandos como root. fakeroot no lo hace, fuera de su arreglo de sandbox parcial.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *