GNU/Linux >> Tutoriales Linux >  >> Linux

Linux:¿es posible falsificar una ruta específica para un proceso?

Estoy tratando de ejecutar ADB en un servidor Linux con múltiples usuarios donde no soy root (para jugar con mi emulador de Android). El demonio adb escribe sus registros en el archivo /tmp/adb.log que desafortunadamente parece estar codificado en ADB y esta situación no va a cambiar.

Por lo tanto, adb no se ejecuta y genera el error obvio:cannot open '/tmp/adb.log': Permission denied . Este archivo es creado por otro usuario y /tmp tiene pegajoso. Si inicio adb con adb nodaemon server haciéndolo escribir en la salida estándar, no se producen errores (también configuré su puerto en un valor único para evitar conflictos).

Mi pregunta es:¿hay alguna forma de hacer que ADB escriba en otro archivo que no sea /tmp/adb.log? ? De manera más general, ¿hay alguna forma de crear una especie de enlace simbólico específico del proceso? Quiero redirigir todos los accesos a archivos a /tmp/adb.log a, diciendo, un archivo ~/tmp/adb.log .

De nuevo, no soy root en el servidor, así que chroot , mount -o rbind y chmod no son opciones válidas. Si es posible, me gustaría no modificar las fuentes ADB, pero seguramente si no hay otras soluciones, lo haré.

PD Para el caso específico de ADB, puedo recurrir a ejecutar adb nodaemon server con nohup y redirección de salida, pero la pregunta general sigue siendo relevante.

Respuesta aceptada:

Aquí hay un ejemplo muy simple del uso de util-linux 's unshare para poner un proceso en un espacio de nombres de montaje privado y darle una vista diferente del mismo sistema de archivos que tiene actualmente su padre:

{   cd /tmp                      #usually a safe place for this stuff
    echo hey   >file             #some
    echo there >file2            #evidence
    sudo unshare -m sh -c '      #unshare requires root by default
         mount -B file2 file     #bind mount there over hey
         cat file                #show it
         kill -TSTP "$$"         #suspend root shell and switch back to parent
         umount file             #unbind there
         cat file'               #show it
    cat file                     #root shell just suspended
    fg                           #bring it back
    cat file2                    #round it off
}
there                            #root shell
hey                              #root shell suspended
hey                              #root shell restored
there                            #rounded

Puede dar a un proceso una vista privada de su sistema de archivos con unshare utilidad en los sistemas Linux actualizados, aunque la instalación del espacio de nombres de montaje en sí misma ha sido bastante madura para toda la serie del kernel 3.x. Puede ingresar espacios de nombres preexistentes de todo tipo con nsenter utilidad del mismo paquete, y puede obtener más información con man .


Linux
  1. Reiniciar el proceso de cambio de archivo en Linux

  2. grep recursivamente para un tipo de archivo específico en Linux

  3. ¿Es posible que el descriptor de archivo de Linux 0 1 2 no sea para stdin, stdout y stderr?

  4. ¿Para qué sirve Linux test -a command test?

  5. Process Monitor equivalente para Linux?

10 ejemplos de comandos Cat de Linux para principiantes

Tutorial de comando Linux df para principiantes (8 ejemplos)

Comando ls en Linux para listar archivos

8 comandos esenciales de navegación de archivos de Linux para nuevos usuarios

Comandos para la Gestión de Procesos en Linux

¿Cómo fuerzo permisos específicos para nuevos archivos/carpetas en el servidor de archivos de Linux?