web-dev-qa-db-fra.com

Comment puis-je installer uniquement les mises à jour de sécurité à partir de la ligne de commande?

Sudo apt-get upgrade installe toutes les mises à jour, pas seulement les mises à jour de sécurité. Je sais que je peux utiliser Update Manager pour sélectionner uniquement les mises à jour de sécurité importantes, mais existe-t-il un moyen de le faire à partir de la ligne de commande?

321
Michael Crenshaw

Le paquetage nattended-upgrades fournit une fonctionnalité pour installer automatiquement les mises à jour de sécurité.

Vous pouvez l'utiliser, mais au lieu de configurer la pièce automatique, vous pouvez l'appeler manuellement:

Sudo unattended-upgrade -d --dry-run
Sudo unattended-upgrade -d

Si vous voulez le faire tranquillement à la place:

Sudo unattended-upgrade

REMARQUE: lorsque vous appelez unattended-upgrade, vous laissez le "s" de côté.

Cela suppose que le paquet est installé par défaut, ce qui est probablement le cas. Si non, il suffit de faire:

Sudo apt-get install unattended-upgrades

Voir aussi /usr/share/doc/unattended-upgrades/README.md.

300
blueyed

Quelques conseils sur la gestion des mises à jour

Ceci s'applique à la fois à Debian et à Ubuntu, mais des instructions plus spécifiques pour Ubuntu suivent.

  • Afficher les mises à jour de sécurité uniquement:

    apt-get -s dist-upgrade |grep "^Inst" |grep -i securi 
    

    ou

    Sudo unattended-upgrade --dry-run -d
    

    ou

    /usr/lib/update-notifier/apt-check -p
    
  • Afficher tous les packages pouvant être mis à jour

    apt-get -s dist-upgrade | grep "^Inst"
    
  • Installer les mises à jour de sécurité uniquement

    apt-get -s dist-upgrade | grep "^Inst" | 
        grep -i securi | awk -F " " {'print $2'} | 
        xargs apt-get install
    

Notes:

  • Parfois, Ubuntu affiche les mises à jour de sécurité comme si elles provenaient du référentiel $ release-updates. C'est vrai, me dit-on, car les développeurs Ubuntu transmettent également les mises à jour de sécurité au référentiel $ release-updates pour accélérer leur disponibilité.

    Si tel est le cas, vous pouvez procéder comme suit pour afficher uniquement les mises à jour de sécurité:

    Sudo sh -c 'grep ^deb /etc/apt/sources.list | 
        grep security > /etc/apt/sources.security.only.list'
    

    et

    apt-get -s dist-upgrade -o Dir::Etc::SourceList=/etc/apt/sources.security.only.list -o Dir::Etc::SourceParts=/dev/null  | 
        grep "^Inst" | awk -F " " {'print $2'}
    
  • Vérifiez quels services doivent être redémarrés après les mises à niveau du paquet. Déterminez quels packages vous allez mettre à niveau au préalable et planifiez vos redémarrages/redémarrages. Le problème ici est que, sauf si vous redémarrez un service, il est possible que la version précédente d’une bibliothèque (la raison la plus courante) ait été chargée en mémoire avant l’installation du nouveau package corrigeant une faille de sécurité.

    checkrestart -v
    

    Cependant, gardez à l'esprit que checkrestart peut répertorier les processus qui ne doivent pas nécessairement être redémarrés. Par exemple, le service PostgreSQL peut conserver dans sa mémoire une référence à un fichier xlog déjà supprimé, ce qui n’est pas une raison valable pour redémarrer le service.

    Par conséquent, un autre moyen, plus fiable, de vérifier cela à l’aide d’utils standard est le petit script bash suivant que j’ai volé sans vergogne https://locallost.net/?p=2

    Il vérifie si les processus en cours sur un système utilisent toujours des bibliothèques supprimées en conservant des copies de celles-ci en mémoire active.

    ps xh -o pid |
    while read PROCID; do
           grep 'so.* (deleted)$' /proc/$PROCID/maps 2> /dev/null
           if [ $? -eq 0 ]; then
                   CMDLINE=$(sed -e 's/\x00/ /g' < /proc/$PROCID/cmdline)
                   echo -e "\tPID $PROCID $CMDLINE\n"
           fi
    done
    
113
ILIV

remplacez /etc/apt/preferences par ce qui suit:

Package: *
Pin: release a=lucid-security
Pin-Priority: 500

Package: *
Pin: release o=Ubuntu
Pin-Priority: 50

désormais, un simple apt-get upgrade ne mettra à jour que les mises à jour de sécurité.

Pourquoi (et comment) cela fonctionne: Le fichier de préférences épingle tous les paquets de la distribution Ubuntu sur la priorité 50, ce qui les rend moins souhaitables que les paquets déjà installés. Les fichiers provenant du référentiel de sécurité ont la priorité par défaut (500), de sorte qu'ils sont pris en compte pour l'installation. Cela signifie que seuls les packages considérés comme plus souhaitables que ceux actuellement installés sont des mises à jour de sécurité. Plus d’informations sur l’épinglage dans = page de manuel apt_preferences .

Vous pouvez promouvoir temporairement une distribution donnée pour les mises à jour avec l'option --target-release qui fonctionne avec apt-get et aptitude (au moins), ce qui vous permettra d'épingler certaines versions afin qu'elles soient éligibles pour la mise à niveau.

Si vous souhaitez utiliser ceci uniquement pour les scripts et ne pas le configurer par défaut pour le système, vous pouvez placer les règles dans un autre emplacement et utiliser ceci à la place:

apt-get -o Dir::Etc::Preferences=/path/to/preferences_file upgrade

Cela permettra à apt de rechercher le fichier de préférences à partir d’un emplacement autre que celui par défaut.

Le fichier de préférences donné à titre d'exemple ne s'applique pas aux référentiels tiers. Si vous souhaitez également les épingler, vous pouvez utiliser apt-cache policy pour déterminer facilement les clés requises pour l'épinglage.

46
Ressu

Ce qui suit est confirmé dans Ubuntu 14.04 LTS.

Utilisez le package unattended-upgrade.

Regardez le fichier /etc/apt/apt.conf.d/50unattended-upgrades. Il devrait y avoir une section en haut qui est:

// Automatically upgrade packages from these (Origin:archive) pairs
Unattended-Upgrade::Allowed-Origins {
    "${distro_id}:${distro_codename}-security";
//  "${distro_id}:${distro_codename}-updates";
//  "${distro_id}:${distro_codename}-proposed";
//  "${distro_id}:${distro_codename}-backports";
};

Notez comment il a été configuré pour autoriser uniquement les mises à niveau sans surveillance pour les packages de sécurité, par défaut.

Modifiez le fichier /etc/apt/apt.conf.d/10periodic de la manière suivante:

APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::AutocleanInterval "7";
APT::Periodic::Unattended-Upgrade "1";

Cela exécutera des mises à jour de sécurité automatiques sans surveillance, une fois par jour.

Maintenant, pour exécuter manuellement: Sudo unattended-upgrade.

Pour tester à sec, sans rien faire: Sudo unattended-upgrade --dry-run.

Source: https://help.ubuntu.com/14.04/serverguide/automatic-updates.html

11
vcardillo

Bien que ce soit plutôt moche, vous pouvez désactiver tous les référentiels sauf le référentiel de sécurité, puis procédez comme suit:

Sudo apt-get update && Sudo apt-get upgrade

Je ne l'ai pas testé, mais en théorie, il ne trouverait que les mises à jour dans le référentiel de sécurité et les appliquerait ...

5
Stephen RC
  • apt-get update: il suffit de lire les entrées dans le référentiel - selon la liste existante. Nécessaire pour vérifier ce qui est nouveau.
  • apt-get upgrade: toutes les mises à jour pour les packages installés sans modules du noyau. Aucune mise à jour de version.
  • apt-get dist-upgrade: toutes les mises à jour pour les packages installés, y compris avec les modules du noyau. Aucune mise à jour de version.
  • apt-get avec le paramètre -s: test uniquement, aucune modification effectuée.
3
fuser

Sur Debians, j'utilise cette commande pour ne faire que des mises à jour de sécurité:

apt-get install -y --only-upgrade $( apt-get --just-print upgrade | awk 'tolower($4) ~ /.*security.*/ || tolower($5) ~ /.*security.*/ {print $2}' | sort | uniq )
0
keypress

Je ne trouve pas d'option ni dans apt-get, ni dans aptitude. Cependant, quelqu'un avait le même question sur SuperUser. La seule réponse est:

Check and adjust /etc/apt/apt.conf.d/50unattended-upgrade. 
Did you replace 'karmic' with the code name of your Ubuntu?

Aucune réponse quant à savoir si cela a fonctionné cependant.

0
Ross