คุณเปิดใช้งาน syslogd เพื่อยอมรับการเชื่อมต่อขาเข้าบน Snow Leopard จากตัวบันทึกระยะไกลได้อย่างไร


11

ฉันจะรับ syslogd เพื่อยอมรับการเชื่อมต่อขาเข้าจากโฮสต์ระยะไกลบน Snow Leopard ได้อย่างไร

ฉันต้องการรวมศูนย์การบันทึกเช่นที่อุปกรณ์และระบบต่าง ๆ ส่งบันทึกไปยัง syslogd ของ Snow Leopard ซึ่งโดยปกติแล้วจะแขวนใน UDP 514 อย่างไรก็ตามฉันไม่สามารถทำให้พวกเขาได้รับการยอมรับจาก ole syslogd ที่ดี ฉัน tcpdumped บนกล่อง Snow Leopard เพื่อตรวจสอบว่าแพ็คเก็ตกำลังพ่นออกไปที่พอร์ต 514 - พวกเขาเป็น ฉันตรวจสอบว่า syslogd กำลังฟัง 514 - ไม่ใช่

Googling around บอกฉันว่าใน OSX เวอร์ชั่นเก่า (คุณไม่ชอบวิธีที่สิ่งต่าง ๆ เปลี่ยนแปลงอย่างรวดเร็วบน OSX) เพียงแค่เพิ่มธงลงใน syslogd daemon เพื่อให้รีโมต หนึ่งทำสิ่งนี้ใน com.apple.syslogd.plist อย่างไรก็ตาม syslogd daemon ไม่มีแฟล็ก (อย่างน้อยในเพจ man) ที่แนะนำสิ่งใด ๆ รีโมต

อะไรคือทางออกของสิ่งนี้?

รองนำเข้าน้อยลง แต่คำถามที่เกี่ยวข้อง: 'newsyslog' คืออะไร ฉันเห็นไฟล์ plist แต่ไม่ได้ทำงาน (ชัด)

ขอบคุณ


ใครรู้คำตอบ? ฉันชอบที่จะถามคำถามที่ยังไม่ได้ตอบ
Emmel

คำตอบ:


5

ฉันไม่ได้ลองสิ่งนี้ แต่ฉันค้นหา plist สำหรับ syslogd (/System/Library/LaunchDaemons/com.apple.syslogd.plist) และดูส่วนนี้แสดงความคิดเห็น:

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

ลบความคิดเห็นแล้วโหลดบริการซ้ำ:

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

และคุณน่าจะเป็นในแบบของคุณ


ตอบคำถามที่สองของคุณ - newsyslogคล้ายกับlogrotate ที่มักพบในระบบ linux man newsyslog(หรือออนไลน์ ) จะบอกคุณมากกว่านี้

ตามที่ติดตั้งด้วย Snow Leopard จะมีการเรียกใช้ทุก ๆ 30 นาทีlaunchdต่อบิตในส่วนนี้:

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

! น่ากลัว นั่นคือคำตอบที่ฉันต้องการ ฉันเพิ่งทดสอบและใช่ยืนยันว่าได้ผล ขอบคุณดั๊ก
Emmel

11

โปรดทราบว่าหากคุณพยายามทำสิ่งนี้บนเครื่องเซิร์ฟเวอร์ Snow Leopard (อย่างน้อยกับ 10.6.4) คุณจะพบว่าไม่มีส่วนที่ถูกใส่ความคิดเห็นใน /System/Library/LaunchDaemons/com.apple.syslogd .plist (และไฟล์ plist นั้นเก็บอยู่ในรูปแบบไบนารี)

อย่างไรก็ตามการคัดลอกและวางคีย์ที่คำพูดของดั๊กข้างต้นจะทำเคล็ดลับแม้ว่าก่อนอื่นคุณจะต้องแปลงรูปแบบของไฟล์เป็นข้อความดังนี้:

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

... และคุณน่าจะแปลงกลับมาภายหลัง (เกิดการแปลงในแหล่งกำเนิด):

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

... จากนั้นให้โหลด launchd daemon ตามคำแนะนำของ Doug

หลังจากนั้นไฟล์ plist แบบเต็มควรอ่านดังนี้:

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

อีกหนึ่งหมายเหตุ: ถ้าอย่างฉันคุณต้องการส่ง syslog ของสถานีฐาน AirPort '(และ / หรือ Time Capsules') ไปยังเซิร์ฟเวอร์ของคุณพวกเขาใช้สิ่งอำนวยความสะดวก 0 ซึ่งไม่สามารถเปลี่ยนแปลงได้ ซึ่งหมายความว่าพวกเขาจะถูกบันทึกโดยอัตโนมัติไปยัง /var/log/appfirewall.log เนื่องจากรายการเริ่มต้นต่อไปนี้ใน /etc/syslog.conf:

local0.*                                               /var/log/appfirewall.log

ในเวอร์ชั่นเซิร์ฟเวอร์ของระบบปฏิบัติการคุณสามารถเปลี่ยนชื่อไฟล์ได้อย่างปลอดภัยเช่น AirPort.log เมื่อคุณออกคำสั่งต่อไปนี้:

sudo touch /var/log/AirPort.log

... เนื่องจาก Application Firewall ของ Apple (socketfilterfw) ถูกปิดใช้งานตามค่าเริ่มต้น (และควรคงอยู่ที่เซิร์ฟเวอร์ - ipfw เป็นสิ่งที่คุณต้องการจริงๆ) ฉันไม่แน่ใจว่าเป็นไปได้หรือไม่ที่จะกำหนดค่า socketfilterfw ใหม่เพื่อใช้สิ่งอำนวยความสะดวก syslog อื่น


1
คำตอบที่สมบูรณ์แบบ!
หลอกลวง

ทดสอบกับ 10.6.7 และใช้งานได้ดี ขอบคุณ!
Alexandre L บอก

นี่คือสิ่งที่ฉันพยายามทำ! ได้รับ 4 AEBS ของฉันเพื่อเข้าสู่ Xserve ที่ทำงาน SLS ชื่นชมมาก!
Dennis Wurster

ฉันมักจะเพิ่ม -udp_in arg เพื่อให้ฉันสามารถบอกได้จากคำสั่ง ps หากฉันให้มันทำงานเป็นผู้ฟังระยะไกล <key>ProgramArguments</key> <array> <string>/usr/sbin/syslogd</string> <string>-udp_in</string> </array>
tgunr

คำแนะนำเหล่านี้ทำงานได้ดีบน Mountain Lion (ไม่ใช่เซิร์ฟเวอร์)
Nelson

6

อีกวิธีหนึ่งในการเปิดใช้งานการเข้าถึงเครือข่ายไปยัง syslogd บน Snow Leopard คือการใช้โปรแกรมบรรทัดคำสั่ง 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

จากนั้นรีสตาร์ทภูต

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

คุณสามารถใช้ lsof เพื่อตรวจสอบว่า syslogd กำลังฟังอยู่บนพอร์ต 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

วิธีนี้ดูเหมือนว่าจะทำงานใน Yosemite ด้วย ขอบคุณ.
Steve Powell
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.