Як увімкнути syslogd приймати вхідні з'єднання на Snow Leopard від віддалених реєстраторів?


11

Як змусити syslogd приймати вхідні з'єднання від віддалених хостів на Snow Leopard?

Я хотів би централізувати ведення журналу таким чином, щоб різні пристрої та системи надсилали журнали до системного журналу Snow Leopard, який, як правило, зависає на UDP 514. Однак я не можу змусити їх успішно прийняти хороший ole syslogd. Я tcpdumped на коробці Snow Leopard, щоб переконатися, що пакети подаються на порт 514 - вони є. Я перевірив, що syslogd слухає 514 - це не так.

Гуглінг говорив мені, що на старих версіях OSX (чи не любиш ти так швидко змінюється на OSX), потрібно було просто додати прапор до демона syslogd, щоб дозволити віддалений; один зробив це в com.apple.syslogd.plist. Однак у демона syslogd немає прапорів (принаймні, на його довідковій сторінці), які б пропонували будь-яке віддалене що-небудь.

Яке рішення цього?

Вторинне, менш імпортне, але відповідне питання: Що таке "newsyslog"? Я бачу файл plist, але він не працює (мабуть).

Дякую


Хтось знає відповідь? У мене є схильність ставити запитання без відповіді.
Еммель

Відповіді:


5

Я цього не пробував, але я заглянув у список для 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схожий на логротат, який часто зустрічається в системах Linux. man newsyslog(або в Інтернеті ) розповість вам більше.

Як встановлено у Snow Leopard, він запускається кожні 30 хвилин launchdза цей шматочок у своєму списку:

<key>StartCalendarInterval</key>
<dict>
    <key>Minute</key>
    <integer>30</integer>
</dict>

Дивовижно! Саме таку відповідь я шукав. Я просто перевірив це, і так, підтвердив, що він працює. Спасибі, Дуг.
Еммель

11

Зауважте, що якщо ви намагаєтеся зробити це на машині сервера Snow Leopard (принаймні з 10.6.4), ви побачите, що в /System/Library/LaunchDaemons/com.apple.syslogd немає розділу про коментовані коментарі .plist (і що файл plist зберігається у двійковому форматі).

Однак копіювання та вставлення ключа, який Дуг цитує вище, зробить трюк, хоча спочатку потрібно буде перетворити формат файлу в текст таким чином:

sudo plutil -convert xml1 /System/Library/LaunchDaemons/com.apple.syslogd.plist

... і ви, ймовірно, повинні потім перетворити його назад (перетворення відбуваються in situ):

sudo plutil -convert binary1 /System/Library/LaunchDaemons/com.apple.syslogd.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 (та / або капсули часу) на ваш сервер, вони використовують об'єкт 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 для використання іншого засобу syslog.


1
Тільки те, що я шукав, ідеальна відповідь!
декад

Тестовано 10.6.7 і працює чудово. Дякую!
Олександр L Теллес

Це саме те, що я намагався зробити! А саме, змусьте мої 4 AEBS ввійти до моєї Xserve, що працює SLS. Цінується!
Денніс Вустер

Зазвичай я додаю аргумент -udp_in, щоб я міг сказати з команди ps, якщо він працює як віддалений слухач. <key>ProgramArguments</key> <array> <string>/usr/sbin/syslogd</string> <string>-udp_in</string> </array>
tgunr

Ці інструкції чудово працюють на Mountain Lion (не на сервері)
Нельсон

6

Іншим способом включення мережевого доступу до 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

Це рішення, здається, працює і в Йосеміті. Дякую.
Стів Пауелл
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.