Оповещение пользователей о событиях

Рейтинг: 62.3% · 11 голосов
Курс LPIC-2 (201-450 и 202-450): емкостное планирование, ядро, хранилище и RAID/LVM, продвинутая сеть, DNS/BIND, Apache/Nginx, Samba/NFS, DHCP/LDAP, почта, безопасность и VPN.
Ответить
Аватара пользователя
Sergey_Sysadmin
Сообщения: 134
Зарегистрирован: 11 май 2026, 05:31

Оповещение пользователей о событиях

Сообщение Sergey_Sysadmin »

Оглавление курса (41)
  1. Введение в LPIC-2 и уровень инженера
  2. Измерение и устранение проблем с ресурсами [200.1]
  3. Прогнозирование потребности в ресурсах
  4. Компоненты ядра Linux [201.1]
  5. Сборка ядра из исходников [201.2]
  6. Управление модулями ядра в рантайме [201.3]
  7. Кастомизация запуска системы [202.1]
  8. Восстановление системы [202.2]
  9. Альтернативные загрузчики [202.3]
  10. Работа с файловой системой Linux [203.1]
  11. Обслуживание файловых систем [203.2]
  12. Создание и настройка опций ФС [203.3]
  13. Программный RAID [204.1]
  14. Тюнинг доступа к устройствам хранения [204.2]
  15. Менеджер логических томов LVM [204.3]
  16. Базовая конфигурация сети [205.1]
  17. Продвинутая конфигурация сети [205.2]
  18. Диагностика сетевых проблем [205.3]
  19. Сборка и установка программ из исходников [206.1]
  20. Резервное копирование [206.2]
  21. Оповещение пользователей о событиях (вы здесь)
  22. DNS-сервер BIND: базовая настройка [207.1]
  23. Зоны DNS: создание и сопровождение [207.2]
  24. Безопасность DNS-сервера [207.3]
  25. Веб-сервер Apache: базовая настройка [208.1]
  26. Apache и HTTPS [208.2]
  27. Кэширующий прокси Squid [208.3]
  28. Веб-сервер и обратный прокси Nginx [208.4]
  29. Файловый сервер Samba [209.1]
  30. Файловый сервер NFS [209.2]
  31. DHCP-сервер [210.1]
  32. Аутентификация PAM и SSSD [210.2]
  33. Использование LDAP-клиента
  34. Сервер OpenLDAP [210.4]
  35. Почтовый сервер Postfix [211.1]
  36. Управление доставкой почты и Sieve [211.2]
  37. Доступ к почтовым ящикам: Dovecot [211.3]
  38. Linux как маршрутизатор и фильтр [212.1]
  39. FTP-серверы [212.2]
  40. SSH углублённо [212.3]
  41. Безопасность, IDS и VPN [212.4 + 212.5]
Урок 20. Оповещение пользователей о событиях [206.3]

Сервер редко принадлежит одному человеку. На нем сидят коллеги по ssh, крутятся фоновые сессии, кто-то именно сейчас редактирует конфиг в vim. Если вы молча перезагрузите машину, вы потеряете чужую работу и доверие. Этот урок про то, как культурно сообщать людям важное: показывать баннер до входа, выводить приветствие после входа, рассылать срочные сообщения на все терминалы и корректно гасить систему с предупреждением и таймером, давая всем шанс сохраниться и выйти.

Изображение

Как это работает

Есть три точки, где система может что-то сказать пользователю. Первая - текст ДО аутентификации. Его показывают программы, обслуживающие вход с терминала: agetty печатает содержимое /etc/issue над приглашением login на локальных консолях (tty), а sshd при сетевом входе может показать /etc/issue.net. Сюда пишут предупреждения вроде запрета несанкционированного доступа. Важно: для графического входа (GDM на Wayland) эти файлы не работают - там баннер настраивается отдельно в самом дисплейном менеджере.

Вторая точка - текст ПОСЛЕ успешного входа. Этим занимается PAM-модуль pam_motd: при логине он выводит /etc/motd (message of the day). Сам файл статичен, но в Debian и Ubuntu давно используют динамический motd - каталог /etc/update-motd.d/ с исполняемыми скриптами. pam_motd запускает их по порядку имен и склеивает вывод. Так на экран попадают свежие данные: загрузка, обновления, число пакетов к установке.

Третья точка - сообщения работающим пользователям прямо сейчас. Команда wall (write all) шлет текст на терминалы всех залогиненных. Она не спрашивает разрешения у получателя на системные сообщения, но обычный пользователь не достучится до тех, кто закрыл прием командой mesg n. От root доходит почти всегда.

Отдельная тема - остановка системы. В 2026 за shutdown, reboot и halt отвечает systemd: эти команды лишь просят systemd-logind перевести машину в нужное состояние. logind аккуратно завершает сессии, отправляет процессам SIGTERM, ждет, потом SIGKILL, размонтирует ФС. Перед этим он рассылает через wall предупреждение всем сессиям, чтобы люди успели среагировать. Принцип простой: дать таймер, объяснить причину, дать возможность отменить.

Команды и примеры

Баннер до входа и приветствие после. issue поддерживает спецсимволы agetty: \n - имя хоста, \l - номер tty, \d \t - дата и время.

Код: Выделить всё

# /etc/issue (локальная консоль, до логина)
Cyberlake node \n (\l)  -  доступ только для авторизованных лиц
Дата: \d \t

# /etc/issue.net (сетевой вход по ssh) - спецсимволы НЕ раскрываются
Authorized access only. All activity is logged.
Чтобы sshd реально показал issue.net, в /etc/ssh/sshd_config включите баннер и перечитайте сервис:

Код: Выделить всё

Banner /etc/issue.net
# затем:
systemctl reload sshd     # Debian/Ubuntu и RHEL/Fedora одинаково
Статический motd - просто текст:

Код: Выделить всё

echo "Плановое обслуживание в субботу 02:00-03:00 MSK" > /etc/motd
Динамический motd (Debian 13, Ubuntu 24.04). Скрипты должны быть исполняемыми, имя задает порядок:

Код: Выделить всё

cat > /etc/update-motd.d/50-cyberlake <<'EOF'
#!/bin/sh
printf "Uptime:%s\n" "$(uptime -p)"
printf "Свободно на /: %s\n" "$(df -h / | awk 'NR==2{print $4}')"
EOF
chmod +x /etc/update-motd.d/50-cyberlake
run-parts /etc/update-motd.d/   # проверить вывод вручную
В RHEL 10 и Fedora каталога update-motd.d по умолчанию нет; современный путь - drop-in файлы в /etc/motd.d/ (их тоже собирает pam_motd), либо динамика через systemd-unit, пишущий в /run/motd.dynamic.

Рассылка всем сейчас:

Код: Выделить всё

wall "Перезагружаю шлюз через 5 минут, сохранитесь"
wall -g developers "Деплой через 10 минут"   # только группе
echo "Текст из файла" | wall                  # из stdin
Корректная остановка с таймером и текстом. Текст после времени уходит всем как предупреждение:

Код: Выделить всё

# через 10 минут, с причиной
shutdown -r +10 "Обновление ядра, перезагрузка в 23:40"

# к конкретному времени (формат ЧЧ:ММ)
shutdown -h 23:30 "Ночное обслуживание"

# отменить уже запланированное
shutdown -c

# разослать предупреждение, НО не выключать (только выгнать = заблокировать новые входы)
shutdown -k +5 "Технические работы, не входите"
Эквиваленты через systemctl - то же самое, без таймера и текста, поэтому для людей предпочтительнее shutdown:

Код: Выделить всё

systemctl reboot
systemctl poweroff
systemctl halt
Команда now - немедленно, без отсрочки и без вежливости: shutdown -h now. На сервере с людьми так делать не стоит.

Частые грабли
  • Спецсимволы вроде \n работают в /etc/issue (его раскрывает agetty), но в /etc/issue.net их обычно не раскрывают - туда пишите готовый текст без escape-кодов.
  • Поправили issue.net, а баннера нет - в sshd_config не задан Banner либо забыли reload sshd. Сама правка файла ничего не включает.
  • Скрипт в /etc/update-motd.d/ не исполняемый (нет chmod +x) или с ошибкой в шебанге - молча пропускается, motd пустеет.
  • Лишний вывод motd при ssh раздражает - дело в двойном источнике: статический /etc/motd плюс динамика. Чистите оба или отключайте PrintMotd в sshd, чтобы не дублировалось с pam_motd.
  • shutdown без указания времени в старых скриптах подразумевает +1, а не now - можно нарваться на неожиданную минуту ожидания. Всегда указывайте время явно.
  • Запланировали shutdown -r +30 и ушли - отменить можно только shutdown -c с той же машины; перезагрузка самого процесса не спасет, задание держит systemd.
  • wall с дефисами и кавычками из буфера может притащить не-ASCII символы, которые на чужом терминале превратятся в кашу. Пишите простой текст.
Мини-лаба
  • Допишите в /etc/issue строку с предупреждением и спецсимволами \n и \l. Откройте локальную консоль (Alt+F2) и убедитесь, что баннер виден до логина.
  • Заполните /etc/issue.net, добавьте Banner /etc/issue.net в sshd_config, выполните systemctl reload sshd и зайдите по ssh - проверьте баннер.
  • Создайте скрипт /etc/update-motd.d/60-test, выводящий uptime, сделайте его исполняемым и проверьте вывод через run-parts (или просто перелогиньтесь по ssh).
  • Откройте вторую сессию под другим пользователем. Из первой выполните wall с любым сообщением и убедитесь, что оно пришло во вторую.
  • Запланируйте shutdown -r +15 "тест" и проверьте, что предупреждение разослалось. Затем отмените его командой shutdown -c.
  • Сравните поведение: systemctl reboot против shutdown -r +5 "причина" - отметьте, кто рассылает предупреждение, а кто нет.
Контрольные вопросы
  • Какая программа выводит /etc/issue на локальной консоли и в какой момент относительно ввода логина?
  • Чем /etc/issue отличается от /etc/issue.net по содержимому и по тому, кто его показывает?
  • Какой PAM-модуль отвечает за вывод motd и как реализован динамический motd в Debian/Ubuntu и в RHEL?
  • Как командой shutdown отменить ранее запланированную остановку и как заблокировать новые входы без выключения?
  • Почему shutdown с текстом и таймером предпочтительнее systemctl poweroff на сервере с пользователями?
  • Как отправить сообщение через wall только определенной группе и доходит ли оно до пользователей с mesg n?
👍2 ❤️6 🔥2 😄 🤔2
Аватара пользователя
strapp
Сообщения: 1
Зарегистрирован: 23 май 2026, 08:16

Re: Оповещение пользователей о событиях

Сообщение strapp »

А динамический motd в update-motd.d тормозит логин если скрипт лезет в сеть? у меня apt-проверка обновлений секунды три висела пока не вынес ее в кеш
👍 ❤️ 🔥 😄 🤔2
Аватара пользователя
mochajoe
Сообщения: 1
Зарегистрирован: 12 май 2026, 05:06

Re: Оповещение пользователей о событиях

Сообщение mochajoe »

Заметил что shutdown -c отменяет, а вот предупреждение про отмену само не рассылается - люди думают что ребут все еще будет. Приходится вручную wall кидать что отбой
👍 ❤️2 🔥1 😄 🤔
Ответить
← Предыдущая глава
Резервное копирование [206.2]
Следующая глава →
DNS-сервер BIND: базовая настройка [207.1]

Все главы курса «LPIC-2: инженер Linux (201 + 202)»

Поделиться темой: ✈ Telegram VK

Вернуться в «LPIC-2: инженер Linux»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость