Comment activez-vous syslogd pour accepter les connexions entrantes sur Snow Leopard des enregistreurs distants?

11

Comment faire en sorte que syslogd accepte les connexions entrantes des hôtes distants sur Snow Leopard?

Je voudrais centraliser la journalisation de telle sorte que divers appareils et systèmes envoient des journaux au syslogd de Snow Leopard, qui se bloque normalement sur UDP 514. Cependant, je ne parviens pas à les faire accepter avec succès par un bon vieux syslogd. J'ai téléchargé sur la boîte Snow Leopard pour vérifier que les paquets sont envoyés au port 514 - ils le sont. J'ai vérifié que syslogd écoute sur 514 - ce n'est pas le cas.

Googler autour de moi m'a dit que, sur les anciennes versions d'OSX (vous n'aimez pas la façon dont les choses changent si rapidement sur OSX), il suffisait d'ajouter un indicateur au démon syslogd pour autoriser la télécommande; on l'a fait dans com.apple.syslogd.plist. Cependant, le démon syslogd n'a aucun indicateur (au moins dans sa page de manuel) qui suggère n'importe quoi de distant.

Quelle est la solution à cela?

Question secondaire, moins importante mais pertinente: qu'est-ce que 'newsyslog'? Je vois un fichier plist mais il ne fonctionne pas (apparemment).

Merci

Emmel
la source
Quelqu'un connaît la réponse? J'ai un penchant pour poser des questions sans réponse.
Emmel

Réponses:

5

Je n'ai pas essayé cela, mais j'ai regardé dans le plist pour syslogd (/System/Library/LaunchDaemons/com.apple.syslogd.plist) et voir cette partie commentée:

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

Supprimez les commentaires, puis rechargez le service:

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

et vous êtes probablement sur votre chemin.


Réponse à votre question secondaire - newsyslogest similaire à logrotate souvent trouvé sur les systèmes Linux. man newsyslog(ou en ligne ) vous en dira plus.

Comme installé avec Snow Leopard, il est exécuté toutes les 30 minutes launchdpar ce bit dans sa liste:

<key>StartCalendarInterval</key>
<dict>
    <key>Minute</key>
    <integer>30</integer>
</dict>
Doug Harris
la source
Impressionnant! C'est exactement la réponse que je cherchais. Je viens de le tester et oui, j'ai confirmé qu'il fonctionne. Merci, Doug.
Emmel
11

Notez que si vous essayez de le faire sur une machine Snow Leopard Server (au moins avec 10.6.4), vous constaterez qu'il n'y a pas de section commentée dans /System/Library/LaunchDaemons/com.apple.syslogd .plist (et que le fichier plist est stocké dans un format binaire).

Cependant, copier et coller la clé citée par Doug ci-dessus fera l'affaire, bien que vous deviez d'abord convertir le format du fichier en texte:

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

... et vous devriez probablement le reconvertir par la suite (les conversions se produisent in situ):

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

... puis rechargez le démon launchd selon les instructions de Doug.

Ensuite, le fichier plist complet devrait se lire comme suit:

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

Une dernière remarque: si, comme moi, vous souhaitez envoyer les sorties syslog de vos stations de base AirPort (et / ou Time Capsules) à votre serveur, elles utilisent la fonction 0, qui ne peut pas être modifiée . Cela signifie qu'ils seront automatiquement enregistrés dans /var/log/appfirewall.log en raison de l'entrée par défaut suivante dans /etc/syslog.conf:

local0.*                                               /var/log/appfirewall.log

Sur la version serveur du système d'exploitation, vous pouvez changer le nom de fichier en toute sécurité par exemple AirPort.log une fois que vous avez émis la commande suivante:

sudo touch /var/log/AirPort.log

... puisque le pare-feu d'application d'Apple (socketfilterfw) est désactivé par défaut (et devrait rester désactivé sur un serveur - ipfw est tout ce que vous voulez vraiment). Je ne sais pas s'il est possible de reconfigurer socketfilterfw pour utiliser une fonction syslog différente.

Joe Carroll
la source
1
Exactement ce que je cherchais, réponse parfaite!
décompose
Testé le 10.6.7 et fonctionne très bien. Merci!
Alexandre L Telles
C'était exactement ce que j'essayais de faire! À savoir, obtenir mes 4 AEBS pour me connecter à mon Xserve exécutant SLS. Très appréciée!
Dennis Wurster
J'ajoute généralement l'argument -udp_in afin que je puisse dire à partir d'une commande ps si je l'ai exécuté en tant qu'écouteur distant. <key>ProgramArguments</key> <array> <string>/usr/sbin/syslogd</string> <string>-udp_in</string> </array>
tgunr
Ces instructions fonctionnent bien sur Mountain Lion (pas sur le serveur)
Nelson
6

Une autre méthode pour activer l'accès réseau à syslogd sur Snow Leopard consiste à utiliser le programme de ligne de commande 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

Et puis redémarrez le démon,

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

Vous pouvez utiliser lsof pour vérifier que syslogd écoute maintenant sur le port syslog standard, 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
aide
la source
Cette solution semble également fonctionner à Yosemite. Je vous remercie.
Steve Powell