É seguro exportar uma variável contendo uma senha e, em seguida, redefini-la?

1

Meu script precisa chamar várias vezes um programa que precisa de uma senha, que só pode ser passado como uma variável de ambiente. Como eu quero perguntar ao usuário a senha apenas uma vez, eu fiz isso:

read -s PASSPHRASE
export PASSPHRASE
program some_option
program some_other_option
program yet_another_option
PASSPHRASE=""

Pelo que entendi, o conteúdo da variável PASSPHRASE é acessível apenas para o shell atual e o program durante as três chamadas, então a variável é redefinida e a senha não é acessível a mais ninguém.

Estou certo, ou estou fazendo errado?

Estou preocupado com os outros usuários no sistema (excluindo root ) e os outros programas em execução na minha conta de usuário.

    
por Arno 14.02.2017 / 20:59

1 resposta

4

Definir "seguro"

  1. O Root sempre pode ler tudo, então nada é seguro do root
  2. As variáveis de env para o usuário U estão protegidas de outros usuários
  3. As variáveis de env para Usuário U e Programa P não são seguras do Programa Q executado pelo Usuário U

Assim, o root pode ler esse env var por um curto período, e outros programas executados pelo mesmo usuário podem ler esse env var por um curto período

Soluções:

  1. Raiz própria ou raiz de confiança
  2. Não execute outros programas com o mesmo usuário
  3. Execute esses programas como seu próprio usuário

Se você não quer exportar o env var, você pode chamar seus comandos assim:

$PASSPHRASE command-name -option

Pode tornar as coisas um pouco mais seguras, mas outros programas executados pelo mesmo usuário ainda podem provavelmente vê-los com um pequeno truque (ktrace / strace, debugging)

    
por 14.02.2017 / 21:16