Come lanciare un programma da java con utente root

di il
7 risposte

Come lanciare un programma da java con utente root

Buongiorno a tutti,

Sto realizzando un programma in Java 1.8 per eseguire altri applicativi e aprire documenti vari.
Riesco ad aprire tutti i tipi di documenti e a lanciare applicazioni varie.

Il problema che sto incontrando è quando devo lanciare applicazioni che richiedono di essere eseguite da utente root.
Es: 
da terminale farei: sudo /opt/lampp/manager-linux-x64.run
ma da programma java non mi funziona.

Sto usando una cosa del tipo:


Runtime.getRuntime().exec(new String[] {"sudo", "/opt/lampp/manager-linux-x64.run"});

Qualche indicazione?

7 Risposte

  • Re: Come lanciare un programma da java con utente root

    ZioCrick ha scritto:


    da terminale farei: sudo /opt/lampp/manager-linux-x64.run
    E facendo così ti chiederebbe una password?
  • Re: Come lanciare un programma da java con utente root

    Certo.
    Però ricordo di aver letto che si poteva eseguire un'applicazione da utente root senza farsi chiedere la password, o forse passandogliela come argomento, ma non riesco più a trovare il riferimento.
    Riesci a darmi una dritta?

    EDIT: o per lo meno mi basterebbe riuscire a lanciare xampp in modo che mi chieda la password tramite la sua GUI, come si faceva con gksudo.
  • Re: Come lanciare un programma da java con utente root

    ZioCrick ha scritto:


    Certo.
    Per quanto posso ricordarmi, sudo richiede la password utilizzando l'input a "basso" livello dalla console (non è dal flusso standard-input). Quindi serve avere una "vera" console per inserire manualmente la password.

    ZioCrick ha scritto:


    Però ricordo di aver letto che si poteva eseguire un'applicazione da utente root senza farsi chiedere la password, o forse passandogliela come argomento, ma non riesco più a trovare il riferimento.
    Riesci a darmi una dritta?
    Dal man page di sudo che ho trovato, parla di:

    The -S (stdin) option causes sudo to read the password from the standard input instead of the terminal device. The password must be followed by a newline character.

    Da prompt dei comandi sarebbe qualcosa del tipo:

    echo "lapassword" | sudo -S comandoblabla

    La questione è che il "piping" (esattamente come la redirezione degli stream) è una cosa che interpreta e fa la shell, NON la fa Java. Non puoi mettere quel "|" nel exec() che lanci da Java.

    Dovresti lanciare:
    Runtime.getRuntime().exec(new String[] { "sudo", "-S", "comandoblabla" })
    Poi ottieni subito il Process, prendi il OutputStream (relativo allo standard-input del processo sudo lanciato) e su questo ci scrivi la password seguita dal newline.


    Nota: credo che esista sicuramente il modo per dire a sudo di "privilegiare" un comando evitando la password, bisognerebbe vedere bene il/i file di configurazione di sudo. Ma non sono la persona adatta per dirti come fare ....
  • Re: Come lanciare un programma da java con utente root

    andbin ha scritto:


    Dovresti lanciare:
    Runtime.getRuntime().exec(new String[] { "sudo", "-S", "comandoblabla" })
    Poi ottieni subito il Process, prendi il OutputStream (relativo allo standard-input del processo sudo lanciato) e su questo ci scrivi la password seguita dal newline.
    Mi gira la testa solo al pensiero, poichè non saprei da che parte iniziare.

    andbin ha scritto:


    Nota: credo che esista sicuramente il modo per dire a sudo di "privilegiare" un comando evitando la password, bisognerebbe vedere bene il/i file di configurazione di sudo. Ma non sono la persona adatta per dirti come fare ....
    Ecco, su questo credo di aver trovato qualcosa, ma devo fare un po' di prove, che credo farò domani.
    Poi aggiorno la discussione.
    Grazie come sempre per la tua disponibilità.
  • Re: Come lanciare un programma da java con utente root

    ZioCrick ha scritto:


    Mi gira la testa solo al pensiero, poichè non saprei da che parte iniziare.
    Grosso modo:
    Process process = Runtime.getRuntime().exec(  ......  );
    
    PrintWriter pw = new PrintWriter(process.getOutputStream(), true);    // true=autoflush
    pw.println("lapassword");
  • Re: Come lanciare un programma da java con utente root

    andbin ha scritto:


    Grosso modo:
    Process process = Runtime.getRuntime().exec(  ......  );
    PrintWriter pw = new PrintWriter(process.getOutputStream(), true);    // true=autoflush
    pw.println("lapassword");
    Ah! Caspita, Grazie! Allora ci posso provare.
    Però domani, perchè ora sto litigando con un'altra cosa che devo risolvere assolutamente, altrimenti butto al macero anche Ubuntu Studio.

    Seguiranno gli aggiornamenti.
  • Re: Come lanciare un programma da java con utente root

    Aggiornamento:


    Carissimi, inizialmente la manovra di aggiungere la riga MioUtente ALL=(ALL) NOPASSWD: ALL
    al file /etc/sudoers mi sembrava risolutiva.

    Ma ora è giunto il momento di risolvere la cosa alla radice, e purtroppo l'indicazione di andbin non mi funziona! 

    C'è qualche anima pia che riesce a darmi una dritta per risolvere il problema?

    Non credo sia impossibile perché sulle varie distro di Linux ce ne sono di programmi che ne lanciano altri e anche privilegiati, quindi la soluzione deve esistere. 

Devi accedere o registrarti per scrivere nel forum
7 risposte