¿Cómo se habilita syslogd para aceptar conexiones entrantes en Snow Leopard desde registradores remotos?

11

¿Cómo obtengo syslogd para aceptar conexiones entrantes de hosts remotos en Snow Leopard?

Me gustaría centralizar el registro de modo que varios dispositivos y sistemas envíen registros al syslogd de Snow Leopard, que normalmente se cuelga en UDP 514. Sin embargo, no puedo lograr que un buen syslogd los acepte con éxito. Me conecté a la caja de Snow Leopard para verificar que los paquetes se envían al puerto 514, sí. Verifiqué que syslogd está escuchando en 514, no lo está.

Buscar en Google me dijo que, en versiones anteriores de OSX (no te gusta la forma en que las cosas cambian tan rápido en OSX), uno solo tenía que agregar una bandera al demonio syslogd para permitir el control remoto; uno hizo esto en com.apple.syslogd.plist. Sin embargo, el demonio syslogd no tiene banderas (al menos en su página de manual) que sugieran algo remoto.

¿Cuál es la solución a esto?

Pregunta secundaria, menos importante pero relevante: ¿Qué es 'newsyslog'? Veo un archivo plist pero no se está ejecutando (aparentemente).

Gracias

Emmel
fuente
Alguien sabe la respuesta? Tengo una inclinación por hacer preguntas sin respuesta.
Emmel

Respuestas:

5

No he intentado esto, pero busqué en el plist syslogd (/System/Library/LaunchDaemons/com.apple.syslogd.plist) y vi esta parte comentada:

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

Elimine los comentarios y luego vuelva a cargar el servicio:

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

y es probable que estés en camino.


Responda a su pregunta secundaria: newsysloges similar a logrotate que a menudo se encuentra en los sistemas Linux. man newsyslog(o en línea ) le informará más.

Tal como está instalado con Snow Leopard, se ejecuta cada 30 minutos por launchdcada bit en su plist:

<key>StartCalendarInterval</key>
<dict>
    <key>Minute</key>
    <integer>30</integer>
</dict>
Doug Harris
fuente
¡Increíble! Esa es exactamente la respuesta que estaba buscando. Lo acabo de probar y sí, confirmó que funciona. Gracias Doug.
Emmel
11

Tenga en cuenta que si está intentando hacer esto en una máquina del servidor Snow Leopard (al menos con 10.6.4), encontrará que no hay una sección de comentarios en /System/Library/LaunchDaemons/com.apple.syslogd .plist (y que el archivo plist se almacena en formato binario).

Sin embargo, copiar y pegar la clave que Doug cita arriba será suficiente, aunque primero deberá convertir el formato del archivo a texto de esta manera:

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

... y probablemente debería volver a convertirlo después (las conversiones ocurren in situ):

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

... luego vuelve a cargar el demonio launchd según las instrucciones de Doug.

Luego, el archivo plist completo debería leer lo siguiente:

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

Una nota más: si, como yo, desea enviar las salidas de syslog de sus estaciones base AirPort (y / o Time Capsules) a su servidor, usarán la facilidad 0, que no se puede cambiar . Esto significa que se registrarán automáticamente en /var/log/appfirewall.log debido a la siguiente entrada predeterminada en /etc/syslog.conf:

local0.*                                               /var/log/appfirewall.log

En la versión del servidor del sistema operativo, puede cambiar de forma segura el nombre del archivo a, por ejemplo, AirPort.log una vez que haya emitido el siguiente comando:

sudo touch /var/log/AirPort.log

... ya que el firewall de aplicaciones de Apple (socketfilterfw) está desactivado de manera predeterminada (y debe permanecer desactivado en un servidor; ipfw es todo lo que realmente desea). No estoy seguro de si es posible reconfigurar socketfilterfw para usar una instalación de syslog diferente.

Joe Carroll
fuente
1
Justo lo que estaba buscando, respuesta perfecta!
fallecer el
Probado en 10.6.7 y funciona bien. ¡Gracias!
Alexandre L Telles
¡Esto era exactamente lo que estaba tratando de hacer! Es decir, obtener mis 4 AEBS para iniciar sesión en mi Xserve con SLS. ¡Muy apreciado!
Dennis Wurster
Por lo general, agrego el argumento -udp_in para que pueda saber por un comando ps si lo tengo ejecutándose como un oyente remoto. <key>ProgramArguments</key> <array> <string>/usr/sbin/syslogd</string> <string>-udp_in</string> </array>
tgunr
Estas instrucciones funcionan bien en Mountain Lion (no en el servidor)
Nelson
6

Otro método para habilitar el acceso de red a syslogd en Snow Leopard es usar el programa de línea de comandos 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

Y luego reinicia el demonio,

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

Puede usar lsof para verificar que syslogd ahora está escuchando en el puerto estándar de 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
ayuda
fuente
Esta solución parece funcionar también en Yosemite. Gracias.
Steve Powell