Почему некоторые из моих журналов используют Localhost, а другие Hostname - разные серверы

Почему некоторые из моих журналов используют Localhost, а другие Hostname - разные серверы

Я отлаживаю что-то, связанное с логинами LDAP,Вход через Ldap SSH не работает - Те же конфигурации работали на 20+ других серверах - Ubuntuи я заметил, что на некоторых серверах логи используют localhost, а на других — имя хоста. Наличие имени хоста, кажется, имеет наибольший смысл, особенно если мы собираемся централизовать файлы журналов.

Как это настраивается? Почему по умолчанию не используется имя хоста? Просто стало любопытно...

Примеры :

Oct 29 11:23:56 daily sshd[20625]: pam_unix(sshd:session): session opened for user LDAPUSERNAME by (uid=0)

Или

Oct 29 10:56:36 localhost sshd[2560]: pam_unix(sshd:auth): check pass; user unknown

Обновлять:

user@qa-ops:~$ hostname
qa-ops
user@daily:~$ hostname
daily.domain.com

Может быть, это связано с тем, что Daily использует полное доменное имя в hostname? Я всегда думал, что /etc/hostname — это просто короткая часть hostname, а не полное hostname.domain.com и т. д.

решение1

https://wiki.archlinux.org/index.php/rsyslog#Configure_Hostname

Rsyslog использует процедуру glibc gethostname() или gethostbyname() для определения имени хоста локальной машины. Процедура gethostname() или gethostbyname() проверяет содержимое /etc/hostsдля полного доменного имени (FQDN), если вы не используете BIND или NIS.

Точнее, если localhostзапись о вашем IP-адресе стоит первой в /etc/hosts, то она будет иметь приоритет.

(Предполагается, что filesэто первое значение в hosts:строке в /etc/nsswitch.conf. Или же ваше имя хоста не может быть разрешено с помощью DNS).


На странице Arch Wiki далее поясняется:

Вы можете проверить, каков текущий настроенный FQDN локальной машины, запустив hostname --fqdn. Вывод hostname --short будет использоваться rsyslog при записи сообщений журнала. Если вы хотите иметь полные имена хостов в журналах, вам нужно добавить $PreserveFQDN в начало файла (перед использованием любой директивы, которая записывает в файлы). Это связано с тем, что rsyslog считывает файл конфигурации и применяет его на ходу, а затем считывает последующие строки.

Файл /etc/hosts содержит ряд строк, которые сопоставляют FQDN с IP-адресами и которые сопоставляют псевдонимы с FQDN. Смотрите пример файла /etc/hosts ниже:

/etc/хосты

#<ip-address> <hostname.domain.org>   <hostname>
#<ip-address>      <actual FQDN>                       <aliases>
127.0.0.1 localhost.localdomain somehost.localdomain  localhost somehost
::1               localhost.localdomain somehost.localdomain  localhost somehost

localhost.localdomain — первый элемент, следующий за IP-адресом, поэтому функция gethostbyname() вернет localhost.localdomain как полное доменное имя локальной машины. Затем файл /var/log/messages будет использовать localhost как имя хоста.

Чтобы использовать somehost в качестве имени хоста, переместите somehost.localdomain в первый элемент:

/etc/хосты

#<ip-address> <hostname.domain.org>                           <hostname>
#<ip-address>      <actual FQDN>                                              <aliases>
127.0.0.1 somehost.localdomain localhost.localdomain  localhost somehost
::1               somehost.localdomain localhost.localdomain  localhost somehost

Может быть сложно сказать, как именно выбирается соответствующая информация /etc/hosts(или DNS) в различных обстоятельствах. Читая исходный код еще раз, я думаю, rsyslogчто пытается разрешить системное имя хоста (вывод hostnameкоманды) в полное доменное имя.

Я думаю, это означает, что там, где выше написано "gethostname или gethostbyname", на самом деле должно быть написано "gethostnameиgethostbyname». Так что эти инструкции, вероятно, можно было бы улучшить, но они, по крайней мере, указывают вам правильное место.

Очень похожий вопрос задают и наСписок рассылки rsyslog-users.

Связанный контент