Como você habilita o syslogd para aceitar conexões de entrada no Snow Leopard de registradores remotos?

11

Como faço para o syslogd aceitar conexões de entrada de hosts remotos no Snow Leopard?

Eu gostaria de centralizar o log, de modo que vários dispositivos e sistemas enviem logs para o syslogd do Snow Leopard, que normalmente fica no UDP 514. No entanto, não consigo fazer com que eles sejam aceitos com êxito pelo bom e velho syslogd. Eu despejei na caixa do Snow Leopard para verificar se os pacotes estão sendo jorrados para a porta 514 - eles estão. Eu verifiquei que o syslogd está ouvindo no 514 - não está.

Pesquisando por aí me disseram que, nas versões mais antigas do OSX (você não ama a maneira como as coisas mudam tão rapidamente no OSX), bastava adicionar um sinalizador ao daemon syslogd para permitir o controle remoto; um fez isso em com.apple.syslogd.plist. No entanto, o daemon syslogd não possui sinalizadores (pelo menos em sua página de manual) que sugerem algo remoto.

Qual a solução para isso?

Pergunta secundária, menos importante, mas relevante: o que é 'newsyslog'? Eu vejo um arquivo plist, mas ele não está em execução (aparentemente).

obrigado

Emmel
fonte
Alguém sabe a resposta? Eu tenho uma propensão a fazer perguntas sem resposta.
Emmel

Respostas:

5

Eu não tentei isso, mas procurei no syslogd (/System/Library/LaunchDaemons/com.apple.syslogd.plist) e 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>
-->

Remova os comentários e recarregue o serviço:

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

e você provavelmente está a caminho.


Resposta à sua pergunta secundária - newsyslogé semelhante ao logrotate geralmente encontrado em sistemas Linux. man newsyslog(ou online ) informará mais.

Como instalado no Snow Leopard, ele é executado a cada 30 minutos launchdpor este bit em sua essência:

<key>StartCalendarInterval</key>
<dict>
    <key>Minute</key>
    <integer>30</integer>
</dict>
Doug Harris
fonte
Impressionante! Essa é exatamente a resposta que eu estava procurando. Acabei de o testar e sim, confirmei que funciona. Obrigado Doug.
Emmel
11

Observe que se você estiver tentando fazer isso em uma máquina do Snow Leopard Server (pelo menos com a 10.6.4), verá que não há uma seção comentada em /System/Library/LaunchDaemons/com.apple.syslogd .plist (e que o arquivo plist é armazenado em um formato binário).

No entanto, copiar e colar a chave que Doug cita acima fará o truque, embora primeiro você precise converter o formato do arquivo em texto da seguinte forma:

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

... e você provavelmente deve convertê-lo novamente depois (as conversões ocorrem in situ):

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

... recarregue o daemon launchd de acordo com as instruções de Doug.

Posteriormente, o arquivo plist completo deve ler da seguinte maneira:

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

Mais uma observação: se, como eu, você deseja enviar as saídas de syslog das estações base AirPort (e / ou Time Capsules) para o servidor, elas usam o recurso 0, que não pode ser alterado . Isso significa que eles serão registrados automaticamente no /var/log/appfirewall.log devido à seguinte entrada padrão no /etc/syslog.conf:

local0.*                                               /var/log/appfirewall.log

Na versão Server do sistema operacional, você pode alterar com segurança o nome do arquivo para, por exemplo, AirPort.log, depois de emitir o seguinte comando:

sudo touch /var/log/AirPort.log

... como o Application Firewall da Apple (socketfilterfw) está desativado por padrão (e deve permanecer desativado em um servidor - ipfw é tudo o que você realmente deseja). Não tenho certeza se é possível reconfigurar o socketfilterfw para usar um recurso syslog diferente.

Joe Carroll
fonte
1
Apenas o que eu estava procurando, resposta perfeita!
Deceze 25/11
Testado em 10.6.7 e funciona bem. Obrigado!
Alexandre L Telles
Era exatamente isso que eu estava tentando fazer! Ou seja, obtenha meus 4 AEBSs para fazer logon no meu Xserve executando o SLS. Muito apreciado!
Dennis Wurster
Normalmente, adiciono o -udp_in arg para poder dizer a partir de um comando ps se o tenho em execução como ouvinte remoto. <key>ProgramArguments</key> <array> <string>/usr/sbin/syslogd</string> <string>-udp_in</string> </array>
tgunr
Estes fina instruções de trabalho em Mountain Lion (não servidor)
Nelson
6

Outro método para ativar o acesso de rede ao syslogd no Snow Leopard é usar o programa de linha de comando 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

E, em seguida, reinicie o daemon,

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

Você pode usar lsof para verificar se o syslogd agora está escutando na porta syslog padrão, 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
ajuda
fonte
Essa solução parece funcionar em Yosemite também. Obrigado.
21415 Steve