Por que o 'sudo java' altera o diretório home do usuário para / root?

1

Eu tenho um programa que precisa acessar um arquivo no meu diretório pessoal.

O Ubuntu não permitirá que isso aconteça devido ao programa não ter privilégios de root. No começo eu executei esse comando java (que não funcionaria porque o programa não tinha permissão para acessar os arquivos):

java -jar this.jar

O programa não conseguiu detectar o arquivo que eu precisava. O caminho que o programa me disse que usou foi /home/myhome/directory . Esse caminho estava correto. Mas então o programa precisava de privilégios de root para acessar o arquivo, então tentei:

sudo java -jar this.jar

Em seguida, o diretório que o programa tentou acessar era /root/directory , esse é o problema que estou tendo.

Existe alguma maneira de executar um programa como root com o diretório visualizado pelo programa, pois o diretório home é o diretório /home em vez do diretório /root ?

    
por Sock314 10.08.2015 / 15:54

1 resposta

4

Como você está lidando com um programa Java, especifique o diretório que ele deve ver como o diretório base definindo a propriedade do sistema user.home :

sudo java -Duser.home=$HOME -jar this.jar

É confuso que isso seja necessário. Como sudo por padrão retém o valor de HOME , seria de se esperar que Java definisse user.home para $HOME . No entanto, a documentação da API Java para java.lang.System indica que user.home será definido como diretório pessoal do usuário . Ele não indica que ele será configurado para o valor da variável de ambiente HOME - que, de fato, pode ou não ser o diretório pessoal do usuário.

Note, como foi apontado nos comentários, que não é recomendado rodar o software como root. Se fizer isso, atribua a ele um diretório de trabalho dedicado, ou seja, defina seu user.home para algum local reservado para ele.

    
por zwets 10.08.2015 / 21:47