É possível “instalar” um gancho que será chamado antes da remoção de um pacote?

1

Antecedentes: no Ubuntu eu gostaria de evitar que sshd registrasse erros ao tentar carregar o arquivo ssh_host_dsa_key quando eu removê-lo. Parece não haver nenhuma opção de configuração em sshd_config para impedir que sshd tente isso. Por isso eu uso chattr +i para definir o atributo imutável no arquivo, depois de esvaziá-lo.

Agora, vamos pegar este exemplo específico ( openssh-server package) em sua resposta.

Pergunta: Como posso instalar um script que é executado antes de qualquer coisa que o próprio pacote possa chamar durante a remoção (remoção)?

Como você pode imaginar, ao limpar ( apt-get --purge remove ) o pacote, ele falha devido ao atributo imutável. Esse gancho me permitiria remover o atributo imutável e permitir que a remoção do pacote fosse bem-sucedida.

Se a chave DSA não puder ser carregada, o seguinte erro aparecerá nos registros:

sshd[5669]: error: Could not load host key: /etc/ssh/ssh_host_dsa_key
    
por 0xC0000022L 30.04.2015 / 00:06

2 respostas

1

Você pode executar ações de desinstalação arbitrárias através dos scripts prerm e postrm no pacote deb, você pode reconstruir o pacote para isso, mas pode também funcionar se você editar o openssh-server.prerm (em código%). (Esses são semelhantes ao arquivo de especificação do RPM /var/lib/dpkg/info/ e %preun sections.)

O pacote atual do OpenSSH usa isso para %postun e limpa o arquivo de configuração. Você pode ver estes por exemplo aqui na configuração do pacote update-alternatives que o Ubuntu usa.

Consulte o link (seção 7.6 especialmente).

Meu entendimento da instalação e operação do pacote OpenSSH no Ubuntu é que as várias chaves são criadas apenas na nova instalação, em vez de sob demanda em cada inicialização, como em algumas distribuições.

Eu acredito que o único outro tipo de "gancho" que o Ubuntu oferece é o Apport de detecção de falhas, que não é útil aqui.

openssh_6.6p1-2ubuntu1.debian.tar.xz em si não cria o arquivo que você referencia, mas ( sshd default sshd_config settings) espera que ele exista. Neste momento, o OpenSSH não permite que você escolha quais algoritmos de hostkey ativam explicitamente , pois com HostKey , eles são ativados implicitamente quando chaves de host viáveis de cada tipo (RSA , DSS, ECDSA) são encontrados na inicialização. A alternativa é especificar um KexAlgorithms para cada tipo de chave que você deseja suportar para substituir o padrão.

    
por 30.04.2015 / 12:12
3

Você pode adicionar um gancho para o comando dpkg . Crie um arquivo /etc/dpkg/dpkg.cfg.d/my_hook (crie o diretório, se ele não existir) contendo

pre-invoke=/usr/local/sbin/dpkg-pre-hook

O programa /usr/local/sbin/dpkg-pre-hook é executado antes que dpkg realize uma operação. A variável de ambiente DPKG_HOOK_ACTION contém a ação que dpkg está realizando: um dos install , unpack , configure , remove ou purge , talvez um pouco mais. Você não conhece os nomes dos pacotes que estão sendo manipulados - esses ganchos foram projetados para atualizar o estado do sistema (por exemplo, para manter um índice de pacotes ou documentação atualizados), não para influenciar o comportamento do indivíduo. pacotes. No entanto, você pode dizer o que está acontecendo examinando os argumentos passados para dpkg . Isso não é totalmente robusto, mas deve funcionar desde que o administrador do sistema não tente quebrá-lo.

#!/bin/bash
IFS=$'\t' read -a arguments < <(</proc/$PPID/cmdline tr '
pre-invoke=/usr/local/sbin/dpkg-pre-hook
' '\t') shift arguments case $DPKG_HOOK_ACTION in remove|purge) for x in "${arguments[@]}"; do case $x in openssh-server) …;; esac done esac

Seu exemplo é muito estranho. Você está quase certamente latindo na árvore errada . O pacote do Ubuntu não cria um novo arquivo ssh_host_ecdsa_key quando você remove o pacote (que coisa bizarra de se fazer!). remove esse arquivo de chaves (junto com outros arquivos de chaves e outros arquivos de configuração) quando você

elimina o pacote. Se você não deseja que o arquivo-chave seja removido, remova o pacote em vez de limpá-lo ou faça um backup do arquivo-chave.

Se você não quiser que o servidor SSH use um tipo de chave específico (o que provavelmente não é uma boa ideia, em primeiro lugar), não mexa nos atributos de arquivo. Use a opção para esse efeito no arquivo de configuração: passe a opção HostKey explicitamente para as chaves que você deseja usar, e os nomes dos arquivos de chaves padrão não serão usados.

Para arquivos fornecidos por um pacote (que não é o caso dos arquivos de chave SSH, que precisam ser gerados em cada máquina), use dpkg-divert se você não quiser que um arquivo específico esteja em sua localização fornecida pelo pacote.

    
por 03.05.2015 / 00:26

Tags