Как включить syslogd для приема входящих подключений на Snow Leopard от удаленных регистраторов?
Как заставить syslogd принимать входящие соединения от удаленных хостов на Snow Leopard?
Я хотел бы централизовать ведение журналов таким образом, чтобы различные устройства и системы отправляли журналы в syslogd Snow Leopard, который обычно зависает на UDP 514. Однако я не могу заставить их успешно приниматься хорошим ole syslogd. Я tcpdumped на поле Snow Leopard, чтобы проверить, что пакеты направляются на порт 514 - они есть. Я проверил, что syslogd слушает на 514 - это не так.
Погуглив, мне сказали, что в старых версиях OSX (разве вам не нравится, как в OSX все так быстро меняется) нужно просто добавить флаг в демон syslogd, чтобы разрешить удаленное управление; один сделал это в com.apple.syslogd.plist. Однако у демона syslogd нет флагов (по крайней мере, на его странице руководства), которые предлагают что-либо удаленное.
Какое решение для этого?
Вторичный, менее важный, но актуальный вопрос: что такое "newsyslog"? Я вижу файл plist, но он не работает (по-видимому).
Спасибо
3 ответа
Я не пробовал это, но я посмотрел в списке для syslogd (/System/Library/LaunchDaemons/com.apple.syslogd.plist) и вижу, что эта часть закомментирована:
<!--
Un-comment the following lines to enable the network syslog protocol listener.
-->
<!--
<key>NetworkListener</key>
<dict>
<key>SockServiceName</key>
<string>syslog</string>
<key>SockType</key>
<string>dgram</string>
</dict>
-->
Удалите комментарии, а затем перезагрузите сервис:
$ sudo launchctl unload /System/Library/LaunchDaemons/com.apple.syslogd.plist
$ sudo launchctl load /System/Library/LaunchDaemons/com.apple.syslogd.plist
и вы, скорее всего, на вашем пути.
Ответ на второй вопрос - newsyslog
похоже на logrotate, часто встречающийся в системах linux. man newsyslog
(или онлайн) расскажет вам больше.
Как установлено с Snow Leopard, он запускается каждые 30 минут launchd
за этот бит в его списке:
<key>StartCalendarInterval</key>
<dict>
<key>Minute</key>
<integer>30</integer>
</dict>
Обратите внимание, что если вы пытаетесь сделать это на компьютере со Snow Leopard Server (по крайней мере с 10.6.4), вы обнаружите, что в /System/Library/LaunchDaemons/com.apple.syslogd нет закомментированного раздела.plist (и что файл plist хранится в двоичном формате).
Тем не менее, копирование и вставка ключа, который Дуг цитирует выше, поможет, хотя сначала вам нужно будет преобразовать формат файла в текст таким образом:
sudo plutil -convert xml1 /System/Library/LaunchDaemons/com.apple.syslogd.plist
... и вам, вероятно, следует впоследствии преобразовать его (преобразования происходят на месте):
sudo plutil -convert binary1 /System/Library/LaunchDaemons/com.apple.syslogd.plist
... затем перезагрузите демон launchd в соответствии с инструкциями Дага.
После этого полный файл plist должен выглядеть следующим образом:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>EnableTransactions</key>
<true/>
<key>HopefullyExitsLast</key>
<true/>
<key>Label</key>
<string>com.apple.syslogd</string>
<key>MachServices</key>
<dict>
<key>com.apple.system.logger</key>
<true/>
</dict>
<key>OnDemand</key>
<false/>
<key>ProgramArguments</key>
<array>
<string>/usr/sbin/syslogd</string>
</array>
<key>Sockets</key>
<dict>
<key>AppleSystemLogger</key>
<dict>
<key>SockPathMode</key>
<integer>438</integer>
<key>SockPathName</key>
<string>/var/run/asl_input</string>
</dict>
<key>BSDSystemLogger</key>
<dict>
<key>SockPathMode</key>
<integer>438</integer>
<key>SockPathName</key>
<string>/var/run/syslog</string>
<key>SockType</key>
<string>dgram</string>
</dict>
<key>NetworkListener</key>
<dict>
<key>SockServiceName</key>
<string>syslog</string>
<key>SockType</key>
<string>dgram</string>
</dict>
</dict>
</dict>
</plist>
Еще одно замечание: если, как и я, вы хотите отправлять выходные данные системного журнала базовых станций AirPort (и / или Time Capsules) на ваш сервер, они используют функцию 0, которую нельзя изменить. Это означает, что они будут автоматически зарегистрированы в /var/log/appfirewall.log из-за следующей записи по умолчанию в /etc/syslog.conf:
local0.* /var/log/appfirewall.log
На серверной версии ОС вы можете смело изменять имя файла, например, AirPort.log, выполнив следующую команду:
sudo touch /var/log/AirPort.log
... так как брандмауэр приложений Apple (socketfilterfw) по умолчанию отключен (и должен оставаться отключенным на сервере - ipfw - это все, что вам действительно нужно). Я не уверен, что возможно переконфигурировать socketfilterfw для использования другого средства системного журнала.
Еще один метод включения сетевого доступа к syslogd на Snow Leopard - использование программы командной строки PlistBuddy,
sudo /usr/libexec/PlistBuddy /System/Library/LaunchDaemons/com.apple.syslogd.plist
add :Sockets:NetworkListener dict
add :Sockets:NetworkListener:SockServiceName string syslog
add :Sockets:NetworkListener:SockType string dgram
save
quit
А затем перезапустите демон,
sudo launchctl unload com.apple.syslogd.plist
sudo launchctl load com.apple.syslogd.plist
Вы можете использовать lsof, чтобы проверить, что syslogd теперь прослушивает стандартный порт syslog, 514,
$ sudo lsof -i:514
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
launchd 1 root 44u IPv6 0x0e459370 0t0 UDP *:syslog
launchd 1 root 56u IPv4 0x0f7a9ef0 0t0 UDP *:syslog
syslogd 24319 root 5u IPv6 0x0e459370 0t0 UDP *:syslog
syslogd 24319 root 6u IPv4 0x0f7a9ef0 0t0 UDP *:syslog