web-dev-qa-db-fra.com

Apt-check peut-il détecter une mise à niveau du noyau nécessaire à la sécurité en l'absence de linux-generic?

Cela a été mis en attente comme non clair. Peut-être que j'ai mis trop d'explication de fond. Mea culpa. Alors:

CECI IS LA QUESTION, AUCUNE AUTRE FAÇON:


Peut vérifier, c'est-à-dire

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

être fait pour traiter les mises à niveau potentielles du noyau, de la même manière que les mises à niveau non-noyau, en les détectant et en distinguant celles qui intègrent des correctifs de sécurité et celles qui ne le sont pas, de sorte que celles qui le seront seront reflétées dans le deuxième champ d'apt -check's output, sans avoir le méta-paquet linux-generic installé?

Et si apt-check ne peut pas faire cela, y a-t-il un autre programme qui le peut?


user535733 semble avoir compris et a répondu explicitement dans un commentaire:

"... Si vous désinstallez le méta-paquet, il n'existe AUCUNE autre méthode automatisée pour vérifier les mises à niveau du noyau ... sauf si vous l'écrivez vous-même."

Si personne ne désapprouve et que user535733 ne dit pas que je l’ai mal compris, et qu’il mette cela dans une réponse, je lui donnerai les points Brownie.

user535733 et waltinator suggèrent tous les deux que je pourrais écrire un programme pour le faire moi-même. Waltinator est peut-être prêt à réécrire le code source d'apt-check mais je ne le suis pas. Je pourrais peut-être créer un script pour une solution de contournement, mais je devrais trouver un moyen de faire la distinction entre les mises à niveau du noyau qui comportent de nouveaux correctifs de sécurité et les autres.

Merci, gentilsapients.

= = = fin du matériel ajouté - le message d'origine suit = = =

apt-check (du paquet update-notifier), qui est normalement utilisé pour écrire le MOTD, mais peut être appelé directement, retourne le résultat sous la forme:

x;y

où x est le nombre de mises à niveau possibles
et y est le nombre de mises à niveau possibles de SECURITY

Lorsque linux-generic n'est pas installé, une mise à niveau possible du noyau NE compte PAS pour le premier nombre. Si une mise à niveau du noyau est nécessaire pour corriger les failles de sécurité dans les noyaux plus anciens, est-ce que cela compte dans le deuxième nombre? En d'autres termes, peut-on compter sur apt-check pour vous dire que vous devez BESOIN de mettre à niveau le noyau en l'absence du métapaquet qui dépend du dernier noyau?

Si ce n'est pas clair, voici un exemple concret:
Chaque fois que je mets à niveau vers la version 4.4.0-77, mes systèmes Xenial, dont j’en ai deux, sont tous installés sur la même machine. La seule solution qui fonctionne réellement est de restaurer une sauvegarde fsarchiver du système bloqué, de monter tous mes systèmes, de lancer lilo (comme update-grub pour un autre chargeur de démarrage) afin de trouver le nouveau/ancien noyau, de redémarrer le système restauré et désinstallez linux-generic pour qu’il n’installe pas automatiquement la version 4.4.0-77. En ce moment, je vérifie ce que le noyau linux-generic DEVRAIT installer en lançant:

apt-get install --simulate linux-generic.

Peut-être que lorsque nous arriverons à 78 ou 80 ou même à 4.4.1, j'essaierai à nouveau linux-generic.

Donc, apt-check me dira-t-il que l'une des nouvelles mises à niveau du noyau ne concerne pas uniquement les nouvelles fonctionnalités géniales de gee-whiz, mais corrige en réalité une faille de sécurité? Ou cela dépend-il de linux-generic pour le faire? Et dans ce dernier cas, existe-t-il une alternative à apt-check à cette fin?

4

Votre question est un peu compliquée, mais je pense que cela se résume à la question simple dans le titre, c'est donc ce que je vais aborder.

Comment Apt sélectionne le paquet à mettre à jour

Non, le A a avancé P ackage T ool , comme prévu, ne peut pas installer de nouveaux packages (par exemple, linux-image-*-generic) automatiquement, sauf si un autre package en dépend dessus. Il met à jour automatiquement les packages déjà installés et remplace leur version précédente dans le processus.

C'est l'une des raisons pour lesquelles nous utilisons des méta-packages tels que linux-image-generic: pour informer Apt des nouveaux packages à installer sans qu'il soit nécessaire de remplacer les anciennes versions. Nous le faisons pour les packages de noyau car il serait difficile de remplacer le noyau en cours d’exécution et parce que les utilisateurs souhaitent revenir plus facilement à une version antérieure du noyau connue pour fonctionner au cas où quelque chose se passerait mal.

De plus, Apt ne connaît pas la sémantique des numéros de version et ne s'en soucie pas. Tout ce qui compte, c’est l’ordre des chaînes de numéros de version et une liste des versions disponibles pour sélectionner celle qui convient le mieux à l’installation, en fonction d’un système de classement configurable. Les gestionnaires de package (référentiel) sont responsables de l’incorporation et de la publication des modifications en amont, y compris les modifications. correctifs de sécurité dans les packages de remplacement avec une chaîne de version appropriée.

Qu'est-ce que cela signifie pour apt-check

Maintenant que nous avons couvert Apt en général, je peux expliquer en quoi cela affecte votre question concernant update-notifier, le paquet qui fournit apt-check: comme Apt, il ne peut pas avoir connaissance des nouveaux paquets à installer si ceux-ci ne dépendent pas. sur des paquets déjà installés ou programmés pour être installés. Si vous n'avez pas installé linux-image-generic, alors Apt ne verra pas les nouveaux packages du noyau, ni update-notifier lorsqu'il demandera à Apt des packages pouvant être mis à niveau.

Et si je veux vraiment cette fonctionnalité?

Bien sûr, comme avec la plupart des choses sous Linux, vous pouvez écrire un outil qui recherche les motifs parmi tous les paquets disponibles pour les installer (semi-) automatiquement. Au moins, je ne connais aucun outil embarqué capable de le faire, bien que cette tâche semble assez générique pour que je ne sois pas surpris de voir un script que certains administrateurs ont piraté ensemble.

3
David Foerster

Dans Xenial, les mises à niveau sans assistance installent uniquement les correctifs de sécurité par défaut. Et dans Software Updater, vous ne pouvez sélectionner que les mises à jour de sécurité à installer. Mais en ce qui concerne votre problème, les mises à jour de sécurité à venir contiendront probablement les modifications des mises à jour antérieures non liées à la sécurité, qui détruisent également votre système. Vous devez donc signaler un bogue sur Linux pour résoudre le problème dans les prochaines mises à jour.

Quoi qu'il en soit, en ligne de commande, vous pouvez exécuter

apt-cache policy linux-generic

à voir, si la dernière mise à jour disponible est une mise à jour de sécurité.

Sous Xenial, vous pouvez installer manuellement la dernière mise à jour de sécurité de linux-generic en

apt-get install linux-generic/xenial-security
2
jarno

Merci à vous tous et merci à Andy de Canonical qui a donné de bons conseils dans un autre forum. J'ai un peu fouillé là-dessus, pas seulement ici, et j'ai appris certaines choses et j'en soupçonne d'autres. Trop de choses à mettre dans un commentaire.

Strictement parlant, user535733 a répondu correctement et rapidement à la question dans le deuxième commentaire de mon message initial et, en toute justice, s'il le mettait dans une réponse, je serais heureux de l'accepter.

@ user535733 - Notez ce qui précède, s'il vous plaît.

Mais Waltinator dans le premier commentaire a étendu le sujet à la possibilité de créer un outil permettant de faire le travail et à David dans HOW apt-check fonctionne et POURQUOI il ne le fera pas sans linux-generic installé.

Ce qui suit est loin d’être complet, certaines sont spéculatives (clairement identifiées, je l’espère), il pourrait même y avoir quelques erreurs flagrantes (imaginez cela) et je pourrais revenir pour éditer quelques éléments supplémentaires. Peut-être que quelqu'un trébucher sur cette page trouver un peu de cet intérêt. Vous devrez peut-être exécuter les commandes sur votre propre système pour que la sortie apparaisse clairement au format correct.


sur apt-check & linux-generic:

Le générique Linux semble être un fouillis rouge. Mea culpa, j'ai supposé que c'était le problème qui manquait. Maintenant, je ne pense pas qu'apt-check ne puisse pas faire cela AT ALL, même si linux-generic IS est installé. C'est une question délicate à tester sans installer 4.4.0-77. Je testerai à l'avenir, quand je n'aurai pas à m'inquiéter d'un noyau qui casse systématiquement mes systèmes xenial.

Le problème n'est PAS qu'apt-check n'ait pas accès aux données nécessaires. Vous n'avez certainement PAS besoin que linux-generic soit installé pour obtenir des métadonnées sur les mises à niveau potentielles du noyau suffisantes pour montrer ce qui est disponible et si elle contient des correctifs de sécurité.

Je suppose que "apt-get update", une partie d'apt, reçoit les informations (plus de détails ci-dessous), mais WHATEVER les obtient:

  • linux-generic ne nécessite PAS d'être installé pour voir les mises à niveau potentielles du noyau.

  • linux-generic N'EST PAS nécessaire d'être installé pour déterminer la version du noyau dont dépend actuellement linux-generic.

  • linux-generic N'A PAS besoin de déterminer si une mise à niveau potentielle du noyau contient des correctifs de sécurité.

En outre, quelle que soit l’origine de cette information, celle-ci persiste localement (probablement jusqu’à ce que vous l’ayez effacée). Ainsi, même hors ligne et sans linux-generic installé, apt-check a accès aux informations nécessaires - il ne les utilise tout simplement pas, probablement BY DESIGN. Mais il peut être utilisé dans un script - je n'ai pas installé linux-generic et voici 2 exemples de test qui fonctionne sur mon système même en mode hors connexion:

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

et la sortie:

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

$

Donc, 4.4.0-75 HAS des correctifs de sécurité.

En revanche:

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

et la sortie (juste un retour de l'invite):

$ 

4.4.0-77 NE PAS.


re apt-check & apt:

Apt-check, qui fait partie de update-notifier-common (pas update-notifier comme indiqué ci-dessus), peut dépendre d'apt pour ses informations sur les paquets, comme David l'indique, probablement plus précisément sur "apt-get update", même si apt ne le fait pas. dépend de linux-generic pour des informations sur les mises à niveau potentielles du noyau. C'est ce à quoi je m'attendais et je ne vois aucune alternative, mais étrangement, à moins que les développeurs n'aient marqué les dépendances comme étant incorrectes, apt n'est PAS une dépendance pour apt-check:

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

et la sortie:

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
$

Donc, en théorie, vous n'avez pas besoin d'aptitude à exécuter apt-check - vous pouvez l'utiliser sur un système géré avec dpkg et dselect, bien que je ne vois pas comment cela pourrait fonctionner. Je ne dirais certainement pas que ce serait le cas tant que je ne l'aurai pas réellement essayé (et je pourrais peut-être plus tard par curiosité), mais c'est ainsi que les dépendances sont marquées. Vous pourriez penser que les développeurs marqueraient apt comme une dépendance de update-notifier-common si l'une de ses commandes REQUIREd est susceptible de fonctionner, mais il peut s'agir d'un oubli.

Donc, en ce qui concerne la question initiale, voici ce que je soupçonne à présent d’être vrai:

"Peut-on apt-check... Être fait pour traiter les mises à niveau potentielles du noyau, de la même manière que les mises à niveau non-noyau, en les détectant et en distinguant celles qui intègrent des correctifs de sécurité, et celles qui ne le font pas.... Sans la méta -package linux-generic installé? "

Non, et probablement pas avec linux-generic non plus.

"Et si apt-check ne peut pas faire cela, y a-t-il un autre programme qui le peut?"

Non, pas hors de la boîte, pour ainsi dire.

Mais, re créer quelque chose qui peut

Comme Waltinator l'a suggéré, apt-check pourrait probablement être réécrit pour le faire si vous en avez les connaissances et le goût. Mais, comme David l'a suggéré, cette fonction peut probablement être scriptée avec d'autres outils et je peux probablement le faire beaucoup plus facilement que d'apprendre à réécrire apt-check.

Comme mentionné précédemment, vous pouvez obtenir le nom du paquet contenant le noyau le plus récent et le plus brillant, doté de la bénédiction de Canonical, en appliquant un peu de grep et une magie parfaite à la sortie de:

apt-get install --simulate linux-generic

et vous pouvez le classer comme ayant/ne pas avoir de correctifs de sécurité avec quelque chose comme

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

comme illustré ci-dessus.

Idéalement, pour écrire ceci, nous avons besoin d'un historique complet de la version sur laquelle repose le générique Linux afin d'éviter un faux négatif dans une situation comme celle-ci:

Vous avez la version 100 installée.

La version 101 contenait des correctifs de sécurité, mais votre ordinateur n’était pas allumé cette semaine-là.

La version 102 ne contient PAS de correctifs de sécurité (par rapport à 101, mais par rapport à 100, car elle contient toujours les correctifs de 101).

Ce serait bien si je pouvais boucler l'historique complet des versions de linux-generic et découvrir en quelque sorte dans quelle "poche" de repo les noyaux dépendants ont été publiés. Jusqu'à présent, je n'ai découvert comment faire cela qu'avec les anciennes versions. qui sont encore dans le repo.

Cette commande:

apt-cache madison linux-generic

va dans la bonne direction mais je pense qu’il n’obtient que IS dans le référentiel, pas ce qu’il en était dans le référentiel; je ne suis donc pas sûr que les informations fournies seront suffisantes pour éviter le scénario faux négatif détaillé ci-dessus. Si, dans l'exemple ci-dessus, 101 avait déjà disparu du dépôt, je ne pense pas que les informations fournies par "apt-cache madison linux-generic" seraient suffisantes.

Et, ah oui

Une dernière chose que je devrais signaler, de peur que quelqu'un ne s’intéresse à cela et y passe beaucoup de temps sans le savoir:

Je suis toujours en train de piquer ça parce que j'ai commencé et que je suis têtu. Mais si, par hasard, le noyau qui m'a posé problème n'a PAS de correctifs de sécurité, donc si j'avais un script qui marche pour cela, il n'aurait jamais cassé mes systèmes xéniaux, Andy me dit que 4.4.0-77 est un cas rare et que la grande majorité des mises à niveau du noyau dont dépend linux-generic ont des correctifs de sécurité. Je le soupçonne d’être figuratif/hyperbolique quand il dit "99%", mais même en tenant compte de cela, j’imagine qu’un mécanisme similaire à apt-check qui s’applique aux éventuelles mises à niveau du noyau n’empêchera pas un processus inutile (du point de vue de la sécurité). ) met à jour très souvent, et empêchera ainsi les mises à jour inutiles du noyau de casser apt ou d’autres composants essentiels du système, encore plus rarement. Il semble que ce soit un hasard si cela aurait été le cas pour moi. BTW, 4.4.0-78 fonctionne bien pour moi. Andy avait raison - tout ce qui concernait le 77 est corrigé.

0
Lew Rockwell Fan