Como faço para que o dropbear funcione com o initramfs?

6

Estou tentando desbloquear um servidor sem cabeçalho executando uma versão criptografada do Ubuntu 14.04. É uma instalação limpa 14.04.2 com todas as atualizações como por escrito.

Eu passei pelas travessuras padrão com dropbear e busybox , ou seja:

# INSTALL
sudo apt-get install dropbear busybox           # on server

# ENABLE AND CONFIGURE IP
sudo sed -i 's/NO_START=1/NO_START=0/g' /etc/default/dropber
sudo sed -i 's/BUSYBOX=y/BUSYBOX=y\nDROPBEAR=y\n/g' \
            /etc/iniramfs/iniramfs.conf
sudo sed -i 's/DEVICE=.+/DEVICE=etho0/g' \
             /etc/iniramfs/initramfs.conf
sudo sed -i 's/IP=.+/IP=IP=192.168.0.11:::255.255.255.0::eth1:off' \
            /etc/initramfs/initramfs.conf
sudo update-initramfs

# COPY DROPBEAR SSH KEY
# WRONG: sudo cp /etc/dropbear/dropbear_*_host_key /tmp
sudo cp /etc/initramfs-tools/root/.ssh/id_rsa /tmp             # BETTER!
sudo chown $USER:$USER /tmp/id_rsa

scp server:/tmp/id_rsa ~/.ssh/id_rsa_dropbear_server           # on client

sudo reboot                                                    # on server

# CONNECT TO SERVER
ssh -vv -i ~/.ssh/id_rsa_dropbear_server \
        -o 'UserKnownHostsFile=~/.ssh/known_hosts.initramfs' \ 
         [email protected]                                     # on client

Então eu copiei a chave ssh gerada automaticamente e fiz uma configuração mínima de dropbear. Para minha surpresa duas três coisas estão com defeito:

  1. O sistema ignora as configurações de IP. Eu encontrei no site "dispositivos conectados" do meu roteador, que o servidor tem o ip 192.168.0.27 apesar da minha configuração. Então eu tentei o IP errado listado com: ssh -vv -i ~/.ssh/dropbear_dss_host_key -o 'UserKnownHostsFile=~/.ssh/known_hosts.initramfs' [email protected] . Isso se conecta ao dropbear, mas:
  2. O Dropbear ignora todas as chaves públicas que não sejam suas em /etc/initramfs-tools/root/.ssh/authorized_keys (testado com dss - talvez também rsa).
    Resolvido: O Dropbear quer uma senha para a chave, o que eu não tenho. Então eu tentei uma senha vazia. Com o qual o dropbear cai para a autenticação por senha e quer a senha do root, isso não está definido.
  3. O script de gancho personalizado parece ser parcialmente ignorado. Estes são scripts que funcionaram na instalação mais antiga!

Aqui está toda a sessão ssh .

Eu adicionei meu arquivo de chave pública usual aos hosts conhecidos do dropbear no /etc/initramfs-tools/root/.ssh/authorized_keys do servidor e tentei usar a minha chave usual. Isso não funcionou.

Eu adicionei a linha GRUB_CMDLINE_LINUX_DEFAULT="ip=192.168.0.11::192.168.0.1:255.255.255.0::eth0:none" ao /etc/default/grup e ao grup atualizado do servidor. Isso foi feito para corrigir o problema de IP. Mas isso não funcionou também.

Agora estou completamente irritado e no final da minha paciência. Onde foi que eu errei? Além disso, a sintaxe das configurações de IP está correta porque um guia diz ::eth0:off e o próximo diz ::etho:none ?

Editar

Existe alguém com o que parece ser o mesmo problema em 15.04.

Editar 2

Agora posso me conectar ao servidor. Acontece que eu tinha copiado a chave privada errada para usar com dropbear. O erro foi corrigido no meu script acima. Mas a adição de chaves ainda não funciona (por exemplo, para o arquivo authorized_keys do dropbear). Há palavras que você precisa para converter as chaves públicas, que você deseja adicionar ao /etc/initramfs-tools/root/.ssh/authorized_keys para o formato dropbear, mas eu não quero perder tempo pesquisando como. Eu só tentei dss chaves públicas. Talvez o dropbear goste apenas de rsa better?

Também notei que os scripts de gancho personalizados parecem não funcionar. Eles não estão incluídos nos diretórios do initramfs, mas lsinitramfs -l /boot/initrd.img-3.16.0-43-generic os lista como parte da imagem. As configurações de IP ainda são ignoradas também. Mesmo se eu adicionar GRUB_CMDLINE_LINUX_DEFAULT="ip=192.168.0.11::192.168.0.1:255.255.255.0::eth0:none" ao grubconfig em /etc/default/grub e atualizar tudo.

Editar 3

Portanto, parece que /usr/lib/dropbear/dropbearconvert INPUTFORMAT OUTPUTFORMAT INFILE OUTFILE é o programa para converter chaves. O parâmetro FORMAT pode ser openssh ou dropbear . Mas não parece que essa seja a resposta sobre como adicionar chaves aos servidores /etc/initramfs-tools/root/.ssh/authorized_keys . A chave existente já está no formato de arquivo de chave pública do openssh. Portanto, adicionar outras chaves no formato openssh não deve ser um problema. Ainda é.

    
por con-f-use 25.06.2015 / 13:58

3 respostas

2

Aqui está como você converte o dropbear chave. Os scripts de inicialização são um pouco instáveis para mim também ...

    
por billy_ran_away 27.06.2015 / 06:04
2

Não está claro quais known_hosts estão incomodando você - no servidor ou no cliente. Eu usei as instruções em link no Debian. Vou parafrasear essa página e adicionar alguns ajustes que achei úteis. Os pacotes de caixas de depósito Debian contemporâneos criam todas as chaves necessárias no servidor no momento da instalação, mas o tutorial de referência é tão antigo que menciona casos em que as chaves precisam ser criadas manualmente. YMMV.

No servidor. Como você mencionou corretamente, dropbear e OpenSSH são diferentes, mas supostamente são conversíveis. O tutorial diz que você poderia criar no servidor as chaves do host com:

dropbearkey -t rsa -f /etc/initramfs-tools/etc/dropbear/dropbear_rsa_host_key

Na verdade, é um pouco mais difícil do que isso. Para mim no Debian Jessie, os passos foram:

  1. Crie uma chave OpenSSH.

    ssh-keygen -t rsa -b 4096-f bootkey_rsa

  2. Converta para o formato dropbear:

    /usr/lib/dearbear/dearbearconvert openssh dropbear bootkey_rsa bootkey_dropbear_rsa

  3. Extraia sua parte pública para o local onde o dropbear de boot pode usá-la:

    dropbearkey -y -f asusboot_rsa | grep "^ ssh-rsa" > / etc / dropbear-initramfs / authorized_keys

  4. Atualize o initramfs:

    update-initramfs -u -k todos

Observe que o local em que o known_hosts é esperado por update-initramfs, fornecido acima como /etc/dropbear-initramfs/authorized_keys , é flexível e provavelmente muda de distro para distro. Para ter certeza de que você o colocou no lugar certo, leia o arquivo de origem em /usr/share/initramfs-tools/hooks/dropbear .

A outra chave necessária é criada com:

dropbearkey -t rsa -f /etc/initramfs-tools/root/.ssh/id_rsa.dropbear

No cliente, você precisa dos dois tipos de chaves, portanto, há outro known_hosts . No tutorial referenciado, o comando para conectar é:

ssh -o "UserKnownHostsFile=~/.ssh/known_hosts.initramfs" \
-i "~/id_rsa.initramfs" [email protected] \
"echo -ne \"MyS3cr3tK3y\" >/lib/cryptsetup/passfifo"

Uma das chaves, id_rsa.initramfs , é o arquivo /etc/initramfs-tools/etc/dropbear/dropbear_rsa_host_key ou bootkey_rsa da seção do servidor.

No cliente known_hosts , pode haver um conflito entre a chave que você já tem para o servidor OpenSSH e o servidor dropbear que você acabou de instalar. Eu removi temporariamente de known_hosts as chaves para o serviço OpenSSH regular, conectado usando o comando acima (deixando de fora o parâmetro -o ), fui perguntado se eu confio na chave do host, disse sim, e fui anexado ao meu% código%. A partir daí, você precisa mover a última linha para seus próprios known_hosts ( known hosts no exemplo acima).

    
por Nick Alexander 14.07.2016 / 07:06
0

Inicialize seu SERVIDOR conectando e desbloqueando a partição criptografada através de seu CLIENTE

Instalar pacotes obrigatórios (no SERVER)

apt-get install dropbear initramfs-tools busybox

Anexe suas chaves públicas desejadas no arquivo authorized_keys do SERVER

Basta copiar e colar suas chaves públicas em /etc/dropbear-initramfs/authorized_keys no SERVER

Crie o script de desbloqueio

Crie o seguinte script em /etc/initramfs-tools/hooks/crypt_unlock.sh

#!/bin/sh

PREREQ="dropbear"

prereqs() {
  echo "$PREREQ"
}

case "$1" in
  prereqs)
    prereqs
    exit 0
  ;;
esac

. "${CONFDIR}/initramfs.conf"
. /usr/share/initramfs-tools/hook-functions

if [ "${DROPBEAR}" != "n" ] && [ -r "/etc/crypttab" ] ; then
cat > "${DESTDIR}/bin/unlock" << EOF
#!/bin/sh
if PATH=/lib/unlock:/bin:/sbin /scripts/local-top/cryptroot; then
kill \'ps | grep cryptroot | grep -v "grep" | awk '{print \}'\'
# following line kill the remote shell right after the passphrase has
# been entered.
kill -9 \'ps | grep "\-sh" | grep -v "grep" | awk '{print \}'\'
exit 0
fi
exit 1
EOF

  chmod 755 "${DESTDIR}/bin/unlock"

  mkdir -p "${DESTDIR}/lib/unlock"
cat > "${DESTDIR}/lib/unlock/plymouth" << EOF
#!/bin/sh
[ "\" == "--ping" ] && exit 1
/bin/plymouth "\$@"
EOF

  chmod 755 "${DESTDIR}/lib/unlock/plymouth"

  echo To unlock root-partition run "unlock" >> ${DESTDIR}/etc/motd

fi

Torne-o executável:

chmod +x /etc/initramfs-tools/hooks/crypt_unlock.sh

Crie um IP estático (ou pule este passo para usar o DHCP)

Edite /etc/initramfs-tools/initramfs.conf para adicionar (ou alterar) a linha:

IP=192.168.1.254::192.168.1.1:255.255.255.0::eth0:off

format [host ip]::[gateway ip]:[netmask]:[hostname]:[device]:[autoconf]

([hostname] can be omitted)

Atualizar initialramfs

update-initramfs -u

Desabilite o serviço dropbear na inicialização, para que o openssh seja usado após a partição ser descriptografada

sudo update-rc.d dropbear disable

Teste

  1. Reinicie seu servidor
  2. Conecte-se ao seu servidor por meio de ssh [email protected] [-i ~/.ssh/id_rsa]
por ceremcem 05.04.2017 / 12:58