Всякий раз, когда устанавливается обновление критической бибилотеки библиотеку, к примеру OpenSSL, нам необходимо перезапустить все демоны, которые используют эту библиотеку. Systemd с PID 1 сам также использует OpenSSL. В этой статье представлена инструкция как перезапустить демон systemd другие службы, такие как Nginx, SSHD, Firewalld, не перезагружая Linux.
Применение обновлений безопасности для systemd и других приложений в Linux
Первым делом установите обновление с помощью вашего менеджера пакетов
1 | apt update && apt upgrade |
1 | dnf update |
1 | zypper ref && zypper up |
Как получить список служб, нуждающихся в перезапуске в Linux и systemd
Когда обновления применены, мы можем проверить, нуждается ли CentOS / RHEL / Fedora в полной перезагрузке и перезапуске служб:
1 | needs-restarting |
Мы можем использовать команду needrestart для проверки того, какие демоны необходимо перезапустить после обновления библиотеки в Debian или Ubuntu/Mint Linux:
1 | needrestart |
В OpenSUSE/Suse Enterprise Linux мы можем установить пакет lsof и использовать команду zypper ps для получения списка всех таких служб, которые нуждаются в перезапуске
1 | zypper ps |
К сожалению, не в каждом дистрибутиве Linux есть инструменты для определения такого состояния. Не бойтесь. Мы можем использовать команду lsof для получения списка всех таких служб.
1 2 3 | lsof | grep -i deleted lsof | grep -i 'lib-name' lsof | grep libssl |
Вот как найти все службы, использующие libssl для перезапуска после обновления OpenSSL, используя комбинацию команд grep, awk и других команд
1 2 | lsof | grep libssl | awk '{print $1}' | sort | uniq lsof | grep 'DEL.*lib' | cut -f 1 -d ' ' | sort -u |
Перезапуск служб Linux
Перезапуск служб с помощью systemctl выполняется следующим образом, чтобы перезапустить службы одну за другой
1 2 | systemctl restart nginx systemctl restart firewalld |
перезапустить все службы, которые этого требуются в CentOS можно следующей конмадой
1 | for s in $(sudo needs-restarting -s); do sudo systemctl restart $s; done |
Перезапустить systemd с PID 1 без перезагрузки
Выполните следующую команду
1 | systemctl daemon-reexec |
И проверьте его снова:
1 | lsof | grep 'DEL.*lib' | cut -f 1 -d ' ' | sort -u |
daemon-reexec - Повторное выполнение менеджера systemd. Это приведет к сериализации состояния менеджера, повторному выполнению процесса и повторной десериализации состояния. Эта команда малопригодна, за исключением отладки и обновления пакетов. Иногда она может быть полезна в качестве тяжелой перезагрузки демона. Во время повторного выполнения демона все сокеты, которые systemd прослушивает от имени пользовательской конфигурации, останутся доступными.