Hạn chế sử dụng `sudo -s`


8

Tôi đang thiết lập Nagios trên một số máy chủ Linux của mình và gặp phải một số vấn đề. Các check_ide_smartPlugin yêu cầu truy cập root vào hệ thống để chạy. Để chạy nó, tôi sử dụng check_by_sshplugin để ssh vào tài khoản nagios trên máy chủ từ xa, sau đó chạy check_ide_smartbằng sudo.

Ban đầu tôi đã thêm các dòng sau /etc/sudoersđể cho phép chương trình hoạt động:

nagios  ALL=NOPASSWD: /usr/lib/nagios/plugins/check_ide_smart

Mặc dù điều này chỉ hoạt động tốt khi chạy cục bộ, tôi đã gặp sự cố khi nó được chạy từ Nagios: không có TTY nào được sinh ra, điều đó ngăn cản plugin hoạt động.

Tôi đã đào trang man cho sudo và tìm thấy tùy chọn -s, nó sinh ra một shell và thực thi chương trình trong đó. Khi tôi thử sử dụng sudo -s, tôi gặp phải các vấn đề về quyền vì -s rõ ràng thay đổi lệnh thành /bin/bash -c /usr/lib/nagios/plugins/check_ide_smart, không được cho phép bởi tệp sudoers. Tôi đã thử thay đổi tệp sudoers để sử dụng lệnh đó, nhưng nó không hoạt động và sử dụng dấu ngoặc kép là một lỗi cú pháp.

Cuối cùng tôi đã làm cho nó hoạt động bằng cách sử dụng dòng sau trong /etc/sudoers:

nagios ALL=/bin/bash

Điều này cảm thấy thực sự sai đối với tôi vì tôi cho phép người dùng nagios sinh ra một vỏ gốc, mà họ có thể làm bất cứ điều gì.

Tại thời điểm này, tôi nghĩ rằng có lẽ, bằng cách đặt lệnh trong tập lệnh shell mà người dùng nagios có các đặc quyền chỉ đọc sẽ hoạt động, vì vậy tôi đã tạo một tập lệnh shell:

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

Thật không may, tôi không bao giờ có thể làm cho các tham số đã truyền ( $@) hoạt động chính xác với plugin, vì vậy tôi không biết liệu nó có hoạt động không. Chỉnh sửa: Tôi cần trích dẫn $@để nó hoạt động. Cảm ơn @derobert và @pjz. Tôi vẫn không biết liệu nó có hoạt động hay không vì tôi đã làm cho nó hoạt động bằng giải pháp của @Mike Arthur.

Có cách nào để tôi có thể sudo -slàm việc trong khi không cho phép sinh sản vỏ gốc không?

Câu trả lời:

Đã thêm dòng sau vào /etc/sudoers:

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

Lưu ý dấu hoa thị; không có nó, nó không hoạt động. Cảm ơn @Mike Arthur đã trả lời.

Câu trả lời:


7

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

Điều này sẽ làm việc và cho phép đối số.


Điều đó đã không làm việc. Xem chỉnh sửa của tôi để biết chi tiết.
Chris Lieb

@Chris Lieb: bạn sẽ phải thay đổi cuộc gọi của mình từ "sudo -s ..." thành "sudo / bin / bash -c ...". Sau đó, nó sẽ làm việc. Tôi có một thiết lập tương tự làm việc ở đây (không phải nagios, nhưng tương tự).
Martin C.

Tôi đã sửa nó, thử ngay bây giờ (với dấu hoa thị cho ký tự đại diện).
Mike McQuaid

2

FYI, bạn cần trích dẫn $ @ trong tập lệnh shell của mình để nó hoạt động đúng:

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

$@là ma thuật. Từ trang bash,

@ Mở rộng đến các tham số vị trí, bắt đầu từ một. Khi mở rộng xảy ra trong dấu ngoặc kép, mỗi tham số sẽ mở rộng thành một từ riêng biệt. Nghĩa là, "$ @" tương đương với "$ 1" "$ 2" ... Nếu việc mở rộng trích dẫn kép xảy ra trong một từ, việc mở rộng tham số đầu tiên được nối với phần đầu của từ gốc và mở rộng của tham số cuối cùng được nối với phần cuối của từ gốc. Khi không có tham số vị trí, "$ @" và $ @ mở rộng thành không có gì (nghĩa là chúng bị xóa).

Ngoài ra, bắt đầu bash sẽ không sinh ra một pty; mặc dù tôi bối rối về lý do tại sao plugin nagios của bạn cần một thiết bị đầu cuối để chạy. Nó không nên. Có lẽ vấn đề thực sự là vệ sinh môi trường của sudo?


Plugin này là người duy nhất đã gây ra bất kỳ vấn đề. Không ai khác mà tôi đã thiết lập cho đến nay yêu cầu quyền truy cập root, vì vậy tôi không cần sử dụng sudo cho họ. Bởi vì điều này, tôi không chắc vấn đề có phải do sudo không sinh ra trình bao hoặc do plugin check_ide_smart yêu cầu trình bao chạy.
Chris Lieb

1

Thay vì sử dụng sudo -svà khởi chạy shell root, chỉ cần cho phép người dùng nagios của bạn sử dụng sudo mà không cần sử dụng tty !requiretty. Bạn /etc/sudoersnên có những điều sau đây:

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

... sẽ cho phép truy cập sudo trực tiếp, không cần mật khẩu và không có tty. Bạn có thể tắt "check_ide_plugin" nếu bạn muốn truy cập sudo vào tất cả các plugin.

Chúng tôi cũng sử dụng NRPE, có vẻ an toàn hơn một chút so với check_by_ssh, nhưng nó yêu cầu thiết lập nhiều hơn một chút. Cùng một ý tưởng trong / etc / sudoers tho, chỉ cần trao đổi nagios với nrpe. :)

~ mẹ


0

Hãy thử lại tập lệnh nhưng đặt doublequote quanh $ @:

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

-1

Tôi không nghĩ có thể sử dụng -s mà không sinh ra một root root (giả sử bạn cần quyền root). Tùy chọn -s đặc biệt ở đó để sinh ra một vỏ. Đó là những gì có nghĩa là. Từ 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.

1
Một shell được thực thi, nhưng hiện tại của anh ta là cho phép bất kỳ cuộc gọi nào /bin/bash, điều này cũng cho phép sinh ra một shell tương tác mà không có bất kỳ giới hạn nào và không có bất kỳ hạn chế nào về các lệnh có thể được gọi.
Martin C.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.