É difícil responder isso sem saber que tipo de informação deve ser fornecida nesse arquivo. O fato de o script estar armazenado em um sistema com vários usuários não é automaticamente um problema de segurança. Por que eles devem (ser capazes de) fornecer informações para outros usuários?
No entanto, você pode ler com segurança uma linha de um arquivo por read -r line
. E se você só precisa de dados do tipo foo=bar
, então você pode facilmente verificar a linha de caracteres inválidos (ou estruturas) por [[ =~ ]]
.
Se você não está limitado a usar um único arquivo, então uma solução fácil pode ser obtida do software do DJB: um arquivo por variável. As variáveis podem então ser definidas por algo como:
for varname in ${vars[@]}; do
if [ -f "${path_to_var_files}"/$varname ]; then
eval $varname='"$(cat '"${path_to_var_files}"/$varname"')"'
fi
done
... se rastrear novas linhas não são importantes.
Muitos problemas (para o sistema, não para o respectivo usuário) podem ser resolvidos minimizando o código executado sob o sudo. Não deixe um script sudo fornecer o arquivo. Deixe que um script de nível de usuário forneça o arquivo e faça as chamadas sudo. scripts sudo devem ter uma interface clara com entrada fácil de ser verificada.