GNU/Linux >> Linux Esercitazione >  >> Linux

Linux:è possibile falsificare un percorso specifico per un processo?

Sto cercando di eseguire ADB su un server Linux con più utenti in cui non sono root (per giocare con il mio emulatore Android). Il demone adb scrive i suoi log nel file /tmp/adb.log che purtroppo sembra essere codificato in ADB e questa situazione non cambierà.

Quindi, adb non viene eseguito, dando l'errore ovvio:cannot open '/tmp/adb.log': Permission denied . Questo file è stato creato da un altro utente e da /tmp ha un po' di adesivo. Se avvio adb con adb nodaemon server facendolo scrivere su stdout, non si verificano errori (ho anche impostato la sua porta su un valore univoco per evitare conflitti).

La mia domanda è:c'è un modo per fare in modo che ADB scriva su un altro file diverso da /tmp/adb.log ? Più in generale, esiste un modo per creare una sorta di collegamento simbolico specifico del processo? Voglio reindirizzare tutti gli accessi ai file a /tmp/adb.log a, dicendo, un file ~/tmp/adb.log .

Ancora una volta, non sono root sul server, quindi chroot , mount -o rbind e chmod non sono opzioni valide. Se possibile, vorrei non modificare i sorgenti ADB, ma sicuramente se non ci sono altre soluzioni, lo farò.

PS Per il caso specifico di ADB posso ricorrere all'esecuzione di adb nodaemon server con nohup e il reindirizzamento dell'output, ma la domanda generale è ancora pertinente.

Risposta accettata:

Ecco un esempio molto semplice dell'utilizzo di util-linux 's unshare per mettere un processo in uno spazio dei nomi di montaggio privato e dargli una vista diversa dello stesso filesystem che il suo genitore ha attualmente:

{   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

Puoi dare a un processo una vista privata del suo filesystem con unshare utility su sistemi Linux aggiornati, sebbene la funzione di mount namespace stessa sia stata abbastanza matura per l'intera serie di kernel 3.x. Puoi inserire spazi dei nomi preesistenti di tutti i tipi con nsenter utility dallo stesso pacchetto e puoi saperne di più con man .


Linux
  1. Come posso specificare un'icona con un percorso RELATIVO per un file di ingresso desktop Linux?

  2. Come creare un file in Linux dalla finestra del terminale?

  3. grep in modo ricorsivo per un tipo di file specifico su Linux

  4. È possibile che il descrittore di file linux 0 1 2 non sia per stdin, stdout e stderr?

  5. A cosa serve il test di Linux:un test di comando?

10 esempi di comandi Linux Cat per principianti

Linux df Command Tutorial per principianti (8 esempi)

Comando ls in Linux per elencare i file

8 comandi essenziali per la navigazione dei file Linux per i nuovi utenti

Comandi per la gestione dei processi in Linux

Scarica la memoria di un processo Linux su file