Problema com su username -c “./script.sh” e sudo -u username bash -c “./script.sh” e classpath Java

2

Estou vendo um comportamento estranho que me levou a imaginar como o ambiente difere ao executar um desses dois comandos, em vez de usar su username e, em seguida, executar os comandos como o usuário um por um.

su username -c "cd /opt/scripts/ ; ./script.sh"

sudo -u username bash -c "cd /opt/scripts/ ; ./script.sh"

Estou executando esses comandos como root a partir de um script de inicialização em um servidor Linux do CentOS 6.

Devo especificar ainda que o problema é que o arquivo script.sh, que executa um programa java, usa uma diretiva de caminho de classe com caminhos relativos (relativos a onde script.sh) mora (por exemplo, ./classes/com:./ lib / common). Se eu su to username, em seguida, cd para o / opt / scripts e execute ./script.sh funciona, mas os comandos su e sudo dentro do script parecem ter um problema onde as classes não são encontradas, mesmo se eu cd para esse diretório antes de executar o script. Por que isso seria? Como é diferente usar o su para se tornar o usuário e executar os comandos um por um?

    
por Gregg Leventhal 21.11.2014 / 16:35

1 resposta

3

Tente comparar os ambientes:

$ sudo -s
# diff <(su username -c env) <(sudo -u username bash -c env)

Por exemplo, o ambiente para sudo é controlado por env_* defaults em /etc/sudoers .

    
por 21.11.2014 / 16:46

Tags