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


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


283
2017-07-28 22:50


Источник


Я так не думаю. dist-upgrade переводит всю систему в новую версию. Я говорю о ежедневных обновлениях, таких как те, которые вы видите в диспетчере обновлений. - mac9416
О, я понимаю, что ты сейчас говоришь. Хех, я часто запускаю apt-get update, я печатаю его, не задумываясь. Спасибо за хедз-ап! - mac9416
Вы хотите «apt-get dist-upgrade», а не «apt-get upgrade». «dist-upgrade» не для новых выпусков (это «do-release-upgrade» - отдельная команда). Использование «dist-upgrade» означает, что оно будет обрабатывать изменения зависимостей новых пакетов. Это может быть важно. - Kees Cook
dist-upgrade - это нормальная работа, выполняемая графическим интерфейсом диспетчера обновлений. Для пакетов, таких как ядро, где есть linux-image-generic пакет, в зависимости от текущего изображения, например linux-image-3.x.y-zz-generic (каждая версия которого является отдельным именем пакета), dist-upgrade (который позволяет устанавливать новые пакеты для удовлетворения зависимостей) будет выполнять это обновление, тогда как обновление покажет пакет ядра как сдержанный. - chronitis
Удивительно, что нет хорошего apt-get основанные на этом ответы, учитывая, насколько заметно это указано на каждом сервере - Karthik T


Ответы:


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

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

sudo unattended-upgrade

или более подробная версия, для контроля того, как это происходит

sudo unattended-upgrade -d

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

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

sudo apt-get install unattended-upgrades

Смотрите также /usr/share/doc/unattended-upgrades/README.md,


262
2017-07-29 17:28



Для отключения автоматического выполнения unattended-upgrade вам, вероятно, необходимо изменить /etc/cron.daily/apt, но не уверен, что это «правильно» сделать это - Jaime Hablutzel
примечание: для сервера Ubuntu 12.04.5 LTS, unattended-upgrades по умолчанию не установлен. - Raptor
Поскольку вы делаете это из командной строки, используйте -v для информационных сообщений или -d для отладочных сообщений. В противном случае утилита будет очень тихой, и в этом случае вам нужно будет проверить журналы в /var/log/unattended-upgrades, Вы также можете использовать --dry-run имитировать, но ничего не обновлять. Для получения дополнительной информации и других возможностей используйте --help для получения справки. - ADTC
я узнал кое-что о unattended-upgrades Cегодня. благодаря! - the0ther
«для мониторинга, как это происходит», это просто отладка неинтерактивных сообщений? - Aquarius Power


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

Это относится как к 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 показывает обновления безопасности, как будто они поступают из репозитория обновлений выпуска. Это, как мне сказали, потому, что разработчики Ubuntu внедряют обновления безопасности в репозиторий $ release-обновлений, а также ускоряют их доступность.

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

    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 - это следующий небольшой скрипт bash, который я бесстыдно украл из 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
    

101
2017-11-16 11:35



Я замечаю только этот пост. Это очень точно. Большое спасибо (+1) - Danduk82
откуда происходит «checkrestart»? Я не могу найти его в Ubuntu Trusty. Я нашел «needrestart», который выглядит так, как он будет соответствовать вашим инструкциям? - Ben XO
Его можно найти в пакете debian-goodies: packages.debian.org/wheezy/debian-goodies, Там также нужен отдых. Вы можете найти и на Xenial, выполнив: $ apt-cache search checkrestart - ILIV
Я получаю "E: Не удалось открыть файл блокировки / var / lib / dpkg / lock - open (13: Permission denied)" даже с sudo. Это что-то конкретное для одного из обновлений или команд, которые вы предоставили? - Nathan Hornby
Скорее всего, речь идет о некорректном / ненормальном завершении dpkg, который оставил незафиксированный файл блокировки. Обычно не происходит до тех пор, пока, например, установка пакета не завершается успешно (полный диск и т. д.) Вероятно, вы не можете запускать другие команды apt-get и dpkg, не так ли? - ILIV


замещать /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 manpage,

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

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

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

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

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


46
2017-07-29 04:12



Спасибо, что нашли время для тщательного ответа. я думать Я понимаю, как это работает. Но когда я создаю файл / etc / apt / preferences и запускаю apt-get upgrade, он хочет обновить все пакеты, а не только обновления для системы безопасности. Обновление списка до и после точно такое же, Кроме с / etc / apt / preferences он не хочет обновлять Leafpad, который я построил из исходного кода и установил «вручную» с помощью dpkg. Это очень странно для меня, но может означать что-то для вас. - mac9416
Вы можете увидеть, что происходит с командой политики apt-cache. Выберите один из пакетов, которые не получают исправления безопасности и запускают apt-cache policy packagename, В этом перечислены приоритеты для различных версий. Вы должны видеть различные линии и разные приоритеты. Если нет линий с приоритетом 50, то приведение в порядок не влияет на пакеты, о которых идет речь по какой-либо причине. - Ressu
Я следовал этому ответу в прошлом. Сегодня я узнал, что из-за этого ответа 68 пакетов обновлений безопасности НЕ установлены на моем сервере и не отображались как потенциальные кандидаты на установку. Это НЕ ХОРОШИЙ ОТВЕТ! - Shade


В 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


9
2017-10-03 17:18



Есть ли способ сделать это ежемесячным расписанием? - mike.b93
@ mike.b93, я считаю, что установка APT::Periodic::Unattended-Upgrade "30"; Сделал бы это - каждые 30 дней. - vcardillo


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

sudo apt-get update && sudo apt-get upgrade

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


5
2017-07-29 00:00



Да, это возможность. Я посмотрю. Я плохо разбираюсь в BASH, но я могу попытаться сделать сценарий для этого. - mac9416
ОК, я отключил все, кроме репозиториев безопасности Ubuntu, и запустил sudo apt-get update && sudo apt-get upgrade (отмена до того, как были сделаны какие-либо обновления). Затем я снова включил все мои репозитории, побежал sudo apt-get updatee, и открыл диспетчер обновлений. Пакеты, помеченные как обновления для системы безопасности, не совсем то, что apt-get upgrade но они были очень близки - достаточно близко для меня. Мне все еще хотелось бы знать, как именно это делает диспетчер обновлений и как сделать то же самое из командной строки, но это будет сделано. Благодаря! - mac9416


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

3
2017-08-02 09:49





Я не могу найти вариант в apt-get или aptitude, однако у кого-то был тот же вопрос на SuperUser. Единственный ответ:

Проверьте и настройте /etc/apt/apt.conf.d/50unattended-upgrade. Вы заменили «karmic» на кодовое имя вашего Ubuntu?

Однако ответа не было, однако, что это сработало.


0
2017-07-28 23:04



Похоже, что метод, описанный в этой странице wiki, зависит от установки аргумента aptitude -target-release для <release> -security. Подобно OP этого вопроса, этот метод устанавливает все обновления, а не только обновления безопасности. Чтение страниц apt-get и aptitude man, я не думаю, что аргумент -target-release даже предназначен для ограничения обновлений до простой безопасности, хотя я не уверен, что именно является для. - mac9416