O apt-check pode detectar uma atualização de kernel necessária para segurança na ausência de genéricos do Linux?

5

Isso foi colocado em espera como não claro. Talvez eu coloque em muita explicação de fundo. Mea culpa. Então:

ESTA É A PERGUNTA, REWORDED AINDA DE OUTRO MODO:

Pode o apt-check, por exemplo,

/usr/lib/update-notifier/apt-check

ser feito para tratar possíveis atualizações do kernel, da mesma forma que atualiza não-kernel, detectando-as e distinguindo entre aquelas que incorporam correções de segurança, e aquelas que não, de modo que aquelas que serão refletidas na segunda campo de saída do apt-check, sem ter o meta-pacote linux-genérico instalado?

E se o apt-check não puder fazer isso, existe algum outro programa que possa?

user535733 parece ter entendido e respondido explicitamente em um comentário:

"... Se você desinstalar o metapacote, NÃO haverá outro método automatizado para verificar as atualizações do kernel ... a menos que você mesmo o escreva".

Se ninguém discordar, e user535733 não disser que eu o entendi errado, e colocar isso em uma resposta, darei a ele os pontos Brownie.

user535733 e waltinator sugerem que eu poderia escrever um programa para fazer isso sozinho. O Waltinator pode até reescrever o código-fonte do apt-check, mas eu não sou. Eu poderia roteirizar uma solução alternativa, mas precisaria encontrar uma maneira de distinguir entre atualizações de kernel que tenham novas correções de segurança e aquelas que não o fazem.

Obrigado, gentlesapients.

= = = material adicionado termina - post original segue = = =

apt-check (do pacote update-notifier), que normalmente é usado para gravar o MOTD, mas pode ser chamado diretamente, retorna a saída do formulário:

x;y

em que x é o número de possíveis atualizações. e y é o número de possíveis atualizações de SEGURANÇA

Quando linux-generic não está instalado, uma possível atualização do kernel NÃO conta para o primeiro número. Se uma atualização do kernel é necessária para corrigir falhas de segurança em kernels mais antigos, ela conta para o segundo número? Em outras palavras, pode apt-check depender de dizer que você PRECISA atualizar o kernel na ausência do metapacote que depende do kernel mais recente?

Se isso não estiver claro, aqui está um exemplo concreto:
Toda vez que eu atualizo para 4.4.0-77, ele bloqueia meus sistemas Xenial, dos quais eu tenho 2, ambos na mesma máquina. A única solução que encontrei que realmente funciona é restaurar um backup fsarchiver do sistema borked, montar todos os meus sistemas, executar o lilo (como update-grub para um carregador de inicialização diferente) para localizar o kernel novo / antigo, reinicializar no restaurado sistema e desinstalar o linux-generic para que ele não instale automaticamente 4.4.0-77. Agora eu verifiquei o kernel que o linux-generic instalaria executando:

apt-get install --simulate linux-generic.

Talvez quando chegarmos a 78 ou 80 ou mesmo a 4.4.1, tentarei linux-generic novamente.

Então, apt-check vai me dizer quando uma das novas atualizações do kernel não é apenas para novos e brilhantes recursos, mas na verdade está corrigindo uma falha de segurança? Ou depende de linux-generic para fazer isso? E se este último, existe alguma alternativa para apt-check para este fim?

    
por Lew Rockwell Fan 08.05.2017 / 00:50

3 respostas

3

A sua pergunta é um pouco confusa, mas acho que se resume à questão do título, e é isso que eu vou abordar.

Como o Apt seleciona o pacote para atualizar

Não, o A dançou P ackage T ool , da maneira pretendida, não pode instalar novos pacotes (por exemplo, linux-image-*-generic ) automaticamente, a menos que outro pacote dependa dele. Ele apenas atualiza pacotes já instalados automaticamente e substitui sua versão anterior no processo.

Esta é uma razão pela qual usamos meta-pacotes como linux-image-generic : para tornar o Apt ciente de novos pacotes para instalar sem a necessidade de substituir versões mais antigas. Fazemos isso para pacotes do kernel porque seria difícil substituir o kernel atualmente em execução e porque as pessoas querem reverter para uma versão do kernel anterior, conhecida para o trabalho, mais facilmente no caso de algo dar errado.

Além disso, o Apt não sabe ou se preocupa com a semântica dos números de versão. Tudo o que importa é a ordem das seqüências de números de versão e uma lista de versões disponíveis para selecionar a mais adequada para instalação com base em um sistema de classificação configurável. Os gerentes de pacote (repositório) são responsáveis pela incorporação e publicação de mudanças upstream incl. correções de segurança em pacotes de substituição com uma string de versão adequada.

O que isso significa para apt-check

Agora que abordamos o Apt em geral, posso abordar como isso afeta sua pergunta em relação a update-notifier , o pacote que fornece apt-check : como o Apt, não pode estar ciente de novos pacotes a serem instalados se não dependerem já instalado ou programado para ser pacotes instalados. Se você não tiver o linux-image-generic instalado, o Apt não verá novos pacotes do kernel e nem update-notifier quando consultar o Apt para pacotes atualizáveis.

E se eu realmente quiser esse recurso?

Naturalmente, como a maioria das coisas no Linux, você pode escrever uma ferramenta que procura padrões entre todos os pacotes disponíveis para instalá-los (semi-) automaticamente. Eu pelo menos não conheço nenhuma ferramenta on-board que possa fazer isso, embora essa tarefa pareça genérica o suficiente para que eu não ficasse surpreso em ver um script para isso que algum administrador hackou junto.

    
por David Foerster 09.05.2017 / 13:18
2

No Xenial, os upgrades não assistidos instalam apenas correções de segurança por padrão. E no Atualizador de Software, você pode selecionar apenas atualizações de segurança a serem instaladas. Mas quanto ao seu problema, as próximas atualizações de segurança provavelmente conterão as alterações de atualizações anteriores à não segurança, que também danificam seu sistema, então é melhor relatar um bug contra o Linux para corrigir o problema nas próximas atualizações.

De qualquer forma, na linha de comando você pode executar

apt-cache policy linux-generic

para ver se a última atualização disponível é uma atualização de segurança.

No Xenial, você pode instalar a atualização de segurança mais recente do linux-generic manualmente por

apt-get install linux-generic/xenial-security
    
por jarno 12.05.2017 / 05:32
0

Obrigado a todos e obrigado a Andy na Canonical que deu algumas boas dicas em outro fórum. Eu procurei um pouco nisso, não apenas aqui, e aprendi algumas coisas e suspeitei de outras. Demais para colocar em um comentário.

Estritamente falando, a pergunta foi respondida correta e prontamente pelo user535733 no segundo comentário ao meu post inicial e, para ser justo, se ele colocar isso em uma resposta, ficarei feliz em aceitá-lo.

@ user535733 - Observe o acima, por favor.

Mas o assunto foi expandido por waltinator no primeiro comentário para incluir a possibilidade de criar uma ferramenta para fazer o trabalho e por David em COMO o apt-check funciona e por que ele não fará isso sem o gen-linux instalado. / p> O seguinte está longe de ser completo, algumas delas são especulações (claramente rotuladas, eu espero), pode até haver alguns pequenos erros (imagine isso) e eu posso voltar e editar mais algumas coisas. Talvez alguém tropeçando em esta página encontrará algumas dessas informações de interesse. Você pode ter que executar os comandos em seu próprio sistema para ver a saída claramente no formato correto.

re apt-check & amp; linux-generic:

O genérico do Linux parece ser um arenque vermelho. Mea culpa, eu assumi que a falta era o problema. Eu não acho que o apt-check não possa fazer isso, mesmo que o IS genérico do Linux esteja instalado. É uma questão difícil de testar sem instalar o 4.4.0-77. Vou testar no futuro, quando não precisar me preocupar com um kernel que quebra sistematicamente meus sistemas xeniais.

O problema NÃO é que o apt-check não tenha acesso aos dados necessários. Você definitivamente NÃO precisa do linux-generic instalado para obter metadados sobre possíveis atualizações do kernel suficientes para mostrar o que está disponível e se ele possui correções de segurança.

Eu assumo que "apt-get update", uma parte do apt, obtém a informação (mais sobre isso abaixo), mas o que quer que seja:

  • NÃO requer que o linux-generic seja instalado para ver possíveis atualizações do kernel.

  • NÃO requer que o linux-generic seja instalado para determinar de qual versão do kernel o linux-generic depende atualmente.

  • NÃO requer o genux-linux para determinar se uma possível atualização do kernel tem correções de segurança.

Além disso, qualquer informação obtida para começar, a informação persiste localmente (presumivelmente até que você a limpe). Portanto, mesmo fora da linha e sem o genérico do linux instalado, o apt-check tem acesso às informações necessárias - ele simplesmente não o usa, provavelmente BY DESIGN. Mas ele pode ser usado em um script - eu não tenho o genux-linux instalado e aqui estão 2 exemplos de um teste que funciona no meu sistema mesmo offline:

$ apt-cache showpkg linux-image-4.4.0-75-generic | grep "$(lsb_release --codename --short)-security"

e a saída:

4.4.0-75.96 (/var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_xenial-security_main_binary-amd64_Packages) (/var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_xenial-updates_main_binary-amd64_Packages)

File: /var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_xenial-security_main_binary-amd64_Packages

File: /var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_xenial-security_main_i18n_Translation-en

$

Então, 4.4.0-75 tem correções de segurança.

Em contraste:

$ apt-cache showpkg linux-image-4.4.0-77-generic | grep "$(lsb_release --codename --short)-security"

e a saída (apenas um retorno do prompt):

$ 

4.4.0-77 NÃO.

re apt-check & amp; apt:

Apt-check, parte do update-notifier-common (not update-notifier como mencionado acima), pode depender do apt para suas informações sobre pacotes, como David indica, provavelmente especificamente em "apt-get update", mesmo se O apt não depende do genérico-linux para informações sobre possíveis atualizações do kernel. É o que eu esperaria e não vejo nenhuma alternativa, mas estranhamente, a menos que os devs tenham marcado as dependências erradas, o apt NÃO é uma dependência para o apt-check:

$ apt-rdepends update-notifier-common | grep apt

e a saída:

Reading package lists... Done
Building dependency tree       
Reading state information... Done
  Depends: python3-apt
python3-apt
  Depends: libapt-inst2.0 (>= 1.1~exp9)
  Depends: libapt-pkg5.0 (>= 1.1~exp9)
  Depends: python-apt-common
libapt-inst2.0
  Depends: libapt-pkg5.0 (>= 1.1~exp9)
libapt-pkg5.0
python-apt-common
$

Portanto, em teoria, você não precisa executar o apt-check - você pode usá-lo em um sistema gerenciado com o dpkg e o dselect, embora eu não consiga ver como isso funciona. Eu certamente não daria chances até que eu realmente tentei (e talvez por curiosidade mais tarde), mas é assim que as dependências são marcadas. Você pensaria que os devs marcariam apt como uma dependência para update-notifier-common se um de seus comandos REQUIRED estiver apto a funcionar, mas pode ser um descuido.

Então, com relação à pergunta original, aqui está o que agora suspeito ser verdadeiro:

"O apt-check ... pode ser feito para tratar possíveis atualizações do kernel, da mesma forma que faz atualizações não-kernel, detectando-as e distinguindo entre aquelas que incorporam correções de segurança, e aquelas que não ... sem ter o meta-pacote linux-genérico instalado? "

Não, e provavelmente também não pode ser genérico com o linux.

"E se o apt-check não puder fazer isso, existe algum outro programa que possa?"

Não, fora da caixa, por assim dizer.

Mas, você está criando algo que possa

Como o Waltinator sugeriu, o apt-check provavelmente poderia ser reescrito para fazê-lo se você tiver o conhecimento e a inclinação. Mas, como David sugeriu, essa função provavelmente pode ser roteirizada com outras ferramentas e eu provavelmente posso fazer isso muito mais facilmente do que aprender a reescrever o apt-check.

Como mencionado anteriormente, você pode obter o nome do pacote que contém o kernel mais novo e mais inteligente abençoado pela Canonical, aplicando alguns grep e cut magic na saída de:

apt-get install --simulate linux-generic

e você pode classificá-lo como tendo / not_having correções de segurança com algo como

apt-cache showpkg linux-image-4.4.0-75-generic | grep "$(lsb_release --codename --short)-security"

como ilustrado acima.

Idealmente, para fazer isso, precisamos de um histórico de versão completo do que o genux-generic dependeu para evitar um falso negativo em uma situação como esta:

Você tem a versão 100 instalada.

A versão 101 tinha correções de segurança, mas seu computador não estava ligado naquela semana.

A versão 102 NÃO possui correções de segurança (em relação a 101, mas em relação a 100, pois ainda possui as que foram feitas em 101).

Seria bom se eu pudesse enrolar um histórico completo de versões do linux-genérico e, de alguma forma, descobrir em qual "bolso" do repo os kernels dependentes foram publicados. Até agora, eu só descobri como fazer isso para versões antigas que ainda estão no repositório.

Este comando:

apt-cache madison linux-generic

está indo na direção certa, mas acho que só recebe o que está no repo, não o que estava no repo, então não tenho certeza se a informação que ele gera será suficiente para evitar o cenário falso-negativo detalhado acima. Se no exemplo acima, 101 já foi retirado do repositório, eu não acho que a informação do "apt-cache madison linux-genérico" seria suficiente.

E, oh sim

Mais uma coisa que eu devo apontar para que alguém se interesse nisto e gaste muito tempo sem saber:

Eu ainda estou cutucando isso porque eu comecei e sou teimosa. Mas enquanto, por puro acaso até onde eu posso dizer, o kernel que me deu problemas NÃO tem correções de segurança, e portanto se eu tivesse um script de trabalho para isso, ele nunca teria quebrado meus sistemas xeniais, Andy me diz que 4.4.0-77 é um caso raro e que a grande maioria das atualizações do kernel que o genux-generic depende do DO tem correções de segurança. Eu suspeito que ele estava sendo figurativo / hiperbólico quando disse "99%", mas mesmo admitindo isso, eu suspeito que um mecanismo do tipo apt-check que se aplica a possíveis atualizações do kernel não irá prevenir uma necessidade desnecessária ) Atualize com muita freqüência, e assim evitará atualizações desnecessárias do kernel, quebrando o apt ou outros componentes cruciais do sistema, ainda mais raramente. Parece ser apenas casual aleatório que teria feito isso por mim. BTW, 4.4.0-78 funciona bem para mim. Andy estava certo - o que quer que fosse sobre o 77 é fixo.

    
por Lew Rockwell Fan 11.05.2017 / 23:46