Jak umożliwić syslogd akceptowanie połączeń przychodzących w systemie Snow Leopard ze zdalnych rejestratorów?

11

Jak zmusić syslogd do akceptowania połączeń przychodzących ze zdalnych hostów na Snow Leopard?

Chciałbym scentralizować rejestrowanie w taki sposób, aby różne urządzenia i systemy wysyłały dzienniki do syslogd systemu Snow Leopard, który zwykle znajduje się na UDP 514. Jednak nie jestem w stanie sprawić, by zostały pomyślnie zaakceptowane przez dobry ole syslogd. Rzuciłem tcpdump na pole Snow Leopard, aby sprawdzić, czy pakiety są wysyłane do portu 514 - są. Sprawdziłem, że syslogd nasłuchuje na 514 - nie jest.

Googling powiedział mi, że w starszych wersjach OSX (czy nie podoba ci się to, jak rzeczy zmieniają się tak szybko w OSX), wystarczyło dodać flagę do demona syslogd, aby umożliwić zdalne; zrobiono to w com.apple.syslogd.plist. Jednak demon syslogd nie ma flag (przynajmniej na swojej stronie podręcznika), które sugerują jakiekolwiek zdalne sterowanie.

Jakie jest na to rozwiązanie?

Wtórne, mniej ważne, ale istotne pytanie: co to jest „newsyslog”? Widzę plik plist, ale nie jest uruchomiony (najwyraźniej).

Dzięki

Emmel
źródło
Czy ktoś zna odpowiedź? Mam skłonność do zadawania pytań bez odpowiedzi.
Emmel,

Odpowiedzi:

5

Nie próbowałem tego, ale szukałem na liście syslogd (/System/Library/LaunchDaemons/com.apple.syslogd.plist) i widzę, że ta część skomentowała:

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

Usuń komentarze, a następnie ponownie załaduj usługę:

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

i prawdopodobnie jesteś w drodze.


Odpowiedź na twoje drugie pytanie - newsyslogjest podobny do logrotate często spotykanego w systemach Linux. man newsyslog(lub online ) powie ci więcej.

Zainstalowany w systemie Snow Leopard jest uruchamiany co 30 minut launchdna ten bit w swojej liście:

<key>StartCalendarInterval</key>
<dict>
    <key>Minute</key>
    <integer>30</integer>
</dict>
Doug Harris
źródło
Niesamowite! Właśnie takiej odpowiedzi szukałem. Właśnie to przetestowałem i tak, potwierdziłem, że działa. Dzięki, Doug.
Emmel
11

Pamiętaj, że jeśli próbujesz to zrobić na komputerze z systemem Snow Leopard Server (przynajmniej w wersji 10.6.4), przekonasz się, że w /System/Library/LaunchDaemons/com.apple.syslogd nie ma komentarza. .plist (i że plik plist jest przechowywany w formacie binarnym).

Jednak skopiowanie i wklejenie klucza cytowanego powyżej przez Douga załatwi sprawę, chociaż najpierw trzeba będzie przekonwertować format pliku na tekst:

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

... i powinieneś prawdopodobnie przekonwertować go później (konwersje mają miejsce in situ):

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

... następnie ponownie załaduj uruchomionego demona zgodnie z instrukcjami Douga.

Następnie pełny plik Plist powinien wyglądać następująco:

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

Jeszcze jedna uwaga: jeśli, podobnie jak ja, chcesz wysłać wyniki syslogu stacji bazowych AirPort (i / lub Time Capsules) na swój serwer, używają one funkcji 0, której nie można zmienić . Oznacza to, że zostaną automatycznie zalogowani do /var/log/appfirewall.log z powodu następującego domyślnego wpisu w /etc/syslog.conf:

local0.*                                               /var/log/appfirewall.log

W wersji serwerowej systemu operacyjnego możesz bezpiecznie zmienić nazwę pliku na np. AirPort.log po wydaniu następującego polecenia:

sudo touch /var/log/AirPort.log

... ponieważ Zapora aplikacji Apple (socketfilterfw) jest domyślnie wyłączona (i powinna pozostać wyłączona na serwerze - ipfw jest wszystkim, czego naprawdę chcesz). Nie jestem pewien, czy można zmienić konfigurację socketfilterfw, aby użyć innej funkcji syslog.

Joe Carroll
źródło
1
Właśnie tego szukałem, idealna odpowiedź!
deceze
Testowany na 10.6.7 i działa dobrze. Dzięki!
Alexandre L Telles,
Właśnie to starałem się zrobić! Mianowicie, poproś moje 4 AEBS o zalogowanie się do mojego Xserve z uruchomionym SLS. Bardzo mile widziane!
Dennis Wurster,
Zwykle dodaję argument -udp_in arg, dzięki czemu mogę stwierdzić z polecenia ps, czy mam go uruchomionego jako zdalny obiekt nasłuchujący. <key>ProgramArguments</key> <array> <string>/usr/sbin/syslogd</string> <string>-udp_in</string> </array>
tgunr
Te instrukcje działają dobrze na Mountain Lion (nie na serwerze)
Nelson
6

Inną metodą włączenia dostępu sieciowego do syslogd w systemie Snow Leopard jest użycie programu wiersza poleceń 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

Następnie uruchom ponownie demona,

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

Możesz użyć lsof, aby sprawdzić, czy syslogd nasłuchuje na standardowym porcie 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
pomoc
źródło
Wydaje się, że to rozwiązanie działa również w Yosemite. Dziękuję Ci.
Steve Powell,