Wie kann Syslogd eingehende Verbindungen auf Snow Leopard von Remote-Loggern akzeptieren?


11

Wie kann ich syslogd dazu bringen, eingehende Verbindungen von Remote-Hosts auf Snow Leopard zu akzeptieren?

Ich möchte die Protokollierung so zentralisieren, dass verschiedene Geräte und Systeme Protokolle an Snow Leopards syslogd senden, das normalerweise unter UDP 514 hängt. Ich kann sie jedoch nicht dazu bringen, dass sie von good ole syslogd erfolgreich akzeptiert werden. Ich habe die Snow Leopard-Box überprüft, um zu überprüfen, ob Pakete an Port 514 gesendet werden - das sind sie. Ich habe überprüft, ob syslogd 514 abhört - das ist es nicht.

Das Googeln hat mir gesagt, dass man in älteren OSX-Versionen (magst du nicht, wie sich die Dinge unter OSX so schnell ändern) dem syslogd-Daemon nur ein Flag hinzufügen musste, um Remote zuzulassen? man tat dies in com.apple.syslogd.plist. Der syslogd-Daemon verfügt jedoch über keine Flags (zumindest in seiner Manpage), die auf eine Remote-Verbindung hinweisen.

Was ist die Lösung dafür?

Sekundäre, weniger wichtige, aber relevante Frage: Was ist "Newsyslog"? Ich sehe eine Plist-Datei, aber sie läuft (anscheinend) nicht.

Vielen Dank


Kennt jemand die Antwort? Ich habe eine Vorliebe dafür, unbeantwortete Fragen zu stellen.
Emmel

Antworten:


5

Ich habe dies nicht versucht, aber ich habe in der Liste nach syslogd gesucht (/System/Library/LaunchDaemons/com.apple.syslogd.plist) und festgestellt, dass dieser Teil auskommentiert ist:

<!--
        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>
-->

Entfernen Sie die Kommentare und laden Sie den Dienst neu:

$ sudo launchctl unload /System/Library/LaunchDaemons/com.apple.syslogd.plist
$ sudo launchctl load /System/Library/LaunchDaemons/com.apple.syslogd.plist

und du bist wahrscheinlich auf dem Weg.


Antwort auf Ihre sekundäre Frage - newsyslogähnelt der Protokollierung, die häufig auf Linux-Systemen zu finden ist. man newsyslog(oder online ) wird Ihnen mehr erzählen.

Wie bei Snow Leopard installiert, wird es alle 30 Minuten von launchddiesem Bit in seiner Liste ausgeführt:

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

Genial! Das ist genau die Antwort, nach der ich gesucht habe. Ich habe es gerade getestet und ja, bestätigt, dass es funktioniert. Danke, Doug.
Emmel

11

Wenn Sie dies auf einem Snow Leopard Server- Computer versuchen (zumindest mit 10.6.4), finden Sie in /System/Library/LaunchDaemons/com.apple.syslogd keinen auskommentierten Abschnitt .plist (und dass die plist-Datei in einem Binärformat gespeichert ist).

Das Kopieren und Einfügen des Schlüssels, den Doug oben zitiert, reicht jedoch aus, obwohl Sie zuerst das Format der Datei folgendermaßen in Text konvertieren müssen:

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

... und Sie sollten es wahrscheinlich später wieder konvertieren (Konvertierungen erfolgen in situ):

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

... dann laden Sie den Launchd-Daemon gemäß den Anweisungen von Doug neu.

Danach sollte die vollständige Plist-Datei wie folgt lauten:

    <?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>

Noch ein Hinweis: Wenn Sie wie ich die Syslog-Ausgaben Ihrer AirPort-Basisstationen (und / oder Time Capsules) an Ihren Server senden möchten, verwenden sie die Funktion 0, die nicht geändert werden kann . Dies bedeutet, dass sie aufgrund des folgenden Standardeintrags in /etc/syslog.conf automatisch in /var/log/appfirewall.log protokolliert werden:

local0.*                                               /var/log/appfirewall.log

In der Serverversion des Betriebssystems können Sie den Dateinamen sicher in z. B. AirPort.log ändern, sobald Sie den folgenden Befehl ausgegeben haben:

sudo touch /var/log/AirPort.log

... da Apples Anwendungsfirewall (socketfilterfw) standardmäßig deaktiviert ist (und auf einem Server deaktiviert bleiben sollte - ipfw ist alles, was Sie wirklich wollen). Ich bin nicht sicher, ob es möglich ist, socketfilterfw neu zu konfigurieren, um eine andere Syslog-Funktion zu verwenden.


1
Genau das, wonach ich gesucht habe, perfekte Antwort!
Täuschung

Getestet am 10.6.7 und funktioniert gut. Vielen Dank!
Alexandre L Telles

Genau das habe ich versucht! Lassen Sie meine 4 AEBSs sich bei meinem Xserve mit SLS anmelden. Sehr geschätzt!
Dennis Wurster

Normalerweise füge ich das Argument -udp_in hinzu, damit ich anhand eines ps-Befehls erkennen kann, ob es als Remote-Listener ausgeführt wird. <key>ProgramArguments</key> <array> <string>/usr/sbin/syslogd</string> <string>-udp_in</string> </array>
tgunr

Diese Anweisungen funktionieren gut auf Mountain Lion (nicht Server)
Nelson

6

Eine andere Methode, um den Netzwerkzugriff auf syslogd auf Snow Leopard zu ermöglichen, ist die Verwendung des Befehlszeilenprogramms 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

Und dann starten Sie den Daemon neu,

sudo launchctl unload com.apple.syslogd.plist 
sudo launchctl load com.apple.syslogd.plist 

Mit lsof können Sie überprüfen, ob syslogd jetzt den Standard-Syslog-Port 514 überwacht.

$ 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

Diese Lösung scheint auch in Yosemite zu funktionieren. Vielen Dank.
Steve Powell
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.