Saya mengatur Nagios di beberapa server Linux saya dan telah mengalami sedikit masalah. The check_ide_smart
Plugin membutuhkan akses root ke sistem untuk menjalankan. Untuk menjalankannya, saya menggunakan check_by_ssh
plugin untuk ssh ke akun nagios pada host jarak jauh, kemudian jalankan check_ide_smart
menggunakan sudo.
Saya awalnya menambahkan baris berikut /etc/sudoers
untuk memungkinkan program bekerja:
nagios ALL=NOPASSWD: /usr/lib/nagios/plugins/check_ide_smart
Sementara ini bekerja dengan baik ketika dijalankan secara lokal, saya mendapatkan masalah ketika dijalankan dari Nagios: tidak ada TTY yang muncul, yang mencegah plugin bekerja.
Saya menggali halaman manual untuk sudo dan menemukan opsi -s, yang memunculkan shell dan menjalankan program di sana. Ketika saya mencoba menggunakan sudo -s
, saya mengalami masalah izin karena -s tampaknya mengubah perintah menjadi /bin/bash -c /usr/lib/nagios/plugins/check_ide_smart
, yang tidak diizinkan oleh file sudoers. Saya mencoba mengubah file sudoers untuk menggunakan perintah itu, tetapi itu tidak berhasil, dan menggunakan tanda kutip adalah kesalahan sintaksis.
Saya akhirnya membuatnya bekerja dengan menggunakan baris berikut di /etc/sudoers
:
nagios ALL=/bin/bash
Ini terasa sangat salah bagi saya karena saya mengizinkan pengguna nagio untuk menelurkan shell root, yang dengannya mereka dapat melakukan apa saja.
Pada titik ini, saya pikir itu mungkin, dengan menempatkan perintah di skrip shell yang hak pengguna baca-nagi telah aktifkan, jadi saya membuat skrip shell:
#!/bin/sh
/bin/bash -c /usr/lib/nagios/plugins/check_ide_plugin $@
Sayangnya, saya tidak pernah bisa mendapatkan parameter yang lulus ( Sunting: Saya perlu mengutip $@
) berfungsi dengan benar dengan plugin, jadi saya tidak tahu apakah ini akan berhasil. $@
agar bisa berfungsi. Terima kasih @derobert dan @pjz. Saya masih tidak tahu apakah itu akan berhasil karena saya berhasil menggunakan solusi @ Mike Arthur.
Apakah ada cara agar saya bisa mulai sudo -s
bekerja tanpa membiarkan pemijahan shell root?
Menjawab:
Menambahkan baris berikut ke /etc/sudoers
:
nagios ALL=NOPASSWD: /bin/bash -c /usr/lib/nagios/plugins/check_ide_smart *
Perhatikan tanda bintang yang tertinggal; tanpanya, ini tidak akan berhasil. Terima kasih @ Mike Arthur untuk jawabannya.
FYI, Anda perlu mengutip $ @ dalam skrip shell agar berfungsi dengan benar:
$@
adalah sihir. Dari halaman bash,Juga, memulai bash tidak akan menghasilkan banyak; meskipun saya bingung mengapa plugin nagios Anda membutuhkan terminal untuk dijalankan. Seharusnya tidak. Mungkin masalah sebenarnya adalah sanitasi lingkungan sudo?
sumber
Alih-alih menggunakan
sudo -s
dan meluncurkan shell root, cukup izinkan pengguna nagios Anda untuk menggunakan sudo tanpa menggunakan tty!requiretty
. Anda/etc/sudoers
harus memiliki yang berikut ini:... yang akan memungkinkan akses sudo langsung, tanpa kata sandi, dan tanpa tty. Anda dapat mematikan "check_ide_plugin" jika Anda ingin akses sudo ke semua plugin.
Kami juga menggunakan NRPE, yang tampaknya sedikit lebih aman daripada check_by_ssh, tetapi membutuhkan sedikit lebih banyak pengaturan. Ide yang sama di / etc / sudoers tho, cukup tukar nagios dengan nrpe. :)
~ tommy
sumber
Coba skrip lagi tetapi letakkan tanda kutip di sekitar $ @ Anda:
sumber
Saya tidak berpikir itu mungkin untuk menggunakan -s tanpa memunculkan shell root (dengan asumsi Anda membutuhkan hak akses root). Opsi -s ada khusus untuk menelurkan shell. Itu artinya -s. Dari sudo (8):
sumber
/bin/bash
, yang juga memungkinkan pemijahan shell interaktif tanpa batasan dan tanpa batasan pada perintah apa yang bisa dipanggil.