Как я могу установить только обновления безопасности из командной строки?

sudo apt-get upgrade устанавливает все обновления, а не только обновления безопасности. Я знаю, что могу использовать диспетчер обновлений, чтобы выбирать только важные обновления безопасности, но есть ли способ сделать это из командной строки?

335
задан 14 February 2016 в 22:30

10 ответов

Пакет необслуживаемых обновлений предоставляет функциональные возможности для автоматической установки обновлений безопасности.

Вы можете использовать это, но вместо настройки автоматической детали вы можете вызвать ее вручную:

sudo unattended-upgrade -d --dry-run
sudo unattended-upgrade -d

Если вы хотите запустить ее тихо:

sudo unattended-upgrade

ПРИМЕЧАНИЕ: Когда вы вызываете unattended-upgrade, вы оставляете «s» без конца.

Это предполагает, что пакет установлен по умолчанию, что, вероятно, и есть. Если нет, просто сделайте:

sudo apt-get install unattended-upgrades

См. Также /usr/share/doc/unattended-upgrades/README.md.

0
ответ дан 14 February 2016 в 22:30

Несколько подсказок относительно того, как справиться с обновлениями

Это применяется и к Debian и к Ubuntu, но более конкретные инструкции для Ubuntu следуют.

  • Покажите обновления системы защиты только:

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

    или

    sudo unattended-upgrade --dry-run -d
    

    или

    /usr/lib/update-notifier/apt-check -p
    
  • Покажите все обновляемые пакеты

    apt-get -s dist-upgrade | grep "^Inst"
    
  • Установите обновления системы защиты только

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

Примечания:

  • Иногда Ubuntu показывает обновления системы защиты, как будто они прибывают из репозитория $release-updates. Это так, мне говорят, потому что разработчики Ubuntu продвигают обновления системы защиты до репозитория $release-updates также ускорять свою доступность.

    Если это так, можно сделать следующее для показа обновлений системы защиты только:

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

    и

    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'}
    
  • Проверьте, какие сервисы должны быть перезапущены после обновлений пакета. Фигура, какие пакеты Вы собираетесь обновить заранее и запланировать Ваши перезапуски/перезагрузки. Проблема здесь состоит в том, что, если Вы не перезапускаете сервис, он все еще может использовать более старую версию библиотеки (наиболее распространенная причина), это было загружено в память перед установкой нового пакета, который устраняет уязвимость системы обеспечения безопасности или что бы то ни было.

    checkrestart -v
    

    Однако имейте в виду это checkrestart может перечислить процессы, которые не должны обязательно быть перезапущены. Например, услуги PostgreSQL могут сохранять в его ссылке памяти на уже удаленный xlog файл, который не является допустимой причиной перезапустить сервис.

    Поэтому другой, более надежный, способ проверить этот стандарт использования utils является следующим небольшим сценарием удара, который я бесстыдно украл из https://locallost.net/? p=233

    Это проверяет, если выполнение процессов в системе все еще пользуется удаленными библиотеками на основании хранения копий тех, которые в активной памяти.

    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
    
116
ответ дан 14 February 2016 в 22:30

Следующее подтверждается в Ubuntu 14.04 LTS.

Используйте пакет unattended-upgrade.

Посмотрите файл /etc/apt/apt.conf.d/50unattended-upgrades. Вверху должен быть раздел:

// 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";
};

Обратите внимание, как по умолчанию он настроен только на автоматическое обновление пакетов безопасности.

Измените файл /etc/apt/apt.conf.d/10periodic следующим образом:

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

Это будет запускать автоматические автоматические обновления безопасности один раз в день.

Теперь, чтобы запустить вручную: sudo unattended-upgrade.

Для проверки в пробном режиме, ничего не делая: sudo unattended-upgrade --dry-run.

Источник: https://help.ubuntu.com/14.04/serverguide/automatic-updates.html

0
ответ дан 14 February 2016 в 22:30

Хотя это довольно уродливо, вы можете отключить все репозитории, кроме репозитория безопасности, а затем сделать: сделайте репо и примените их ...

0
ответ дан 14 February 2016 в 22:30

В Debian я использую эту команду только для обновлений безопасности:

apt-get install -y --only-upgrade $( apt-get --just-print upgrade | awk 'tolower($4) ~ /.*security.*/ || tolower($5) ~ /.*security.*/ {print $2}' | sort | uniq )
0
ответ дан 14 February 2016 в 22:30

заменить /etc/apt/preferences следующим:

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

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

теперь простой apt-get upgrade обновит только все обновления безопасности.

Почему (и как) это работает: файл настроек связывает все пакеты из дистрибутива Ubuntu с приоритетом 50, что делает их менее желательными, чем уже установленные пакеты. Файлы из хранилища безопасности имеют приоритет по умолчанию (500), поэтому они рассматриваются для установки. Это означает, что только пакеты, которые считаются более желательными, чем установленные в настоящее время, являются обновлениями безопасности. Больше информации о закреплении на странице руководства apt_preferences .

Вы можете временно рекламировать определенный дистрибутив для обновлений с опцией --target-release, которая работает с apt-get и aptitude (по крайней мере), что позволит вам закрепить определенные выпуски, чтобы они могли быть обновлены.

Если вы хотите использовать это только для сценариев и не устанавливать его по умолчанию для системы, вы можете поместить правила в другое место и использовать вместо этого:

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

Это сделает правильный взгляд для файла настроек из нестандартного местоположения.

Файл настроек, приведенный в качестве примера, не применяется к сторонним репозиториям. Если вы хотите закрепить их, вы можете использовать apt-cache policy, чтобы легко определить необходимые ключи для закрепления.

0
ответ дан 14 February 2016 в 22:30
  • apt-get update: просто прочитайте записи в репозитории - в соответствии с существующим списком. Нужно проверить что нового.
  • apt-get upgrade: все обновления для установленных пакетов без модулей ядра. Нет релиза обновления.
  • apt-get dist-upgrade: все обновления для установленных пакетов также с модулями ядра. Нет релиза обновления.
  • apt-get с параметром -s: только проверка, без изменений.
0
ответ дан 14 February 2016 в 22:30

Вот сценарий, который достигает этого несколькими различными способами:

#!/usr/bin/env bash
set -e

# List upgradable packages
apt-get update
apt list --upgradable 2>/dev/null
# List security upgrades
test "$(apt-get upgrade -s -y)" && (apt-get upgrade -s -y)
# List upgradable apt packages then upgrade
apt-get update && apt-get upgrade -y  -V | grep '=>' | awk '{print$1}' && test "$(apt-get upgrade -y)"
0
ответ дан 13 September 2019 в 04:19

Если вы хотите установить только обновления безопасности, выполните следующие действия. Сначала он перечисляет все обновляемые пакеты, отфильтровывает только те, которые поступают из репозитория безопасности, вырезает возвращенные строки в первом поле, а затем передает их в apt-get install для обновления пакета.

sudo apt list --upgradable | grep security |cut -d\/ -f1|xargs sudo apt-get install -y
5
ответ дан 25 July 2020 в 15:23

Другие вопросы по тегам:

Похожие вопросы: