Então, primeiro, eu sei, devo usar a autenticação de chave com SSH. Não há necessidade de me explicar isso.
O problema aqui é que eu tenho um (grande) grupo de servidores e preciso que um script seja capaz de conectar cada um deles.
Uso uma autenticação de chave sempre que posso, mas não é possível em todos os servidores (não tenho controle sobre isso). Então SSH com login, ou às vezes telnet.
Então, para alguns, eu apenas armazenei as senhas em um banco de dados e meu script vai levá-las quando necessário. O problema é que não parece realmente seguro fazê-lo dessa maneira. Existe uma maneira de torná-lo um pouco mais seguro?
Como alguma maneira específica de armazená-lo?
ssh
password
password-management
wokati
fonte
fonte
Respostas:
Se o seu script puder se conectar a qualquer um desses servidores, qualquer pessoa com acesso ao script (ou acesso privilegiado à máquina na qual o script é executado) poderá se conectar a qualquer um desses servidores.
Se o script precisar ser executado de forma autônoma, todas as apostas estão desativadas. A resposta aqui é não, não existe uma maneira absolutamente segura de armazenar senhas nesse ambiente . Não há maneira absolutamente segura e prática de fazer qualquer coisa.
Em vez de tentar evitar o inevitável, você deve se concentrar na defesa em profundidade .
Primeiramente, é claro, você deve proteger as senhas adequadamente . Isso geralmente significa mantê-los em um arquivo separado do seu script e configurar permissões restritivas do sistema de arquivos . É tudo o que você pode fazer nessa frente, do ponto de vista da segurança.
Outras medidas certamente podem adicionar obscuridade ao processo. Criptografar as senhas fará com que o invasor precise procurar a chave de descriptografia. O uso de algum tipo de armazenamento protegido pelo sistema operacional geralmente protege contra outros usuários acessando sua chave (portanto, não oferece vantagem sobre as permissões do sistema de arquivos, além de ser complexo para atacar - e usar). Essas medidas atrasarão um ataque, mas certamente não o impedirão contra um determinado atacante.
Agora, vamos tratar as senhas como públicas por um momento. O que você pode fazer para mitigar os danos?
Uma solução antiga e testada é restringir o que essas credenciais podem fazer. Em um sistema UNIX, uma boa maneira de fazer isso é configurar um usuário separado para o seu script e limitar os recursos desse usuário , nos servidores de acesso e nos acessados. Você pode limitar os recursos do usuário no nível SSH , no nível do shell ou possivelmente usando um mecanismo de Controle de Acesso Obrigatório, como o SELinux .
Algo que você também pode querer considerar é mover a lógica do script para os servidores . Dessa forma, você obtém uma interface menor que é mais fácil de controlar, e especialmente para ...
Monitor . Sempre monitore o acesso aos servidores. De preferência, autenticação e comandos de log executados em um log somente anexado . Não se esqueça de monitorar as alterações no arquivo de script usando
auditd
, por exemplo.Obviamente, muitos desses mecanismos não serão úteis se você não tiver controle sobre os servidores, como parece sugerir sua pergunta. Se for esse o caso, recomendo que você entre em contato com as pessoas que administram os servidores e informe-os sobre seu script e as possíveis armadilhas de segurança.
fonte
A resposta curta é não.
A resposta longa é: Não, não existe um caminho completamente seguro. (Isso inclui variáveis de ambiente, que podem ser acessadas por outras pessoas no servidor.) O mais próximo que você pode chegar é armazená-las em algum formato criptografado - keepass, um arquivo criptografado por GPG ou qualquer outra coisa nesse sentido. Mas em algum momento você precisa descriptografar a senha para que seu script possa usá-la e, nesse ponto, você estará vulnerável.
Em outras palavras, é necessário examinar profundamente a segurança detalhada, tanto no servidor em que o script é executado, na rede e nos servidores de destino.
fonte
Você pode criptografar as senhas no seu banco de dados com uma segunda senha e armazená-la em uma máquina separada (terceira) e ter um sistema no local em que o script que precisa das senhas da base de dados conecte primeiro essa terceira máquina para obter a senha de descriptografia , descriptografa a senha no banco de dados com a senha que obteve da 3ª máquina e faz seu trabalho.
É claro que isso realmente não adiciona nenhuma segurança extra; um invasor com privilégios suficientes também pode solicitar a senha da 3ª máquina.
Mas o ponto é que uma terceira parte pode controlar a terceira máquina, por exemplo, seu chefe ou oficial de segurança ou a terceira parte no controle dos servidores que você não controla.
Dessa forma, você pode dizer a eles, se eles tiverem um problema, se você sair do seu emprego e eles não confiarem no cara que está substituindo você, ou eles apenas querem que seus scripts parem de acessar suas máquinas, eles podem desligar o terceiro máquina e seus scripts não terão mais acesso às senhas.
fonte