PAM - cờ kiểm soát bắt buộc và đủ


14

Tôi đang học PAM và tôi hơi khó hiểu về ý nghĩa của một số cờ điều khiển. Từ tài liệu của Red Hat, chúng tôi có:


  • thất bại bắt buộc của PAM như vậy cuối cùng sẽ dẫn đến thất bại trả về PAM-API nhưng chỉ sau khi các mô-đun xếp chồng còn lại (đối với dịch vụ và loại này) đã được gọi

  • cần thiết
    như được yêu cầu, tuy nhiên, trong trường hợp mô-đun như vậy trả về lỗi, điều khiển được trả lại trực tiếp cho ứng dụng.

  • đủ
    thành công của một mô-đun như vậy là đủ để đáp ứng các yêu cầu xác thực của chồng mô-đun (nếu một mô-đun được yêu cầu trước đó đã thất bại thì thành công của mô-đun này bị bỏ qua). Một thất bại của mô-đun này không được coi là gây tử vong cho việc đáp ứng ứng dụng mà loại này đã thành công. Nếu mô-đun thành công, khung PAM trả về thành công cho ứng dụng ngay lập tức mà không cần thử bất kỳ mô-đun nào khác.

Vì vậy, theo hiểu biết của tôi, nếu một mô-đun requisitebị lỗi, toàn bộ chồng mô-đun sẽ không được phân tích cú pháp và điều khiển sẽ quay trở lại ứng dụng ngay lập tức. Nếu một mô-đun sufficientthành công, phần còn lại của mô-đun ngăn xếp sẽ không được phân tích cú pháp và điều khiển sẽ trở lại ứng dụng ngay lập tức. Nếu một mô-đun requiredthất bại, toàn bộ ngăn xếp sẽ được phân tích cú pháp.

Bây giờ, tôi không thể hiểu hành vi sẽ là gì khi một mô-đun nhất định requiredthất bại và một mô-đun khác sufficientthành công.

Câu trả lời:


11

PAM tiến hành thông qua các mục trên ngăn xếp theo thứ tự. Nó chỉ lưu giữ ký ức về trạng thái của nó (thành công hay bị từ chối, với thành công có nghĩa là thành công cho đến nay), chứ không phải là cách nó đạt đến trạng thái đó.

Nếu một mục được đánh dấu sufficientthành công, thư viện PAM sẽ ngừng xử lý ngăn xếp đó. Điều này xảy ra cho dù có các requiredmục trước đó hay không. Tại thời điểm này, PAM trả về trạng thái hiện tại: thành công nếu không có requiredmục nào trước đó bị lỗi, nếu không thì bị từ chối.

Tương tự, nếu một mục được đánh dấu requisitekhông thành công, thư viện PAM sẽ ngừng xử lý và trả về lỗi. Tại thời điểm đó, không liên quan cho dù một requiredmục trước đó có thất bại hay không.

Nói cách khác, requiredkhông nhất thiết phải khiến toàn bộ ngăn xếp được xử lý. Nó chỉ có nghĩa là tiếp tục đi.


Nhưng nếu bất kỳ requiredmục nào thất bại, tại sao PAMcần phải tiếp tục đi qua ngăn xếp? nếu cuối cùng nó sẽ thất bại?
Mohammed Noureldin

1
@MohammedNoureldin Ngay cả khi một lần đăng nhập thất bại, một số việc phải được thực hiện, chẳng hạn như đăng nhập, thêm thời gian chờ chống lại các nỗ lực vũ phu, v.v. Ngoài ra, hệ thống thường không tiết lộ lý do chính xác cho sự thất bại, ví dụ: nếu tìm kiếm Tên người dùng không thành công sau đó người dùng vẫn được nhắc nhập mật khẩu.
Gilles 'SO- ngừng trở nên xấu xa'

Thứ tự là thứ tự mà chúng được liệt kê trong cấu hình?
OrangeDog

@OrangeDog Có. Mô-đun được liệt kê trên dòng đầu tiên được thực thi, sau đó dòng thứ hai được thực thi (hoặc bị bỏ qua tùy thuộc vào kết quả của dòng đầu tiên), v.v.
Gilles 'SO- ngừng trở nên xấu xa'

1

Theo tôi, một requiredcờ điều khiển phải luôn thành công để mô-đun thành công.

Một sufficientmô-đun được gắn cờ được bỏ qua nếu nó thất bại. Nếu nó thành công và không có requiredmô-đun được gắn cờ nào ở trên đã thất bại thì không có mô-đun nào cùng loại phải được kiểm tra và mô-đun được coi là thành công. Về cơ bản, requiredcờ có mức ưu tiên cao hơn sufficientcờ nhưng cờ sau có khả năng dừng kiểm tra phần còn lại của chúng nếu các cờ trước requiredthành công.

Thí dụ:

1 auth       required     /lib/security/pam_nologin.so
2 auth       required     /lib/security/pam_securetty.so
3 auth       required     /lib/security/pam_env.so
4 auth       sufficient   /lib/security/pam_rhosts_auth.so
5 auth       required     /lib/security/pam_stack.so service=system-auth

Nếu dòng 1, 2, 3 và 4 thành công thì dòng 5 có thể được bỏ qua và mô-đun auththành công. Nếu dòng 4 không thành công, nó sẽ bị bỏ qua và dòng 5 được chọn. Nếu bất kỳ dòng 1, 2, 3 nào bị lỗi thì dòng 4 không được tính đến.


1
Tôi nghĩ câu hỏi của anh ấy là điều gì xảy ra nếu 1 thất bại và 2-4 thành công. 5 có được chạy không? Nếu 1 đã thành công, 5 sẽ không được chạy. Hay nói cách khác, "dừng lại sau khi đủ thành công" có áp dụng nếu một mô-đun yêu cầu trước đó không thành công?
cjm

Không, mô-đun auth sẽ thất bại với sự kết hợp như vậy.
dsmsk80

Câu hỏi không phải là liệu ủy quyền sẽ thất bại. Nó sẽ. Câu hỏi đặt ra là liệu mô-đun 5 sẽ chạy trước khi lỗi đó được báo cáo cho ứng dụng.
cjm
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.