Membatasi penggunaan `sudo -s`

8

Saya mengatur Nagios di beberapa server Linux saya dan telah mengalami sedikit masalah. The check_ide_smartPlugin membutuhkan akses root ke sistem untuk menjalankan. Untuk menjalankannya, saya menggunakan check_by_sshplugin untuk ssh ke akun nagios pada host jarak jauh, kemudian jalankan check_ide_smartmenggunakan sudo.

Saya awalnya menambahkan baris berikut /etc/sudoersuntuk 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 ( $@) berfungsi dengan benar dengan plugin, jadi saya tidak tahu apakah ini akan berhasil. Sunting: Saya perlu mengutip $@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 -sbekerja 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.

Chris Lieb
sumber

Jawaban:

7

nagios ALL=NOPASSWD: /bin/bash -c /usr/lib/nagios/plugins/check_ide_smart *

Ini harus berfungsi dan memungkinkan argumen.

Mike McQuaid
sumber
Itu tidak berhasil. Lihat edit saya untuk detailnya.
Chris Lieb
@ Chris Lieb: Anda harus mengubah panggilan Anda dari "sudo -s ..." menjadi "sudo / bin / bash -c ...". Maka itu harus bekerja. Saya memiliki pengaturan serupa yang bekerja di sini (bukan nagios, tetapi serupa).
Martin C.
Saya sudah memperbaikinya, coba sekarang (dengan tanda bintang untuk wildcard).
Mike McQuaid
2

FYI, Anda perlu mengutip $ @ dalam skrip shell agar berfungsi dengan benar:

#!/bin/sh
/bin/bash -c /usr/lib/nagios/plugins/check_ide_plugin "$@"

$@adalah sihir. Dari halaman bash,

@ Perluas ke parameter posisi, mulai dari satu. Ketika ekspansi terjadi dalam tanda kutip ganda, setiap parameter meluas ke kata yang terpisah. Yaitu, "$ @" sama dengan "$ 1" "$ 2" ... Jika ekspansi yang dikutip ganda terjadi dalam sebuah kata, ekspansi dari parameter pertama digabungkan dengan bagian awal dari kata aslinya, dan ekspansi parameter terakhir bergabung dengan bagian terakhir dari kata aslinya. Ketika tidak ada parameter posisi, "$ @" dan $ @ perluas sama sekali (mis., Mereka dihapus).

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?

derobert
sumber
Plugin ini adalah satu-satunya yang menyebabkan masalah. Tidak ada yang lain yang saya set up sejauh ini membutuhkan akses root, jadi saya tidak perlu menggunakan sudo untuk mereka. Karena itu, saya tidak yakin apakah masalahnya disebabkan oleh sudo yang tidak menghasilkan shell atau oleh plugin check_ide_smart yang membutuhkan shell untuk dijalankan.
Chris Lieb
1

Alih-alih menggunakan sudo -sdan meluncurkan shell root, cukup izinkan pengguna nagios Anda untuk menggunakan sudo tanpa menggunakan tty !requiretty. Anda /etc/sudoersharus memiliki yang berikut ini:

# Allow Nagios extra privs
Defaults:nagios !requiretty
nagios ALL=NOPASSWD: /usr/lib/nagios/plugins/check_ide_plugin

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

TommyTheKid
sumber
0

Coba skrip lagi tetapi letakkan tanda kutip di sekitar $ @ Anda:

#!/bin/sh
/bin/bash -c /usr/lib/nagios/plugins/check_ide_plugin "$@"
pjz
sumber
-1

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):

-s [command]
    The -s (shell) option runs the shell specified by the SHELL
    environment variable if it is set or the shell as specified
    in passwd(5).  If a command is specified, it is passed to
    the shell for execution.  Otherwise, an interactive shell
    is executed.
Christopher Cashell
sumber
1
Shell dijalankan, tetapi arusnya adalah untuk memungkinkan panggilan apa pun /bin/bash, yang juga memungkinkan pemijahan shell interaktif tanpa batasan dan tanpa batasan pada perintah apa yang bisa dipanggil.
Martin C.