Usando sed para restabelecer o hash de senha de um usuário

1

As informações da versão desta pergunta são as seguintes:

root@hypervisor:~# uname -a
Linux hypervisor 4.4.35-1-pve #1 SMP Fri Dec 9 11:09:55 CET 2016 x86_64 GNU/Linux
root@hypervisor:~# cat /etc/debian_version
8.9
root@hypervisor:~#

Como os containers Linux tendem a ser frequentemente criados / destruídos, eu preciso criar uma maneira de preservar as senhas dos usuários para suas contas de usuário nesses containers.

Para isso, salvo /etc/shadow antes de destruir um contêiner. Quando o contêiner é reimplantado, faço o seguinte nos contêineres Linux recriados:

#!/bin/bash

HASH_TO_REPLACE=$(grep testuser /etc/shadow)
HASH_TO_RESTORE=$(grep testuser /root/shadow_SAVE)

echo "HASH_TO_REPLACE: $HASH_TO_REPLACE"
echo "HASH_TO_RESTORE: $HASH_TO_RESTORE"

sed -i "s!$HASH_TO_REPLACE!$HASH_TO_RESTORE!" /etc/shadow

Isso parece funcionar bem. Mas tem uma coisa que me preocupa:

Entendo que ! nunca pode aparecer dentro de um hash de senha (não desativado). Então, eu usei como meu sed delimitador por enquanto. Mas a possibilidade de a senha ser desativada (nesse caso, ! apareceria no arquivo shadow) significa que ! não deve ser usado como o delimitador sed . Quais outros caracteres têm a garantia de nunca aparecer em um hash de senha e, portanto, são seguros para usar como um delimitador de sed?

    
por Dave 10.08.2017 / 18:41

1 resposta

0

Os seguintes caracteres são usados para codificar hashes de senha no Debian 8 (meu caso de uso; isso muito provavelmente se aplica de forma bastante ampla entre as implementações modernas do Linux):

./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

Qualquer caractere que não esteja neste conjunto e não um ponto de exclamação (usado para representar senhas desativadas) pode ser usado como um delimitador sed.

    
por 10.08.2017 / 22:22