NRPE ไม่สามารถอ่านเอาต์พุต แต่ทำไม?


27

ฉันมีปัญหากับ NRPE ทุกสิ่งที่ฉันพบในเน็ตดูเหมือนจะชี้ให้ฉันในสิ่งที่ฉันได้ลองไปแล้ว

# /usr/local/nagios/plugins/check_nrpe -H nrpeclient

จะช่วยให้

NRPE v2.12

อย่างที่คาดไว้.

การรันคำสั่งด้วยมือ (ตามที่กำหนดใน nrpe.cfg บน "nrpeclient" ให้การตอบสนองที่คาดหวัง

nrpe.cfg:

command[check_openmanage]=/usr/lib/nagios/plugins/additional/check_openmanage -s -e   -b ctrl_driver=0 bat_charge

"Expected response"

แต่ถ้าฉันพยายามเรียกใช้คำสั่งจากเซิร์ฟเวอร์ Nagios ฉันจะได้รับสิ่งต่อไปนี้:

# /usr/local/nagios/plugins/check_nrpe -H comxps -c check_openmanage
NRPE: Unable to read output

ทุกคนสามารถนึกถึงที่อื่นที่ฉันอาจทำผิดกับเรื่องนี้ได้หรือไม่? ฉันทำสิ่งเดียวกันในเซิร์ฟเวอร์อื่น ๆ โดยไม่มีปัญหา ความแตกต่างเพียงอย่างเดียวที่ฉันนึกได้คือกล่องนี้มีพื้นฐานจาก RHEL 5 ในขณะที่กล่องอื่น ๆ จะเป็น RHEL 4

สองบิตข้างต้นที่ฉันได้ทดสอบคือสิ่งที่คนส่วนใหญ่ดูเหมือนจะแนะนำเมื่อผู้คนมีปัญหานี้

ฉันควรพูดถึงว่าฉันได้รับข้อผิดพลาดแปลก ๆ ในบันทึกเมื่อฉันรีสตาร์ทnrpe:

nrpe[14534]: Unable to open config file '/usr/local/nagios/etc/nrpe.cfg' for reading 
nrpe[14534]: Continuing with errors...
nrpe[14535]: Starting up daemon
nrpe[14535]: Warning: Daemon is configured to accept command arguments from clients!
nrpe[14535]: Listening for connections on port 5666 
nrpe[14535]: Allowing connections from: bodbck,combck,nam-bck

แม้ว่าจะเป็นการอ่าน/usr/local/nagios/etc/nrpe.cfgไฟล์นั้นอย่างชัดเจนเพื่อให้ได้สิ่งที่พูดถึงเพิ่มเติม ..



ลองเก็บอันนี้ไว้อีกอันหนึ่งปิดอีกครั้ง
Bart De Vos

นอกจากนี้ตรวจสอบให้แน่ใจว่า STDOUT ถูกลบทิ้งจริง

คำตอบ:


35

คุณมีปัญหาสิทธิ์

เปลี่ยนคำสั่งเป็น:

command[check_openmanage]=sudo /usr/lib/nagios/plugins/additional/check_openmanage -s -e -b ctrl_driver=0 bat_charge

(เพิ่ม sudo)

จากนั้นเพิ่มผู้ใช้ nagios ไปยัง sudoers:

nagios ALL=(ALL) NOPASSWD:/usr/lib/nagios/plugins/additional/check_openmanage

หรือคุณสามารถเปลี่ยนไฟล์ ... นั่นยังใช้งานได้

หากคุณใช้ CentOS, Red Hat, Scientific หรือ Fedora ตรวจสอบให้แน่ใจว่าได้ปิดการใช้งานDefaults requirettyในไฟล์ sudoers


1
@Bart De Vos แต่คำตอบที่คุณเพิ่มจะทำให้เกิดช่องโหว่ด้านความปลอดภัย> การเพิ่มบางสิ่งลงในไฟล์ sudoers เปิดให้คุณเสี่ยงต่อความปลอดภัย เช่นถ้าผ่านบัฟเฟอร์ล้นใครบางคนสามารถวางไฟล์ที่มีชื่อเดียวกันในตำแหน่งเดียวกันพวกเขาสามารถดำเนินการได้โดยไม่ต้องรู้รหัสผ่านรูทและควบคุมกล่อง: S ไม่มีวิธีใดที่จะวางลายเซ็น (SHA1) หรือ MD5) ของแอปพลิเคชั่นในไฟล์ sudoers เพื่อป้องกันการโจมตีประเภทนั้น เช่นไฟล์ที่ถูกฉีดจะไม่มีลายเซ็นเหมือนกันดังนั้นจึงไม่สามารถเรียกใช้งานได้ [อ่านความคิดเห็นแรกที่นี่] ( crashatau.blogspot.co
Ahmad Hajjar

1
@ X-Ware: แม้ว่าสิ่งนี้จะเป็นจริง แต่โอกาสที่บัฟเฟอร์ที่มากเกินไปอาจถูกทารุณกรรมได้ที่นี่จะมีขนาดเล็กมาก เพื่อป้องกันไม่ให้เกิดขึ้นคุณควรใช้ apparmor / SELinux นั่นคือเหตุผลที่สิ่งเหล่านี้มีอยู่
Bart De Vos

ฉันเดา distros ที่แตกต่างกันแม้จะมีผู้ใช้ที่แตกต่างกันในกรณีของฉันผู้ใช้ที่จะเพิ่มใน visudo คือ npre ไม่ใช่ nagios ฉันยังคงติดตามโซลูชันของ Bart De Vos แต่คุณสามารถดูว่าผู้ใช้รายใดพยายามเข้าถึงคำสั่ง nrpe โดยดูบันทึกการเข้าถึง / var / log / ปลอดภัย 24 ก.ค. 15:39:09 ชื่อโฮสต์ sudo: nrpe: ผู้ใช้ไม่ได้อยู่ใน sudoers; TTY = ไม่ทราบ; PWD = /; USER = root; คำสั่ง = / usr / lib64 / nagios / ปลั๊กอิน / check_disk -w 20% -c 10% -p / dev / mapper / vg_uxp-lv_root

@ AhmadHajjar คุณจริงจังไหม? คุณคิดว่าบางคนจะแฮ็ก nagios (ระบบที่อายุ 20 ปี) และใช้ผู้ใช้นั้นในการรันไฟล์ที่มีสิทธิ์การใช้งานรูท และคุณคิดว่าฉันไม่ได้ทำให้ไฟล์ปฏิบัติการเป็นรูทเหมือนอ่านอย่างเดียวเพื่อป้องกันไม่ให้มีคนคัดลอกไฟล์ทับ หากคุณกังวลเกี่ยวกับเรื่องนี้แทนที่จะใช้ sudo คุณสามารถตั้งค่า check_openmanage ที่ปฏิบัติการได้เองและให้ทุกคนใช้งานได้!
Evan Langlois

11

คำตอบสั้น ๆ : หากคุณใช้ปลั๊กอิน Bash ตรวจสอบให้แน่ใจว่าคุณมีShebang ที่ระบุว่าควรใช้ล่าม:#!/bin/bash


ฉันกำลังเผชิญปัญหาเดียวกันกับปลั๊กอิน Nagios ที่ฉันเขียนเอง สคริปต์ทำงานตามที่คาดไว้เมื่อเรียกใช้งานในเครื่องแม้จะทำงานในฐานะผู้nagiosใช้โดยใช้ข้อความต่อไปนี้:

$ sudo sudo -s -u nagios
$ /path/to/my/plugin.sh
STATUS: OK

แต่การเปิดใช้งานระยะไกลโดยใช้ NRPE จากเซิร์ฟเวอร์ Nagios3 ไม่สำเร็จ:

$ /usr/lib/nagios/plugins/check_nrpe -H my-nagios-client -c my_plugin
NRPE: Unable to read output

ในที่สุดผมก็แก้ไขกรณีนี้โดยการเพิ่มshebangในสคริปต์ของฉันเท่าที่มันปรากฏว่าการทำงานสคริปต์ผ่าน NRPE sudo sudo -s -u nagiosไม่ใช้ล่ามเช่นเดียวกับเมื่อวิ่งผ่าน


พบปัญหานี้เมื่อใช้ปลั๊กอิน nagios ruby ​​script กับ rbenv แก้ไขคือการสร้างสคริปต์ wrapper ด้วย#!/bin/bash -el eval "$(rbenv init -)" /usr/lib/nagios/plugins/check_something $@
TrinitronX

1
คำตอบที่น่าทึ่ง! sudo -s -u nagios อนุญาตให้ฉันดูว่าทำไม nagios ไม่สามารถส่งคืนเอาต์พุตจากปลั๊กอินเฉพาะ ขอบคุณมาก!
ufk

6

ในกรณีปัญหาของฉันเป็นเพียง - ผู้ใช้nagiosไม่สามารถเรียกใช้สคริปต์ได้ หลังจาก chmod มันเริ่มทำงาน Sudo ไม่จำเป็น มันยิ่งชั่วร้าย :)


1
คำตอบที่แท้จริงคือสิ่งนี้ Nagios ไม่สามารถเรียกใช้งานสคริปต์ได้เนื่องจากสิทธิ์ไม่ถูกต้องสคริปต์ถูกสะกดผิดหรือสคริปต์ไม่อยู่ที่นั่น
droope

5

check_nrpe กำลังได้รับ 'NRPE: ไม่สามารถอ่านเอาต์พุต' แม้จะมีการตรวจสอบการทำงานในเครื่องเนื่องจากปลั๊กอินที่ฉันใช้ไม่ทำงานกับ SELinux ได้ดี ปิดใช้งานและตรวจสอบให้แน่ใจว่าได้ลบบริบทของไฟล์:

$ ls -l check_om_storage
-r-xr-xr--. 1 root nrpe 3808 Feb 27 17:54 check_om_chassis
$ setfattr -x security.selinux check_om_storage
$ ls -l check_om_chassis 
-r-xr-xr-- 1 root nrpe 3808 Feb 27 17:54 check_om_chassis

ในขณะที่การปิดใช้งาน selinux โดยทั่วไปอาจไม่ใช่ความคิดที่ดีสำหรับการทดสอบ แต่ยังคงใช้ได้
Dennis Nolte

4

ตรวจสอบเส้นทาง, สิทธิ์, selinux, iptables

Mine เป็นปัญหาการกำหนดเส้นทางในไคลเอนต์: nrpe.cfg ตรวจสอบเส้นทางของคำสั่งไปยังชื่อปลั๊กอิน check_ * อีกครั้ง สิ่งเหล่านี้อาจสร้างความสับสน, (lib / local) (libexec / plugins) เป็นชื่อพา ธ ฉันดึงข้อมูลผิดพลาดและวางเส้นทางจากไฟล์ nrpe cfg ที่จัดทำแพ็กเกจที่คอมเม้นต์ไว้เพื่อสร้างคำสั่ง การติดตั้ง make หรือ yum plugin จะติดตั้งสิ่งเหล่านี้ในไดเร็กทอรีที่แตกต่างกัน

commaneted: / usr / local / nagios / libexec / check_disk

กับ

realpath: / usr / lib / nagios / plugins / check_disk

จากเซิร์ฟเวอร์ฉันสามารถยืนยันได้ว่าไม่ใช่ปัญหาไฟร์วอลล์สามารถ telnet ไปยังพอร์ต 5666 ได้สามารถรัน check_nrpe แบบครอบคลุมและรับสถานะเป็นค่าส่งคืน สามารถรันคำสั่งแบบโลคัล แต่ nrpe มีเส้นทางที่ไม่ถูกต้องบนไคลเอ็นต์ใน nrpe.cfg


4

ในกรณีของฉันมีเพียงหนึ่งปลั๊กอินที่ล้มเหลวในขณะที่คนอื่น ๆ ทำงานไม่เป็นไร มันกลายเป็นปัญหาของ LOCALE

ปลั๊กอินเป็นcheck_mem.shและจะดำเนินการ grep สำหรับในการส่งออกของMem freeแต่ระบบกลับ LOCALE กลับมาSpeicher(เยอรมัน) แทนMemดังนั้นค่าที่ได้รับทั้งหมดจึงเป็นสตริงว่าง


2
รีบเร่งยินดีต้อนรับสู่ SF! นี่เป็นคำตอบแรกที่ยอดเยี่ยมในความคิดของฉัน: สั้นตรงประเด็นและเพิ่มสิ่งใหม่ในการรวบรวมคำตอบที่นี่แล้ว +1 จากฉันและฉันหวังว่าจะได้รับคำตอบเพิ่มเติมจากคุณในอนาคต (ฉันหวังว่าคุณจะยกโทษให้ฉันในการแก้ไขการจัดรูปแบบขนาดเล็ก)
MadHatter รองรับโมนิก้า

2

นี่เป็นปัญหาการอนุญาตเพียงแค่ให้สิทธิ์ในการเรียกใช้สคริปต์และจะสามารถทำได้:

นี่เป็นตัวอย่าง: Before / Remote host :

[root@puppet1 nrpe.d]# ls -l /usr/lib/nagios/plugins/check_mem.sh
-rwxr--r-- 1 root root 1598 Jul  7 10:55 /usr/lib/nagios/plugins/check_mem.sh

เซิร์ฟเวอร์ NRPE :

[root plugins]# ./check_nrpe -H 172.19.9.200 -c check_mem_vb
NRPE: Unable to read output

หลัง: รีโมตโฮสต์ :

[root@puppet1 plugins]# chmod o+x /usr/lib/nagios/plugins/check_mem.sh

[root plugins]# ./check_nrpe -H 172.19.9.200 -c check_mem_vb
Memory: OK Total: 1980 MB - Used: 139 MB - 6% used|Total=2076479488;;;Used=145076224;;;Cache=1528111104;;Buffer=211890176;;;

แก้ไขปัญหาแล้ว


1
คำตอบที่ดี แต่ก็ควรทราบว่าการอนุญาตให้ผู้ใช้ทุกคนเรียกใช้ check_nrpe เช่นเดียวกับ chmod o + x อาจมีความเสี่ยงด้านความปลอดภัยที่อาจเกิดขึ้นทั้งนี้ขึ้นอยู่กับวิธีการกำหนดค่า / เข้าถึง / ใช้ระบบ
austinian

1

ในกรณีของฉันไฟล์บันทึกที่กำลังถูกตรวจสอบนั้นเป็นเจ้าของโดย root: adm ดังนั้นการเพิ่มผู้ใช้ nagios ในกลุ่ม adm ทำให้คำสั่ง check_log สำเร็จ แต่เมื่อดำเนินการโดยตรงบนโฮสต์ที่ได้รับการตรวจสอบเท่านั้น มันยังคงล้มเหลวในการใช้ check_nrpe บนเซิร์ฟเวอร์ Nagios จนกว่าฉันจะเริ่มบริการ nagios-nrpe-server บนโฮสต์ที่ถูกตรวจสอบเช่น

service nagios-nrpe-server restart

ดังนั้นการรีสตาร์ทบริการจึงเป็นสิ่งจำเป็นเพื่อให้สิทธิ์ในการเปลี่ยนแปลงมีผลสำหรับ NRPE แต่ฉันต้องใช้เวลาสักพักกว่าจะคิดออก


1

ในกรณีของปลั๊กอิน NRPE ที่กำหนดเองตรวจสอบให้แน่ใจว่าได้พิมพ์เอาต์พุตบางส่วนพร้อมกับค่าออก หากมีการส่งออกจากไม่มี NRPE สคริปต์ที่จะบ่นบอกว่า"NRPE ไม่สามารถอ่านการส่งออก" คุณสามารถเปิดใช้งานการดีบักใน nrpe.cfg และสังเกตข้อผิดพลาดนี้


1

ในกรณีของฉันปัญหาเกี่ยวข้องกับ selinux (ใช้ RHEL 6.5, selinux ตั้งค่าเป็นบังคับใช้)

การติดตั้ง nagios-plugins- * ผ่าน yum จะสร้างไฟล์ปลั๊กอินของคุณใน / usr / lib64 / nagios / plugins หากคุณตรวจสอบ fcontext ในไฟล์ปลั๊กอินเหล่านั้น (ls -lZ) คุณจะเห็นไฟล์ที่มีประเภทบริบทตั้งไว้ที่ "nagios_system_plugin_exec_t" ซึ่งเป็นประเภทบริบทที่ check_nrpe คาดหวัง

ในกรณีของฉันฉันได้สร้างสคริปต์ที่กำหนดเอง "check_mem.sh" โดยใช้ "vi" ไฟล์ผลลัพธ์มีการตั้งค่าประเภทบริบทเป็น "lib_t" สิ่งนี้ทำให้ nrpe ส่งเอาต์พุต "NRPE: ไม่สามารถอ่านเอาต์พุต"

การเปลี่ยนบริบทไฟล์เป็น "nagios_system_plugin_exec_t" แก้ไขปัญหา:

chcon -t nagios_system_plugin_exec_t /usr/lib64/nagios/plugins/check_mem.sh

การแก้ไขปัญหา selinux ปกติจะชี้ให้ฉันเห็นปัญหานี้เช่นกัน (การตรวจสอบ /var/log/audit/audit.log) แต่มันเป็นสิ่งสุดท้ายที่ฉันคิดเกี่ยวกับ

แก้ไข: chcon เพิ่งเปลี่ยนบริบทชั่วคราว หากต้องการเปลี่ยนใช้บ่อย ๆ semanage fcontext -a -t nagios_system_plugin_exec_t /usr/lib64/nagios/plugins/check_mem.sh restorecon -vF /usr/lib64/nagios/plugins/check_mem.sh


0

อาจเป็นไปได้ว่าคุณไม่ได้ติดตั้งปลั๊กอิน Nagios ของคุณ NRPE ไม่สามารถค้นหาหรือเข้าถึงได้

ฉันไม่เคยต้องเพิ่มคำสั่งของฉันไปที่ Sudoers ตรวจสอบให้แน่ใจว่าคำสั่งนั้นเป็นของผู้ใช้ Nagios และสามารถอ่านได้


0

ฉันคิดว่าคุณต้องเพิ่มปลั๊กอินใน /usr/lib64/nagios/plugins/*dir ฉันมีปัญหาเช่นเดียวกับคุณและฉันสามารถแก้ไขได้ด้วยวิธีนี้


0

ฉันมีปัญหาที่คุณเขียน การทดสอบที่ฉันวิ่งนั้นมาจากภาษา Perl ใส่บรรทัดนี้ลงในไฟล์/etc/nagios/nrpe.cfgเพื่อให้มันทำงาน

command [check_memory] = /usr/bin/perl /usr/lib64/nagios/plugins/check_memory -w 75-c 90 

0

มีบทความที่ดีมากซึ่งครอบคลุมการติดตั้งและการกำหนดค่าเอเจนต์ NRPE ทั้งหมดด้วยตัวอย่าง check_ คำสั่งมากมายฉันใช้บทความนี้เมื่อฉันต้องการติดตั้ง NRPE บนเซิร์ฟเวอร์ใหม่ ยิ่งไปกว่านั้นในตอนท้ายของหน้าคุณสามารถค้นหาสคริปต์สุดเจ๋งที่ติดตั้งและกำหนดค่า NRPE ให้คุณโดยอัตโนมัติ (ขึ้นอยู่กับตัวแปรที่คุณตั้งค่า) บทความสามารถพบได้: ที่นี่


ลิงค์ได้รับการปรับปรุง
Itai Ganot

0

สิ่งนี้มักจะเกิดขึ้นเมื่อเซิร์ฟเวอร์ NRPE เริ่มต้นด้วยผู้ใช้ nrpe แทนที่จะเป็น nagios

การเปลี่ยนnrpe_userค่าเป็น nagios ใน/etc/nagios/nrpe.cfgไฟล์ควรแก้ปัญหาของคุณ

nrpe_groupสามารถเปลี่ยนแปลงได้เช่นกันหากมีความจำเป็น


0

อีกสิ่งหนึ่งที่ควรตรวจสอบคือหากคำสั่งของคุณใช้sudo -u <another user>เพื่อเรียกใช้คำสั่งlibexecไดเรกทอรี (และไดเรกทอรีด้านบน) จะต้องสามารถอ่านได้โดยผู้ใช้ที่ถูก sudoed

ตัวอย่างเช่นหากคำสั่งของคุณคือ:

command[check_tomcat]=sudo -u tomcat /usr/local/nagios/libexec/check_tomcat ...

ผู้ใช้ tomcat ต้องสามารถเข้าถึงไฟล์นั้นได้

วิธีหนึ่งในการแก้ไขปัญหานี้คือ:

chmod 0775 /usr/local/nagios/
chmod 0755 /usr/local/nagios/libexec

การแทนที่ส่วนสุดท้ายด้วยตำแหน่งที่โปรแกรมปฏิบัติการของคุณใช้งานอยู่


0

ฉันมีปัญหาเดียวกันและฉันจัดการเพื่อแก้ปัญหาโดยฆ่ากระบวนการ nagios (บนเครื่องที่ถูกตรวจสอบ):

ps -ef | grep nagios
kill -9 [NagiosProcessNumber]
/etc/init.d/nagios-nrpe-server start

ทุกอย่างเรียบร้อยดีหลังจากนั้น


0

เพิ่งมีปัญหานี้ใน FreeBSD หลังจากปะทะหัวกับกำแพงเป็นเวลาหนึ่งชั่วโมงฉันก็ตระหนักว่าปัญหาคือว่า/usr/local/nagios/etc/nrpe.cfgมันชี้ไปที่ตำแหน่งที่ไม่ถูกต้องสำหรับ sudo

ในการค้นหาตำแหน่งที่ถูกต้องให้ชี้ไปที่คำสั่ง sudo รัน:

# whereis sudo

ฉันเปลี่ยน command_prefix เป็น nrpe.cfg จาก:

command_prefix=/usr/local/sudo

ไปที่:

command_prefix=/usr/local/bin/sudo

จากนั้นก็วิ่งservice nrpe restartและปัญหาได้รับการแก้ไข

อาจเป็นปัญหาที่คล้ายกันในระบบปฏิบัติการอื่น ๆ อีกสิ่งหนึ่งในการตรวจสอบว่าคุณได้ตรวจสอบปัญหาสิทธิ์ที่เป็นไปได้อื่น ๆ ทั้งหมดแล้วและคุณยังคงประสบปัญหานี้อยู่


-1

ปลั๊กอิน Nagios ที่หายไปบนไคลเอนต์ nrpe

ห้ามใช้ yum install nagios-plugins (nagios-plugins-2.0.3-1.el6.x86_64) มันไม่ได้ติดตั้งปลั๊กอินทั้งหมด ดาวน์โหลด nagios-plugins-1.4.11.tar.gz และปฏิบัติตามคำแนะนำในเอกสารนี้

http://www.thegeekstuff.com/2008/06/how-to-monitor-remote-linux-host-using-nagios-30/


-2

ฉันมีปัญหานี้และฉันแก้ไขการปิดใช้งาน selinux

setenforce 0


2
ยินดีต้อนรับสู่ Server Fault คุณสามารถให้รายละเอียดเพิ่มเติมเกี่ยวกับการอธิบายการทำงานได้อย่างไร?
ฉันพูดว่า Reinstate Monica
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.