Kiểm tra xem người dùng có quyền sudo mà không yêu cầu người dùng nhập liệu không


12

Tôi có một tập lệnh shell cục bộ thực hiện một số thử nghiệm trên máy chủ từ xa, trước khi phân phối tải trọng; một trong những thử nghiệm này là liệu người dùng có quyền sudo hay không, được kiểm tra đơn giản với sudo -vđiều này tuy nhiên điều này yêu cầu người dùng nhập mật khẩu của họ. Ngoài ra, máy chủ từ xa dường như có thời gian chờ sudo tức thì nên yêu cầu nhập mật khẩu trên mỗi kết nối mới và đây là điều tôi không được phép thay đổi (như một chính sách).

Tất nhiên tôi có thể kiểm tra xem người dùng có phải là một phần của một số nhóm nhất định hay không, nhưng sau đó điều này sẽ không liên quan đến cấu hình máy chủ từ xa, vì vậy tôi hy vọng cũng có một phương pháp có thể kiểm tra rằng không cần phải giả sử các nhóm người dùng. như không cần người dùng nhập liệu?

Cảm ơn!

CẬP NHẬT: Để lặp lại ý kiến ​​của tôi, tôi chỉ muốn kiểm tra xem người dùng có thể sudo hay không, mà không yêu cầu tương tác của người dùng cho bài kiểm tra đó.


Bạn có cần kiểm tra xem người dùng có khả năng sử dụng sudo không, hoặc nếu anh ta đang thực thi tập lệnh shell qua sudo?
Niko SP

Chỉ cần anh ta có khả năng. Tập lệnh cục bộ sẽ yêu cầu nhập mật khẩu sudo sau này, vì vậy tôi chỉ muốn kiểm tra sớm xem người dùng trên máy chủ từ xa có phải là sudoer không.
DanH

một kiểm tra nhanh trên hộp ubfox của tôi đã cho tôi sudo -l, nó trả về các lệnh mà người dùng có thể chạy, nếu (TẤT CẢ) TẤT CẢ là một phần của chúng, người dùng có thể sử dụng sudo cho bất kỳ lệnh nào. Có lẽ đó là góc phải không?
Niko SP

1
sudo -lnhắc tôi nhập mật khẩu.
ThatGraemeGuy

1
Bộ nhớ cache dựa trên tty vì vậy nếu một phiên mới cung cấp cho bạn cùng một tty bạn có thể không được nhắc. Hãy thử thực hiện sudo -kđầu tiên.
Đánh dấu Wagner

Câu trả lời:


12

Tôi sợ điều duy nhất bạn có thể kiểm tra là nếu người dùng có quyền sudo mà không có mật khẩu.

Hành hình

sudo -n true

Nếu $? là 0, người dùng có quyền truy cập sudo mà không cần mật khẩu, nếu $? là 1, người dùng cần mật khẩu.

Nếu bạn cần xác minh cho một chương trình cụ thể, hãy thay đổi truevới chương trình của bạn, theo cách mà chương trình không làm gì cả, nhưchmod --help


1
Lưu ý rằng điều này không giúp phát hiện sơ bộ nếu lệnh Xsudocó thể mà không cần nhập mật khẩukhông vô tình chạy nó
try-catch-cuối cùng

3

Nếu bạn có một người dùng có quyền truy cập sudo, như "root", bạn có thể sử dụng nó để kiểm tra các thông tin đăng nhập khác. Khi người dùng có quyền truy cập chạy:

sudo -n -l -U foo 2> & 1 | egrep -c -i "không được phép chạy sudo | người dùng không xác định"

Nếu nó trả về 0, "foo" có quyền truy cập. Mặt khác, nó không có quyền truy cập sudo.


3
Đơn giản sudo -n -l cmdvà bạn sẽ được thông báo nếu người dùng hiện tại có quyền truy cập sudo vào cmd. Nếu bạn muốn kiểm tra kết quả.
Philippe A.

1

sudo -l

Điều đó sẽ cung cấp cho bạn đủ để quyết định nếu bạn có quyền riêng tư mà bạn muốn / cần.


1
Điều này vẫn yêu cầu mật khẩu trong hệ thống của tôi (Ubuntu 16.04).
Mario Vilas

1

Tôi biết rằng đây là một câu hỏi siêu cũ, nhưng tôi đã tìm thấy may mắn với -ncờ (không tương tác) và -v/ -l. Nhưng, bạn phải kiểm tra đầu ra:

$ sudo -vn && sudo -ln  #User with cached credentials
User adminuser may run the following commands on computername:
    (ALL) ALL
$ sudo -vn && sudo -ln  #User who _can_ sudo but isn't cached
sudo: a password is required
$ sudo -vn && sudo -ln  #User who can't at all
Sorry, user nonadmin may not run sudo on computername.

Một số chuyển hướng đầu ra và grepping sẽ đưa bạn đến đó, có thể:

if (sudo -vn && sudo -ln) 2>&1 | grep -v 'may not' > /dev/null; then
  #they're cool
  exit 0 #Or, whatever
fi
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.