Qual é a maneira menos insegura de armazenar uma senha usada por um script?

13

Eu tenho um script Bash que se autentica automaticamente com um serviço usando meu nome de usuário e senha. As credenciais estão atualmente armazenadas como texto sem formatação no script.

Que precauções devo tomar para armazenar essas credenciais com mais segurança e ainda permitir o acesso ao script?

Pontos de esclarecimento:

  • Entendo que, se disponíveis, outros métodos de autenticação devem ser usados. Ainda quero saber o que fazer caso a autenticação por senha seja a única opção.
  • Não armazenar a senha de todo não é uma resposta aceitável aqui. Estou perguntando sobre o caso em que o script deve ter acesso autônomo à senha.
ændrük
fonte
2
não armazene a parte da senha das credenciais, talvez?
Thomas Ward
Não funcionaria para acessar o GNOME Keyring ou algo semelhante?
Firefeather
Talvez se você pudesse armazená-lo como um hash criptográfico (como SHA-1), isso seria bom.
Anónimo
O ROT13 o ocultaria, mas NÃO o protegeria de forma alguma.
Anónimo
@Anonymous Se a senha é armazenada como um hash criptográfico, como você a recomenda?
ændrük

Respostas:

8

Que tipo de serviço? Certos serviços têm outros métodos para autenticar, por exemplo, chaves SSH para SSH em conjunto com o agente SSH.

Gostaria de armazenar a senha separada do script e garantir que todos os componentes do caminho tenham as permissões corretas definidas. Por exemplo, certifique-se de que no caminho /path/to/file, /, /pathe /path/tosão propriedade de um usuário que você confia ( root) e que estes não são editáveis por alguém que não tem permissão para ver seus arquivos. Por fim, as permissões recomendadas filesão 600 ou 400.

Isso filepoderia ser assim:

PASSWORD='something that you cannot remember'

No seu script, use o código abaixo para importar a variável:

. /path/to/file

Quanto ao seu script, verifique se ele não contém falhas que podem permitir que invasores executem código no contexto do script (por exemplo, ambiente não controlado que pode ter um $PATHconjunto de variáveis arbitrário ou uso inválido de outros arquivos (por exemplo, fornecendo um arquivo gravável em todo o mundo) .

Quanto à proteção real da sua senha, você não pode. Ele deve estar disponível de alguma forma para o outro serviço. Como alternativa, você pode criptografar o arquivo / script que contém a senha usando opensslou, gpgportanto, é necessário inserir uma senha antes que as credenciais sejam desbloqueadas. Isso é especialmente útil se a senha do seu serviço for difícil de lembrar.

Lekensteyn
fonte
14

Em vez de codificar a senha no arquivo, armazene a senha em um arquivo separado e proteja o arquivo ( chmod 700ou chmod 500) para que somente os usuários autorizados possam acessá-lo.

Recupere a senha em cat /dir/to/file/with/.passwordvez de ler o arquivo e armazenar o conteúdo em uma variável.

Rinzwind
fonte
Algumas ferramentas ainda têm a opção de ler a senha diretamente de um arquivo exatamente por esse motivo, como a --passphrase-fileopção do gpg .
2
... e transformá-lo em .dotfile (/dir/to/file/with/.password)
knb
2
chmod 400para arquivos (somente leitura). Obviamente, você deve proteger os diretórios principais (700 ou 500 ou até 100, se for paranóico). Observe que 400 (ou 500 para diretórios) é suficiente, outros modos (100) podem ser considerados como segurança pela obscuridade , assim como ocultar o arquivo colocando um ponto na frente do nome.
Lekensteyn
1

Eu sei que essa é uma pergunta antiga, mas enfrentei esse problema semelhante e usei o chaveiro do Ubuntu para resolvê-lo. Aqui está uma solução no ubuntu 18.04LTS Abra o terminal Escreva, keyring set {{service}} {{username}} por exemplo, se você estiver usando isso para o log de senhas da escola:

keyring set school mohamed

Ele registrará você para obter uma senha, digite a senha. Agora a senha que você digitou está armazenada no chaveiro do Ubuntu.

Para obter essa senha, escreva no terminal:

keyring get school mohamed

para usar isso no contexto de um script:

password=$(keyring get school mohamed)

Agora a senha continua com a senha digitada anteriormente.

Mohamed Ashref
fonte