Hiểu PAM và NSS


21

Trong những ngày qua tôi đã thiết lập một số hệ thống Linux với xác thực LDAP và mọi thứ đều hoạt động tốt, nhưng vẫn còn một số điều tôi không thể thực sự hiểu về NSS và PAM, sau rất nhiều nghiên cứu.

Trích dẫn:

NSS cho phép quản trị viên chỉ định danh sách các nguồn nơi tệp xác thực, tên máy chủ và thông tin khác sẽ được lưu trữ và tìm kiếm

PAM là một tập hợp các thư viện cung cấp nền tảng xác thực có thể định cấu hình cho các ứng dụng và hệ điều hành bên dưới

Điều tôi không hiểu là cách PAM và NSS hoạt động và tương tác với nhau. Trong cuốn sách này , kiến ​​trúc được giải thích khá tốt: Tôi định cấu hình PAM để sử dụng pam_ldapcho tài khoản LDAP và pam_unixcho tài khoản cục bộ, sau đó tôi định cấu hình nsswitch.confđể tìm nạp thông tin từ các tệp cục bộ và LDAP.

Nếu tôi đã hiểu chính xác thì LDAP được sử dụng hai lần: lần đầu tiên pam_ldapvà sau đó bởi NSS được gọi là từ pam_unix. Có đúng không? LDAP có thực sự được sử dụng hai lần? Nhưng tại sao tôi cần cấu hình cả NSS và PAM? Giải thích của tôi là PAM thực hiện các nhiệm vụ khác với NSS và nó được sử dụng bởi các chương trình khác. Nhưng, sau đó, chỉ nên sử dụng NSS hoặc chỉ PAM, như tôi đã đọc trong trang này .

Vì vậy, tôi đã thử nghiệm một chút và lần đầu tiên tôi đã cố gắng xóa LDAP khỏi nsswitch.conf(và xác thực đã dừng hoạt động như thể chỉ pam_ldap là không đủ để thực hiện công việc). Sau đó, tôi kích hoạt lại LDAP trong NSS và tôi đã xóa nó khỏi cấu hình PAM (lần này mọi thứ đều hoạt động tốt, như thể pam_ldaplà vô dụng và NSS là đủ để xác thực người dùng).

Có ai có thể giúp tôi làm rõ điều này? Rất cám ơn trước.

CẬP NHẬT

Tôi vừa mới thử một cái gì đó. Tôi đã xóa lại tất cả các pam_ldapmục trong tất cả các trường cấu hình pam và tôi cũng đã xóa shadow: ldapkhỏi đó nsswitch.conf. Như bây giờ trong tất cả các hệ thống chỉ có các dòng: passwd: ldap filesgroup: ldap filestrong nsswitch.conf. Chà ... đăng nhập với người dùng LDAP hoạt động hoàn hảo, hai dòng (cộng /etc/ldap.conf) đó là đủ để định cấu hình xác thực LDAP.

Từ kiến ​​thức PAM của tôi độc lập với NSS, nhưng các thử nghiệm của tôi cho thấy không phải vậy. Vì vậy, tôi tự hỏi mình có thể vô hiệu hóa hoàn toàn NSS và chỉ sử dụng PAM không?


Tôi không thấy cập nhật của bạn. Vui lòng chạy các lệnh sau và báo cáo kết quả của bạn, thay thế LDAPUSER bằng người dùng mà bạn nghĩ chỉ được định cấu hình trong LDAP. getent shadow | grep LDAPUSER grep LDAPUSER /etc/shadow
Andrew B

Câu trả lời:


25

Nó giúp phá vỡ mọi thứ như thế này trong đầu của bạn:

  • NSS - Một hệ thống dựa trên mô-đun để kiểm soát cách thức các cơ sở dữ liệu cấp hệ điều hành khác nhau được lắp ráp trong bộ nhớ. Điều này bao gồm (nhưng không giới hạn) passwd, group, shadow(điều này rất quan trọng để lưu ý), và hosts. Tra cứu UID sử dụng passwdcơ sở dữ liệu và tra cứu GID sử dụng groupcơ sở dữ liệu.

  • PAM - Một hệ thống dựa trên mô-đun để cho phép xác thực và kế toán dựa trên dịch vụ. Không giống như NSS, bạn không mở rộng cơ sở dữ liệu hiện có; Các mô-đun PAM có thể sử dụng bất kỳ logic nào họ thích, mặc dù thông tin đăng nhập shell vẫn phụ thuộc vào passwdgroupcơ sở dữ liệu của NSS. (bạn luôn cần tra cứu UID / GID)

Sự khác biệt quan trọng là PAM không làm gì cả. Nếu một ứng dụng không liên kết với thư viện PAM và thực hiện các cuộc gọi đến nó, PAM sẽ không bao giờ được sử dụng. NSS là cốt lõi của hệ điều hành và cơ sở dữ liệu khá phổ biến đối với hoạt động bình thường của HĐH.

Bây giờ chúng ta đã có cách đó, đây là đường cong: trong khi pam_ldap là cách phổ biến để xác thực chống lại LDAP, đó không phải là cách duy nhất.

  • Nếu shadowchỉ vào dịch vụ ldap bên trong /etc/nsswitch.conf, mọi xác thực chạy trên cơ sở dữ liệu bóng sẽ thành công nếu các thuộc tính cho ánh xạ trường bóng đó (đặc biệt là trường mật khẩu được mã hóa) có trong LDAP và sẽ cho phép đăng nhập.
    • Đến lượt điều này có nghĩa là pam_unix.socó khả năng dẫn đến xác thực đối với LDAP, vì nó xác thực đối với cơ sở dữ liệu bóng. (được quản lý bởi NSS và có thể trỏ vào LDAP)
  • Nếu một mô-đun PAM thực hiện các cuộc gọi đối với một daemon mà lần lượt truy vấn cơ sở dữ liệu LDAP (giả sử pam_sss.so, đó là hook sssd), có thể LDAP sẽ được tham chiếu.

Rất cám ơn, tôi biết rằng nsswitch.conf + pam_unix có thể tự mình làm tất cả công việc. Nhưng PAM cũng có thể làm như vậy, vì nó độc lập, như bạn đã viết. Tôi hiểu rằng mô-đun pam_ldap phải đủ để xác thực người dùng đối với máy chủ ldap. Phải không?
ColOfAbRiX

6
Xác thực có, nhưng trừ khi bạn có cách khác để lấy thông tin người dùng (local / etc / passwd hoặc bất cứ điều gì), bạn vẫn cần một cách để tìm hiểu thành viên nhóm, thư mục chính, v.v. Bạn vẫn còn nhầm lẫn giữa việc xác thực và liệt kê ủy quyền / thuộc tính.
TheFiddlerWins

1
@ColOfAbRiX TheFIddlerWins là chính xác. Nó đủ để xác thực , nhưng bạn vẫn cần một cách để tra cứu tư cách thành viên UID + GID như tôi đã lưu ý. Chúng được lấy từ passwdgroupcơ sở dữ liệu (NSS), có nghĩa là chúng phải nằm trên hệ thống cục bộ ( /etc/passwd+ /etc/group) hoặc thu được thông qua ldapmô-đun NSS.
Andrew B

3
Đây là một cách giúp bạn hiểu: chạy getent passwdgetent groupbật LDAP cho cả hai cơ sở dữ liệu /etc/nsswitch.conf. Sau đó vô hiệu hóa LDAP trong tệp đó và chạy lại cả hai lệnh. getentlà một lệnh để bán phá giá cơ sở dữ liệu NSS.
Andrew B

Cuối cùng tôi đã có thể hiểu mọi thứ với một chút công việc. Cảm ơn các bạn!
ColOfAbRiX

1

NSS có mặt để liệt kê thông tin về các dịch vụ / người dùng (bạn thuộc nhóm nào, thư mục chính của bạn ở đâu, v.v.). PAM xác định những gì cần làm về thông tin đó.

Nếu bạn muốn sử dụng LDAP để xác thực, bạn cần pam_ldap. Nếu bạn đang sử dụng một cái gì đó khác (tài khoản cục bộ, Kerberos, v.v.) thì bạn có thể không.

Vì vậy, họ làm những điều khác nhau. NSS có được thông tin, PAM xác định ai được phép làm những gì một khi thông tin đó được lấy.


Cảm ơn, nhưng vấn đề là nó không hoạt động theo cách đó, ít nhất là trong hệ thống của tôi :) Lúc đầu tôi cũng hiểu như vậy nhưng sau đó tôi đã cố gắng xóa tất cả các mục pam_ldap trong xác thực PAM và LDAP vẫn hoạt động (và vô hiệu hóa bộ đệm). Điều này làm tăng sự nhầm lẫn của tôi :)
ColOfAbRiX

Làm thế nào để bạn xác minh rằng bạn đang xác thực qua pam_ldap sau khi xóa nó? Xin vui lòng gửi nội dung chung của bạn-auth. Tôi không chắc chắn về các đường dẫn trong SUSE nhưng để trả lời phần đầu của câu hỏi thứ ba của bạn, ngay cả khi pam_ldap hoạt động, bạn cần một số cách để hệ thống biết bạn là ai - điều này được cung cấp bởi NSS
TheFiddlerWins

Tôi xin lỗi, ý tôi là sau khi gỡ bỏ pam_ldap, LDAP auth hoạt động mà không có nó, tôi đoán nó đã hoạt động thông qua NSS. Tệp common-authchỉ chứa pam_env, pam_unix và pam_deny.
ColOfAbRiX

Điều đó không có ý nghĩa, làm thế nào bạn xác nhận LDAP auth hoạt động?
TheFiddlerWins

Đăng nhập bằng tài khoản LDAP và theo dõi nhật ký của máy chủ ldap. nscd (bộ nhớ đệm) bị vô hiệu hóa
ColOfAbRiX
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.