Cho phép lệnh sudo phức tạp trên Debian Linux


13

Tôi cần cho phép một lệnh cụ thể trên hộp Debian Linux cho một người dùng. Tôi đã thử điều này trong /etc/sudoerstập tin:

# User privilege specification
zabbix  ALL=NOPASSWD: /usr/bin/apt-get --print-uris -qq -y upgrade 2>/dev/null |awk '{print $2}' | wc | awk '{print $1}'

Điều này không hoạt động như mong đợi. Nếu tôi chạy lệnh như người dùng zabbix với sudo, nó sẽ hỏi mật khẩu (mặc dù tôi đã chỉ định NOPASSWDtùy chọn).

Tuy nhiên, điều này hoạt động:

# User privilege specification
zabbix  ALL=NOPASSWD: /usr/bin/apt-get

Nhưng có một nhược điểm là tất cả các tiểu ban apt-getđều được cho phép. Có cách nào để tôi có thể sửa lỗi này chỉ cho phép một lệnh cụ thể không?

Câu trả lời:


10

Tôi không đồng ý với lain. Mặc dù nó sẽ hoạt động, bạn không cần awkphải chạy bằng root. Tôi sẽ không thoải mái với điều này bởi vì bạn có thể tấn công awktheo một cách nào đó. Nó là một trình thông dịch ngôn ngữ lập trình đầy đủ sau khi tất cả.

Khi một người chạy sudo /usr/bin/apt-get --print-uris -qq -y upgrade 2>/dev/null |awk '{print $2}' | wc | awk '{print $1}', họ thực sự đang chạy sudo /usr/bin/apt-get --print-uris -qq -y upgradevà sau đó chuyển / chuyển hướng như người dùng cuộc gọi.

Thử đi: zabbix ALL=NOPASSWD: /usr/bin/apt-get --print-uris -qq -y upgrade

Nhân tiện, không có gì sai khi đưa điều này vào một kịch bản như lain và bạn vẫn có thể làm điều đó. Tôi sẽ chỉ tránh chạy awk như root nếu có thể.


1
Bạn đã đúng nhưng nếu kịch bản không an toàn thì không có vấn đề gì trong đó, nó có thể bị ghi đè và thế giới là con hàu của bạn. Nếu tập lệnh được bảo mật thì những gì trong đó cũng an toàn.
dùng9517

25

Bạn có thể đang rơi vào tình trạng chuyển hướng tương tác với sudo. Việc chuyển hướng được thực hiện tại người dùng gọi chứ không phải người dùng đặc quyền. Có lẽ sẽ dễ dàng hơn cho bạn để bọc lệnh của bạn trong một tập lệnh và sau đó cho phép người dùng zabbix chạy tập lệnh đó, vd

#!/bin/bash
/usr/bin/apt-get --print-uris -qq -y upgrade 2>/dev/null |awk '{print $2}' | wc | awk '{print $1}'

bộ sudoers như

zabbix  ALL=NOPASSWD: /path/to/script

Bây giờ toàn bộ tập lệnh sẽ được chạy với tư cách là người dùng đặc quyền chứ không chỉ là lệnh apt-get cụ thể. Mặc dù đảm bảo rằng người dùng zabbix không thể ghi vào tập lệnh.


1
Ai đó có thể sửa tôi nếu sudo đã xử lý nó (tôi dường như nhớ lại có vấn đề với các biến env không được thông qua), nhưng tôi khuyên bạn nên tạo awk và wc có đầy đủ thông tin của họ như là một cách thực hành tốt nhất cho các tập lệnh để người dùng có thể 't do xuất PATH = ~ user / bin: $ PATH và dán bất kỳ lệnh nào bạn muốn trong tập lệnh có tên awk (hoặc wc) trong ~ user / bin
Foon

@Foon: Tôi nghĩ bạn đang nhầm lẫn sudo với cron.
dùng9517

1
Không gây nhầm lẫn, nhưng superuser.com/questions/232231/ cho thấy sudo ngăn chặn thao tác PATH (và LD_LIBARRAY_PATH theo mặc định)
Foon

Tôi đã làm một cái gì đó tương tự chỉ tôi đã viết kịch bản gợi lên và làm cho nó có thể ghi được chỉ bằng root. Kiểm tra xem nó có hoạt động với người dùng có quyền 711 hay không, sau đó họ thậm chí không thể thấy những gì nó đang làm để thử và phá vỡ nó.
Chris K
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.