Lembrete de senhas como Sudo para scripts próprios

3

Eu tenho um script que requer uma senha para autenticar um serviço da web. Uma única senha para um usuário pré-definido será suficiente, e a senha deve, se possível, ser armazenada com segurança (não em texto simples).

Obviamente, não quero escrever a senha em texto não criptografado no script por motivos de segurança, portanto, o script me pergunta a senha, mas inserir a senha toda vez é um empecilho.

Então, como posso fazer isso para que eu não tenha que digitar a senha toda vez que eu executar o script (como sudo )?

O script neste caso em particular é Python, mas eu acho que é melhor implementá-lo como uma solução genérica no Bash, então ele pode ser reutilizado para diferentes linguagens como PHP ou Ruby.

pseudo-código:

#!/bin/bash
pw = cache.load() or {
  pw = ask_user()
  cache.save(pw, 15min)
}
myscript.py pw
    
por forthrin 29.04.2016 / 07:41

3 respostas

1

Não reinvente seu próprio armazenamento de senhas. Use um existente. O mundo do Linux tem convergido principalmente no Chaveiro do GNOME . O Seahorse oferece uma GUI conveniente para explorar e modificar o chaveiro e definir uma senha mestra. O chaveiro pode ser consultado na linha de comando com o utilitário secret-tool .

secret-tool store --label='Foobar webservice' service foobar account bob
pw=$(secret-tool lookup service foobar account bob)

A senha na loja não expira automaticamente, mas a permissão para acessar a loja pode.

    
por 30.04.2016 / 03:18
1

Eu tive uma situação semelhante e usei (abuso?) gpg com criptografia de chave pública / privada. O bom é que na maioria dos sistemas as coisas são configuradas de modo que a senha de restrição de acesso para uma chave em particular seja mantida por 5 ou 10 minutos, então você só precisa digitar a senha uma vez e continuar usando-a. use ele irá expirar, assim como sudo

Você pode facilmente obter o resultado em bash ou Python (subprocess.check_output ()). Para criptografia, ou seja, armazenar uma nova senha você não precisa nem mesmo dar a senha de restrição de acesso.

Eu não usei meu par de chaves público / privado para isso, porque geralmente não quero manter o acesso a esse par disponível. Mais tarde, descobri que o pass funciona praticamente da mesma maneira, gerenciando vários arquivos de senha e moldou o programa python que uso em vários mesmos princípios que esse programa usa.

    
por 29.04.2016 / 08:25
0

Aqui você vai:

#!/bin/bash

newTS='date +%s'

if test -r ~/.password
then
        . ~/.password
else
        TS=0
fi

if test 'expr $newTS - $TS' -gt 900
then
        # outdated password record
        rm -f ~/.password

        printf "Please enter your password: "
        read password

        printf "export TS=$newTS\nexport password=$password\n" > ~/.password
fi


echo "using password: $password"

Observação: o código anterior sobrescreverá o arquivo ~/.password , a menos que você o renomeie.

    
por 29.04.2016 / 08:04