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
.
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?
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
.