Xác thực ba bước?


9

Tôi đang sử dụng Ubuntu.

Tôi chỉ tự hỏi liệu có thể có libpam-google-Authenticator (cho phép bạn đăng nhập bằng mã được tạo bởi điện thoại của mình không) VÀ xác thực chứng chỉ được thiết lập để hoạt động cùng nhau, và nếu có thể, tôi sẽ làm thế nào thiết lập nó Do đó - để đăng nhập vào tài khoản của tôi, bạn phải có mật khẩu, điện thoại của tôi (và mật mã của nó) VÀ chứng chỉ / khóa riêng và mật khẩu của tôi.

Tôi đã có cả hai để làm việc độc lập nhưng chưa bao giờ có thể khiến họ làm việc cùng nhau. Tôi chắc chắn bằng cách nào đó nó có thể mặc dù.

Cảm ơn.


Thông thường bạn không đạt được nhiều bởi các yếu tố trùng lặp. Trình tạo chứng chỉ và mã phù hợp với yếu tố 'thứ bạn có'. Một mật khẩu phù hợp với "cái gì đó bạn biết". Yếu tố phổ biến khác là "cái gì đó bạn là" (sinh trắc học).
Zoredache

Câu trả lời:


8

Có thể làm điều này bằng cách kết nối các mô-đun PAM lại với nhau. Nhưng trước khi tôi đi vào bất kỳ chi tiết nào:

Cấu hình PAM có thể không chính xác và SILL ngăn bạn đăng nhập vào hệ thống của bạn

Rất may, bạn luôn có thể khởi động vào chế độ người dùng duy nhất và khắc phục sự cố, nhưng chỉ cần cảnh báo rằng PAM không phải là thứ bạn muốn gây rối hơn mức cần thiết.

Dù sao, ý tưởng đằng sau điều này là có thể sử dụng các mô-đun PAM xếp chồng để đảm bảo rằng pam-google-authenticator, pam_unix(điều này kiểm tra mật khẩu của bạn) và mô-đun chứng chỉ đều phải thành công để cho phép bạn truy cập. Theo mặc định, PAM được cấu hình để cho phép bất kỳ mô-đun xác thực nào xác thực bạn, bỏ qua các mô-đun khác.

Trong /etc/pam.d/common-auth, bạn sẽ thấy ở gần đầu một dòng trông tương tự như sau:

auth    [success=2 default=ignore]  pam_unix.so nullok_secure try_first_pass

Điều này nói với PAM rằng sẽ pam_unix.sothành công, nó sẽ bỏ qua hai quy tắc tiếp theo (thường là một mô-đun xác thực khác và sau đó pam_deny.so) và tiến tới các mô-đun tùy chọn. Tuy nhiên, nếu mô-đun thất bại, thì nó sẽ bị bỏ qua và điều khiển sẽ chuyển sang mô-đun tiếp theo trong chuỗi. Điều này tiếp tục xuống từng mô-đun xác thực cho đến khi kiểm soát bỏ qua khối tùy chọn hoặc PAM nhấn pam_deny.so và không thành công ngay tại đó.

Điều này có thể được tận dụng để đảm bảo rằng pam-google-authenticator, pam_unix.sovà mô-đun PAM chứng chỉ của bạn đều phải thành công để cho phép bạn truy cập. Tôi không biết tên của mô-đun xác thực Google hoặc mô-đun chứng chỉ bạn đang sử dụng, nhưng bạn sẽ có thể tìm thấy chúng trong tệp xác thực chung của bạn. Vì vậy, bằng cách đặt một cái gì đó như thế này ở đầu:

auth    requisite   pam_unix.so nullok_secure
auth    requisite   pam_google_authenticator.so
auth    requisite   pam_certificate_auth.so
auth    [success=<n>]   pam_permit.so

Thay thế <n>bằng số lượng mô-đun giữa mô-đun pam_permit.so ở đây và pam_permit.somô-đun tiếp theo - nói cách khác, điều này nên được đặt thành mô-đun auth hàng đầu nhất [thành công = n mặc định = bỏ qua] mã + 1. Cú pháp này hơi thú vị , nhưng về cơ bản bỏ qua các mô-đun auth sau khi các mô-đun trên đã thành công.

Tất nhiên, bạn có thể tự hỏi làm thế nào để giới hạn xác thực ba bước này chỉ trong tài khoản người dùng của bạn. Điều này có thể được thực hiện với một pam_succeed_if.somô-đun và nên được chèn phía trên khối xác thực ba bước được mô tả ở trên:

auth    [success=ignore default=4]  pam_succeed_if.so user = <username>

Nơi <username>được thay thế bởi tên người dùng của bạn. Dòng này chỉ đơn giản nói rằng pam_succeed_if.so thành công (còn gọi là tên người dùng của bạn khớp với tên người dùng trên dòng đó) thì PAM nên tiếp tục với các mô-đun tiếp theo, đó là các mô-đun auth ba bước. Mặt khác, PAM nên chuyển sang các mô-đun thực, cách mô-đun này 4 mô-đun.

Để khớp nhiều thứ, ví dụ như thành viên của một nhóm cùng với một tên người dùng nhất định, ví dụ: phải sử dụng nhiều dòng:

auth    [success=1 default=ignore]  pam_succeed_if.so user = <username>
auth    [success=ignore default=4]  pam_succeed_if.so user ingroup <group>

Trước khi thực hiện bất kỳ thao tác nào trong số này, tôi sẽ sao lưu tệp chung-auth và cũng tự làm quen với chế độ người dùng đơn và cách khôi phục tệp cũ trong trường hợp khẩn cấp. Cấu hình này chưa được tôi kiểm tra, nhưng nó sẽ hoạt động.

Để thử nghiệm điều này lần đầu tiên, hãy mở một hoặc hai vỏ gốc và chỉ để chúng một mình. Chúng hoạt động như dự phòng trong trường hợp có bất cứ điều gì sai, vì bạn có thể dễ dàng thay thế auth chung bằng bản sao lưu. Sau đó, thực hiện những thay đổi này. Tiếp theo, hãy thử sử dụng suđể đăng nhập vào tài khoản người dùng của bạn - bạn cần trải qua quy trình xác thực ba bước.

Tài liệu đầy đủ cho pam_succeed_if.somô-đun có thể được tìm thấy tại http://linux.die.net/man/8/pam_succeed_if


Câu trả lời tuyệt vời! Nếu tôi có thể nâng cao điều này hơn một lần, tôi sẽ làm thế.
Aaron Miller

Cảm ơn! Mặc dù - Đối với đăng nhập giấy chứng nhận tôi thêm khóa công khai của tôi vào .ssh / authorized_keys (sử dụng RSAAuthentication và các thiết lập PubkeyAuthentication trong sshd_config) và cho mã OTP Tôi đang sử dụng pam_google_authenticator - google-authenticator.googlecode.com/hg . Vì vậy, làm thế nào sẽ làm việc?
Jesse W

@JesseW Để làm việc này, bạn cần đặt SSHD để sử dụng PAM cũng như khóa chung. Mặc dù tôi không chắc về chi tiết cụ thể, nhưng chắc chắn bạn sẽ cần phải đặt ChallengeResponseAuthenticationUsePAM'có', sau đó đặt các dòng chi tiết trong câu trả lời của tôi ở trên thành /etc/pam.d/sshd hoặc /etc/pam.d/common -Auth, tùy thuộc vào việc bạn muốn thực hiện việc này cho tất cả các lần đăng nhập hay chỉ SSH. Hãy nhớ xóa dòng phụ 'pam_cert ve_auth.so' và sửa đổi dòng [thành công = <n>.
Xenopathic

2

Tôi đọc bài đăng này và nghĩ rằng nó nghe có vẻ hay - đây là cách tôi có được xác thực ba yếu tố để hoạt động. Tôi đã viết một bài blog về nó ở đây .

Về cơ bản, tôi đã thiết lập Google Authenticator và mật khẩu trong PAM, sau đó thiết lập xác thực khóa chung trong OpenSSH (điều này bỏ qua hai cái khác) và cuối cùng được OpenSSH yêu cầu xác thực thông qua PAM (dòng cuối cùng)

Từ / etc / ssh / sshd_conf

PubkeyAuthentication yes
ChallengeResponseAuthentication yes
PasswordAuthentication no
UsePAM yes
AuthenticationMethods publickey,keyboard-interactive

1

Chỉ Pubkey + GoogleAuth bạn phải thêm vào đầu /etc/pam.d/sshd của bạn

#auth    requisite    pam_unix.so nullok_secure #if you want password, too :)
auth    requisite    pam_google_authenticator.so
auth    [success=2]  pam_permit.so

Tôi cho rằng bạn có OpenSSH> = 6.2 và sshd_config đã chỉnh sửa

Để bảo mật hoang tưởng hơn, hãy thêm một số cấu hình bổ sung: D

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.