Eu tenho um script simples que estou usando para sincronizar um ambiente de teste para alguns desenvolvedores. Ele não precisa ser mais complexo do que apenas fazer um dump do mysql, verificar o hash sobre o SSH e, em seguida, se for alterado, mover o dump para o novo ambiente e desfazê-lo.
Eu o reescrevi para obscurecer informações confidenciais, mas aqui está a essência desse script que escrevi até o ponto em que estou tendo o problema:
#!/bin/bash
mysqldump -h localhost testDB > dbPath/testdb.sql
hash1=$(md5sum dbPath/testdb.sql) | awk '{print $1}'
echo $hash1
Ao executar o script:
sudo ./testScript.sh
Eu vejo o mysqldump criado com as permissões -rw-r - r-- 1 raiz raiz que parece correto para mim, no entanto, como o script continua com o hash md5, eu entendo isso:
./testScript.sh: line 5: dbPath/testdb.sql: Permission denied
Quando eu executo o comando md5sum do shell (não no script), ele funciona bem, até mesmo do meu usuário normal sem usar o sudo. Quando eu mudo para root e executo o comando a partir do shell, ele funciona corretamente. Quando executo o script em qualquer capacidade (da minha conta de usuário, do sudo da minha conta de usuário ou diretamente da raiz), recebo o erro de permissão negada na linha md5sum.
Eu acho que em algum lugar as permissões da minha conta de usuário estavam perdendo, em vez das permissões do root serem usadas, exceto pelo fato de que o script não pode ser executado pelo root do shell do root sem também receber um erro de permissão negada, e até onde eu posso dizer, root não deve ter permissão negada a nada. Como teste, eu joguei um whoami antes e depois do comando md5sum e ambos os comandos geram o root como usuário ao executar com o sudo ou com o root.
Root e minha conta de usuário claramente têm permissão para executar o md5sum no arquivo; como é o fato de que isso está sendo executado a partir de um script que faz uma mudança nas habilidades da minha ou da raiz para executar comandos ou manipular o arquivo?
O ambiente é o RHEL 6.