Ngăn sudo nhắc mật khẩu khi chạy lệnh không được phép


15

Tôi đã cấp quyền cho nhóm để chạy các lệnh nhất định mà không có mật khẩu qua sudo. Khi một trong những người dùng mắc lỗi đánh máy hoặc chạy sai lệnh, hệ thống sẽ nhắc họ nhập mật khẩu và sau đó họ gặp lỗi. Điều này gây nhầm lẫn cho người dùng vì vậy tôi chỉ muốn hiển thị một lỗi thay vì nhắc họ nhập mật khẩu. Điều này có thể không?

Đây là một ví dụ về tập tin sudoers của tôi:

%mygroup ALL=(ALL) NOPASSWD:/usr/local/bin/myscript.sh *

Ví dụ khi họ chạy tập lệnh sai:

# sudo /usr/local/bin/otherscript.sh
[sudo] password for user:
Sorry, user user is not allowed to execute '/usr/local/bin/otherscript.sh' as root on <hostname>.

Sản phẩm chất lượng:

Sorry, user user is not allowed to execute '/usr/local/bin/otherscript.sh' as root on <hostname>. Please check the command and try again.

Lưu ý thiếu dấu nhắc mật khẩu.

Google-fu của tôi đã làm tôi thất bại và chỉ trả về kết quả khi không yêu cầu mật khẩu khi người dùng được phép chạy lệnh.


8
Nếu điều đó là có thể, nó có thể mở một lỗ hổng bảo mật (nhỏ). Nếu bạn đã tự đăng nhập và tôi "mượn" bàn phím của mình, tôi không thể thấy lệnh nào sudosẽ cho phép bạn thực thi mà không cần nhập mật khẩu. Với tính năng bạn muốn, tôi có thể lấy thông tin đó cho các lệnh cụ thể.
Keith Thompson

4
Đây là một vấn đề bảo mật khá lớn. Bạn không nên sử dụng sudo với các tập lệnh làm lệnh. Mọi người chỉ có thể chỉnh sửa tập lệnh và chạy những gì họ muốn hoàn toàn che giấu nó từ một cuộc kiểm toán. Thay vào đó hãy thêm lệnh gọi sudo bên trong tập lệnh.
coteyr

1
@coteyr chạy các tệp nhị phân sudocũng là một vấn đề lớn, nếu người dùng có quyền ghi vào các tệp này.
Dmitry Grigoryev

1
@CarlWitthoft đó là lý do tại sao bạn sử dụng các đường dẫn tuyệt đối để chỉ định các chương trình được phép trong sudoers.
Dmitry Grigoryev

1
@DmitryGrigoryev, vâng, nhưng nếu bạn sẽ sử dụng sed hoặc một số thứ như vậy chỉ cho một tệp thì không có lợi cho sudo. Cho phép người dùng sửa đổi một tệp là lý do tại sao các tệp có quyền. Bạn không phải phát minh lại bánh xe. Nếu bạn muốn người dùng có thể sửa đổi một tập tin, hãy để họ. Không có nhu cầu hoặc lợi ích để vượt qua các vòng với sudo để cho phép người dùng sửa đổi tệp mà không cần mật khẩu. Bạn luôn có thể cho phép họ. Đúng công cụ cho đúng công việc.
coteyr

Câu trả lời:


25

Từ một bài đọc nhanh về sudo(8)

   -n          The -n (non-interactive) option prevents sudo from
               prompting the user for a password.  If a password is
               required for the command to run, sudo will display an error
               message and exit.

Và cho những người nghi ngờ:

# grep jdoe /etc/sudoers
jdoe    ALL=(ALL) NOPASSWD: /bin/echo
#

Đã thử nghiệm như vậy:

% sudo echo allowed
allowed
% sudo -n ed             
sudo: a password is required
% sudo ed               

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

Password:

Vì vậy, một aliascho sudonhững người này có thể sẽ thực hiện các mẹo, để ngăn chặn lời nhắc mật khẩu. Bây giờ tại sao điều này đòi hỏi biên dịch tùy chỉnh sudo, tôi không biết, tôi chỉ đọc hướng dẫn.


Thật. Tôi sẽ đặt một cái gì đó như alias sudo="$(which sudo) -n"trong / etc / bashrc, sau đó sử dụng sudo(hành vi được điều chỉnh) hoặc command sudo(hành vi mặc định) như mong muốn.
một CVn

7

Một điều làm việc cho tôi, (phiên bản Sudo 1.8.17p1), nhưng chỉ đáp ứng một phần vấn đề của bạn, là đặt số lượng mật khẩu thử thành 0.

Defaults:%mygroup passwd_tries = 0

Điều này làm cho sudo thoát với mã 1 khi bất kỳ lệnh nào yêu cầu mật khẩu được thử. Tuy nhiên, nó không tạo ra bất kỳ loại thông báo lỗi.


Đây cũng là một câu trả lời hợp lệ nhưng việc thiếu thông báo lỗi có thể gây nhầm lẫn. Các lỗi chính xác nhưng không mong đợi từ câu trả lời ở trên cũng gây nhầm lẫn. Tôi đoán đó là một tung lên. Cảm ơn bạn đã cung cấp một câu trả lời thay thế, các tùy chọn luôn được đánh giá cao!
dùng184982

2

Bạn không thể.

Không có cách nào để nói bạn là ai cho đến khi bạn xác thực và theo mặc định, bạn không thể xác thực nếu không có mật khẩu.

Bạn có thể thay đổi xác thực để sử dụng các phím USB, máy quét vân tay, xác thực giọng nói, nhận dạng khuôn mặt hoặc một loạt các nội dung khác, nhưng quan điểm là như nhau.

Bạn không thể xác thực, với việc xác thực trước khi bạn xác thực sudo không có doanh nghiệp nào cho bạn biết những gì bạn có thể hoặc không thể chạy.


2
Nhập mật khẩu của bạn khi bạn chạy sudo không phải là nhận dạng (Hãy nói cho bạn biết bạn là ai). Sudo biết bạn là ai. Nhập mật khẩu của bạn là xác nhận hiện diện.
Gilles 'SO- ngừng trở nên xấu xa

Tôi coi xác nhận hiện diện là "xác thực". Như trong Xác thực, sau đó Ủy quyền.
coteyr

2
Câu trả lời cho biết "xác thực" không phải "xác định". Mặc dù sudo không biết bạn là ai, dựa trên người dùng đã đăng nhập trên thiết bị đầu cuối đó, nó không biết bạn là ai cho đến khi bạn xác thực danh tính đó.
Dave Sherohman

2

@StrongBad đã đưa ra một nhận xét xứng đáng là một câu trả lời:

Tôi nghĩ rằng giải pháp tốt nhất sẽ là viết một tập lệnh bao bọc luôn gọi sudovới các tham số chính xác. (Bao gồm -n)

Tập lệnh trình bao bọc có thể thực hiện phân tích cú pháp đối số, v.v ... để tập lệnh sudo được gọi càng nhỏ càng tốt và do đó ít có lỗi hơn.


1

Điều này là không thể. Cách duy nhất là thay đổi mã nguồn và biên dịch ngã ba của riêng bạnsudo


Bạn nói đúng, nhưng tôi không nghĩ mình sẽ được phép tải phiên bản sudo tùy chỉnh trên tất cả các máy chủ sản xuất của chúng tôi. hah
user184982
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.