fakeroot - ejecuta una orden en un entorno que falsea privilegios de
superusuario para la manipulación de ficheros
fakeroot [-l|--lib biblioteca] [--faked
binario-faked ] [-i fichero-a-cargar]
[-s fichero-salvado] [-u|--unknown-is-real ]
[-b|--fd-base ] [-h|--help ] [-v|--version ] [--]
[orden]
fakeroot ejecuta una orden en un entorno donde parece que se tiene
permisos de superusuario para la manipulación de ficheros.
�til para permitir a usuarios crear archivos (tar, ar, .deb
etc.) con ficheros con permisos/propietarios de superusuario. Sin
fakeroot uno necesitarÃa privilegios de superusuario
para crear los ficheros constituyentes del archivo con los permisos y
propietario correctos, y después empaquetarlos, o uno
tendrÃa que construir los archivos directamente, sin usar el
archivador.
fakeroot works by replacing the file manipulation library functions
(
chmod(2),
stat(2) etc.) by ones that simulate the effect the real library
functions would have had, had the user really been root. These wrapper
functions are in a shared library
/usr/lib/*/libfakeroot-*.so or
similar location on your platform. The shared object is loaded through the
LD_PRELOAD mechanism of the dynamic loader. (See
ld.so(8))
Si pretende construir paquetes usando
fakeroot, es aconsejable construir
primero el paquete fakeroot: la etapa "debian/rules build" tiene
algunas comprobaciones (la mayorÃa de ellas buscan fallos de
versiones viejas de fakeroot). Si estas pruebas fallan (por ejemplo, porque
tiene ciertos programas libc5 en el sistema), también
fallará la construcción de otros paquetes
mediante fakeroot, pero de formas mucho más sutiles.
Además, dese cuenta que es mejor no realizar la
compilación de los binarios bajo fakeroot. Especialmente
configure y demás programas del estilo no se comportan bien
cuando el sistema se comporta de forma diferente a la esperada. (o, de forma
aleatoria, estos programas eliminan algunas variables de entorno, algunas de
las cuales necesita fakeroot).
-
-l biblioteca, --lib
biblioteca
- Especifica una biblioteca envoltorio.
-
--faked binario
- Especifica un binario alternativo a usar en vez de
faked.
-
[--] orden
- Cualquier orden que quieras ejecutar bajo fakeroot. Use
‘--’ si en la orden tiene otras opciones que puedan
confundir el análisis de las opciones de fakeroot.
-
-s fichero-salvado
- Guarda el entorno fakeroot en fichero-salvado al salir.
Este fichero puede usarse para restaurar el entorno más
tarde usando -i. Sin embargo, este fichero fallará y
fakeroot se comportará de forma extraña a
menos que no modifique los ficheros creados (N.T. del
inglés touched, haciendo referencia a la orden touch, con
la que fakeroot crea algunos ficheros vacÃos para simular
algunas situaciones) dentro del entorno fakeroot cuando
esté fuera del entorno. Aun asÃ, esto puede
ser útil. Por ejemplo, puede usarse con rsync(1) para
guardar y restaurar el árbol de directorios completo con la
información de usuarios, grupos y dispositivos completa sin
necesidad de ser superusuario. Consulte
/usr/share/doc/fakeroot/README.saving para más
detalles.
-
-i fichero-a-cargar
- Carga un entorno fakeroot de fichero-a-cargar previamente
salvado usando -s. Note que esto no salva implÃcitamente el
fichero, use también -s para conseguir esto. Es seguro usar
el mismo fichero para -i y -s en una misma invocación de
fakeroot.
-
-u, --unknown-is-real
- Usa el propietario real para ficheros desconocidos
previamente por fakeroot en vez de suponer que pertenecen a
root:root.
-
-b fd
- Especifica el descriptor de fichero base
(sólo en modo TCP). Fd es el número
mÃnimo de descriptor de fichero a usar para las conexiones
TCP, puede ser importante para evitar conflictos con los descriptores de
ficheros usados por programas ejecutándose dentro de
fakeroot.
- -h
- Muestra la ayuda.
- -v
- Muestra la versión.
Aquà hay un ejemplo de una sesión con
fakeroot. Dese cuenta que dentro de un entorno fakeroot la
manipulación de ficheros que requiere privilegios de
superusuario se realiza con éxito, pero realmente no se lleva a
cabo.
$ whoami
joost
$ fakeroot /bin/bash
# whoami
root
# mknod hda3 b 3 1
# ls -ld hda3
brw-r--r-- 1 root root 3, 1 Jul 2 22:58 hda3
# chown joost:root hda3
# ls -ld hda3
brw-r--r-- 1 joost root 3, 1 Jul 2 22:58 hda3
# ls -ld /
drwxr-xr-x 20 root root 1024 Jun 17 21:50 /
# chown joost:users /
# chmod a+w /
# ls -ld /
drwxrwxrwx 20 joost users 1024 Jun 17 21:50 /
# exit
$ ls -ld /
drwxr-xr-x 20 root root 1024 Jun 17 21:50 //
$ ls -ld hda3
-rw-r--r-- 1 joost users 0 Jul 2 22:58 hda3
Sólo las operaciones que el usuario
joost puede hacer se
llevan a cabo realmente.
fakeroot se escribió especÃficamente para
permitir que los usuario pudiesen crear paquetes (en el formato
deb(5)
) sin tener privilegios de superusuario. Esto puede hacerse con
órdenes como
dpkg-buildpackage -rfakeroot o
debuild
-rfakeroot (realmente, -rfakeroot es predeterminado en debuild en estos
momentos, asà que no necesita el argumento).
fakeroot es un programa normal, sin el bit setuid. No aumenta los
privilegios de un usuario ni disminuye la seguridad del sistema.
/usr/lib/*/libfakeroot-*.so The shared library containing the wrapper
functions.
- FAKEROOTKEY
- La llave usada para comunicarse con el demonio fakeroot.
Cualquier programa comenzado con el LD_PRELOAD correcto y la
FAKEROOTKEY de un demonio en ejecución
conectará automáticamente con ese demonio, y
tendrá la misma visión "falsa" de
los permisos/propietarios de los ficheros del sistema. (sumiendo que el
demonio y el programa que se conecta los ejecute el mismo usuario).
- LD_LIBRARY_PATH
- LD_PRELOAD
- Fakeroot está implementado envolviendo las
llamadas al sistema. Esto se realiza modificando las variables de entorno
de forma que queden como LD_LIBRARY_PATH=/usr/lib/fakeroot y
LD_PRELOAD=libfakeroot.so.0. Esa biblioteca se carga antes que la
biblioteca de C del sistema, y de esa forma se interceptan gran parte de
las llamadas al sistema. Si necesita modificar LD_LIBRARY_PATH o
LD_PRELOAD dentro de un entorno fakeroot, deberán
quedar establecidos de forma relativa, como en
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/foo/bar/
- Versiones de la biblioteca
- Toda orden ejecutada con fakeroot necesita enlazarse
con la misma versión de la biblioteca de C del mismo
fakeroot.
- open()/create()
- fakeroot no envuelve open(), create(), etc.
AsÃ, que si el usuario joost hace
touch tal
fakeroot
ls -al tal
o del otro modo,
fakeroot
touch tal
ls -al tal
fakeroot no puede saber en el primer caso que, el propietario de tal
realmente debe ser joost mientras que en el segundo debe ser
root. Para los paquetes Debian, dar a todos los ficheros
"desconocidos" uid=gid=0 por omisión,
está siempre bien. La forma real de solucionar esto es
envolver open() y create(), pero esto crea otros problemas,
como demuestra el paquete libtricks. Este paquete envuelve
más funciones, e intenta hacer más cosas que
fakeroot . Se vio que una pequeña
actualización de libc (de una donde la
función stat() no usaba open() a otra en la
que stat() usaba (en algunas ocasiones) open()), causaba
violaciones de segmento inexplicables (esto es, el stat() de libc6
llamaba el open() envuelto, que luego llamaba al stat() de
libc6, etc). Arreglarlo no fue tan difÃcil, pero una vez
arreglado, es cuestión de tiempo antes de que otra
función empiece a usar open(), ni hablar de portarlo a otro
sistema operativo. Asà que decidà reducir al
máximo el número de funciones envuelta por
fakeroot, para limitar la probabilidad de ‘colisiones’.
- GNU configure (y otros programas por el estilo)
- fakeroot, en efecto, cambia el comportamiento del sistema.
Los programas que prueban el sistema, como GNU configure, pueden verse
confundidos por esto (o si no lo hacen, llevarán a fakeroot
tan al lÃmite que será este el que se
confunda). Asà que es aconsejable no ejecutar el objetivo
"configure" en un entorno fakeroot. Como configure debe
ejecutarse en "debian/rules build", "dpkg-buildpackage
-rfakeroot" tiene cuidado de esto, haciéndolo
correctamente.
No envuelve open(). Esto no es malo por si mismo, pero si un programa hace
open("fichero", O_WRONLY, 000), escribe en "fichero", lo
cierra, y trata de abrirlo de nuevo para leer el fichero, entonces falla al
abrirlo, ya que el modo del fichero será 000. El fallo es que
si el superusuario hace lo mismo, open() será satisfactorio, ya
que los permisos del fichero no se comprueban para el superusuario.
Elegà no envolver open(), ya que open() se usa en muchas otras
funciones de libc (incluso en aquellas que ya están envueltas),
de forma que se crean bucles (o posibles bucles futuros, cuando la
implementación de varias funciones de libc cambie ligeramente).
fakeroot se distribuye bajo la Licencia Pública General de
GNU. (GPL 2.0 o posterior).
- joost witteveen
- <[email protected]>
- Clint Adams
- <[email protected]>
- Timo Savola
Traducción de Rubén Porras Campo
<
[email protected]>
la mayor parte de J.H.M. Dassen <
[email protected]> con muchas
modificaciones y añadiduras de joost y Clint.
faked(1) dpkg-buildpackage(1),
debuild(1)
/usr/share/doc/fakeroot/DEBUG