`Sudo` yêu cầu mật khẩu của người dùng nào?


10
$ ls -l /usr/bin/sudo
-rwsr-xr-x 1 root root 136808 Jul  4  2017 /usr/bin/sudo

nên sudolà Runnable bởi bất kỳ người sử dụng, và bất kỳ người dùng chạy sudosẽ có rễ như ID người dùng hiệu quả của quá trình này vì các bit set-user-id của /usr/bin/sudolà bộ.

Từ https://unix.stackexchange.com/a/11287/674

sự khác biệt dễ thấy nhất giữa sudo và su là sudo yêu cầu mật khẩu của người dùng và su yêu cầu mật khẩu của root.

  1. Mật khẩu người dùng nào sudoyêu cầu? Đây có phải là người dùng được đại diện bởi ID người dùng thực của quá trình không?

    Nếu có, không người dùng nào có thể có được đặc quyền siêu người dùng bằng cách chạy sudovà sau đó cung cấp mật khẩu của riêng họ? Linux có thể hạn chế điều đó trên một số người dùng không?

  2. Có đúng là sudoyêu cầu mật khẩu sau khi execve() bắt đầu thực hiện main()các /usr/bin/sudo?

    Vì euid của quá trình đã được thay đổi thành root (vì bit set-user-id của / usr / bin / sudo được đặt), điểm sudo yêu cầu mật khẩu sau này là gì?

Cảm ơn.

Tôi đã đọc https://unix.stackexchange.com/a/80350/674 , nhưng nó không trả lời các câu hỏi trên.


3
Nó không phải là bất kỳ người dùng nào, mà chỉ những người trong danh sách sudoers.
Rodrigo

1
@Rodrigo Nghe có vẻ như một câu trả lời, hãy đặt nó trong một câu trả lời không phải là một bình luận.
Philip Kendall

2
@PhilipKendall Điều đó chỉ trả lời một phần nghi ngờ của OP.
Rodrigo

Câu trả lời:


22
  1. Trong cấu hình phổ biến nhất của nó, sudoyêu cầu mật khẩu của người dùng đang chạy sudo (như bạn nói, người dùng tương ứng với id người dùng thực của quá trình). Quan điểm sudolà cấp các đặc quyền bổ sung cho người dùng cụ thể (như được xác định bởi cấu hình trong sudoers), mà không cần những người dùng đó phải cung cấp bất kỳ xác thực nào khác ngoài chính họ. Tuy nhiên, sudo không kiểm tra mà người dùng chạy sudothực sự là những người mà họ tự xưng là, và nó là bằng cách yêu cầu mật khẩu của họ (hoặc bất kỳ xác thực cơ chế được thiết lập cho sudo, thường sử dụng PAM - vì vậy điều này có thể liên quan đến một dấu vân tay, hoặc hai yếu tố xác thực, v.v.).

    sudokhông nhất thiết phải cấp quyền trở thành root, nó có thể cấp nhiều đặc quyền khác nhau. Bất kỳ người dùng nào được phép trở thành root bằng cách chỉ sudoerscó thể sử dụng xác thực của chính họ; nhưng người dùng không được phép, không thể (ít nhất, không sử dụng sudo). Điều này không được thi hành bởi chính Linux, mà bởi sudo(và thiết lập xác thực của nó).

  2. sudothực sự yêu cầu mật khẩu sau khi nó bắt đầu chạy; nó không thể làm khác ( tức là nó không thể làm gì trước khi bắt đầu chạy). Điểm sudoyêu cầu mật khẩu, mặc dù là root, là để xác minh danh tính người dùng đang chạy (trong cấu hình thông thường của nó).


12

sudothường hỏi mật khẩu của người dùng đang chạy nó, mặc dù điều này có thể được cấu hình :

Không giống như su(1), khi sudoersyêu cầu xác thực, nó xác nhận thông tin đăng nhập của người dùng, chứ không phải thông tin xác thực của người dùng đích (hoặc gốc). Điều này có thể được thay đổi thông qua rootpw, targetpwrunaspwcờ, được mô tả sau.

Thiết lập rootpwđã sudoluôn yêu cầu mật khẩu gốc của, targetpwyêu cầu mật khẩu của người sử dụng sudocuối cùng sẽ chạy chương trình như, và runaspwyêu cầu mật khẩu của tập người dùng trong runas_default.

Một sudonhị phân được thiết lập như thế thực sự có thể được bắt đầu với quyền root bởi bất kỳ người dùng nào. Giả sử sudokhông có bất kỳ lỗi nào với mã xác thực của nó, điều đó tự nó sẽ không còn quan trọng nữa.

Tương tự như vậy, bất kỳ quá trình nào cũng có thể thực thi mã trong chế độ kernel, bằng cách gọi bất kỳ cuộc gọi hệ thống nào, nói open(). (điều đó không giống với mã không gian người dùng như root.) Miễn là kernel không có lỗi, họ sẽ không thể chạy mã tùy ý.


8

Từ (các) dòng đầu tiên của man sudo:

MÔ TẢ
sudo cho phép người dùng được phép thực thi một lệnh như siêu người dùng hoặc người dùng khác, như được chỉ định bởi chính sách bảo mật. ID người dùng thực (không hiệu quả) của người dùng được sử dụng để xác định tên người dùng cần truy vấn chính sách bảo mật.

Vì thế:

  1. ID người dùng thực (không hiệu quả) của người dùng được sử dụng ...
  2. Có, bất kỳ người dùng ( được phép ) nào cũng có thể có được (các) đặc quyền bổ sung (hoặc) khác bằng cách chạy sudo và sau đó cung cấp xác thực (được định cấu hình ) cần thiết. Cả hai được phép và cấu hình được đặt trong tập tin sudoers.

  3. Linux có thể hạn chế điều đó trên một số người dùng không?
    Vâng, nó có thể, nhưng nó không. Linux được thiết lập để cho phép nhị phân sudo đưa ra quyết định dựa trên bộ quy tắc (chính sách bảo mật) bên trong chương trình sudo và bên trong tệp /etc/sudoers. Thông thường, các tệp khác (cũng / thay vào đó) có thể được sử dụng.

Từ man setresuid:

MÔ TẢ
setresuid () đặt ID người dùng thực, ID người dùng hiệu quả và ID người dùng đã lưu đã lưu của quy trình gọi.

  1. Cách duy nhất để có được quyền siêu người dùng được cấp bởi kernel là chạy một chương trình suid. Nó không thể khác được. Đó là cách Linux đã chọn để cấp quyền siêu người dùng.

  2. Sau khi kernel đã tải một tệp thực thi mà bất kỳ người dùng nào khác không thể sửa đổi được và quyết định nếu và quyền nào để cấp.


-1

Bổ sung cho các câu trả lời tốt khác về sudo:

sucho phép bạn có hiệu quả trở thành một người dùng khác. Trên máy tính của riêng tôi, tôi không chạy như một quản trị viên để sử dụng hàng ngày - điều đó có nghĩa là, trong số những thứ khác, tôi không thể (trực tiếp) sử dụng sudo. Nếu tôi muốn sử dụng sudo, tôi có thể sử dụng suđể "trở thành" người dùng Quản trị viên, và sau đó sử dụng vai trò đó sudo. Trong tình huống đó, tôi kết thúc việc nhập mật khẩu của tài khoản Quản trị viên hai lần - một lần khi tôi chạy suvà một lần khi tôi chạy sudo.

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.