![Динамическое сообщение motd из удаленного источника?](https://rvso.com/image/1606686/%D0%94%D0%B8%D0%BD%D0%B0%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5%20%D1%81%D0%BE%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%B8%D0%B5%20motd%20%D0%B8%D0%B7%20%D1%83%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE%20%D0%B8%D1%81%D1%82%D0%BE%D1%87%D0%BD%D0%B8%D0%BA%D0%B0%3F.png)
моттдпозволяет отображать приветственные сообщения при входе в систему для пользователей Linux.
Можно ли настроить motd таким образом, чтобы он извлекал какой-то удаленный URL?
Пример сценария:
информировать пользователей о завершении поддержки Python 2, но прекратить делать это, поскольку срок истек.
подавить это сообщение, если Python2 не установлен
Примеры более сложных сценариев:
- передать аргумент, оценить его динамически и сообщить пользователю, что эта ОС больше не поддерживается.
решение1
Для общесистемных сообщений motd может быть сгенерирован во время загрузки – как это сейчас делают Ubuntu и Debian. У них есть система, update-motd
которая собирает текстовый файл из стандартного заголовка, советов, объявлений, сообщений об обновлении системы и т. д.
В большинстве случаев motd отображается модулем PAM с именем pam_motd
. (Система Debian/Ubuntu на самом деле работает, вызывая модуль дважды — сначала для статического /etc/motd, затем для автоматически сгенерированного /run/motd.)
Поэтому, если вам нужен более динамичный текст (например, на основе имени вошедшего в систему пользователя), вы можете создать собственную версию этого модуля и заставить его делать все, что захотите.
Однако,незаставьте его получать файлы из сети напрямую, так как это только замедлит входы и будет раздражать ваших пользователей каждый раз. Вместо этого настройте cronjob, который загружает файл, а затем просто вызовите существующий модуль pam_motd с именем файла в качестве параметра:
session optional pam_motd.so motd=/tmp/downloaded_message.txt
решение2
/etc/motd
это просто статический текстовый файл.
То, о чем вы говорите, больше похоже на то, что можно реализовать с помощью скрипта входа.
В новых дистрибутивах Linux, как правило, есть каталог /etc/profile.d
, в который можно просто поместить фрагменты скриптов, которые будут выполняться при входе пользователя в систему. Чтобы охватить все распространенные оболочки, следует создать два варианта таких фрагментов скриптов: один, совместимый с POSIX /bin/sh
с .sh
суффиксом, и другой, использующий csh
синтаксис с .csh
суффиксом.
Для более старых дистрибутивов вы можете добавить желаемую функциональность в /etc/profile
и /etc/csh.login
(для всех POSIX sh
-совместимых оболочек и для csh
/ tcsh
-оболочек соответственно).
Конечно, вы можете создать скрипт, который связывается с определенным удаленным URL-адресом и добавляет некоторую соответствующую системную информацию, например, пользовательские заголовки HTTP, которые удаленная сторона может проанализировать и ответить с помощью адаптированного текста сообщения.
Однако, если ответ, возвращаемый с удаленного URL, не является просто текстом, а содержит потенциально исполняемый контент, этот механизм становится уязвимым для безопасности: если сервер, содержащий удаленный URL (или сеть, или сам скрипт входа), не защищен, это может стать способом для злоумышленника получить доступ к вашей системе. Вам придется быть гораздо более осторожным в своей реализации, чтобы предотвратить это.
Вам также следует подумать о том, что произойдет, если удаленный URL-адрес окажется недоступным или сетевое соединение выйдет из строя: вам нужно, чтобы система сообщений отключалась по истечении времени ожидания и продолжала вход в систему в большинстве ситуаций с ошибками.