Điểm:4

Xác thực khóa công khai SSH bằng trình xác thực google vẫn yêu cầu mật khẩu

lá cờ de

Tôi đang cố bật 2FA bằng ssh bằng libpam-google-authenticator. Không phải tất cả người dùng đều cần bật trình xác thực. Mọi người đều sử dụng khóa công khai ssh và không ai có mật khẩu. Tôi đang chạy Debian buster và tôi cũng đã thử libpam-google-authenticator từ bullseye.

Vấn đề của tôi là bất kể tôi đặt gì trong cấu hình PAM, người dùng không bật trình xác thực sẽ không bao giờ đăng nhập trực tiếp mà luôn bị yêu cầu nhập mật khẩu.

Tôi đã cài đặt libpam-google-authenticator và định cấu hình /etc/ssh/sshd_config với:

Mật khẩu Xác thực không
ChallengeResponseXác thực có
AuthenticationMethods khóa công khai, bàn phím tương tác
Mật khẩu Xác thực không
Giấy phépEmptyMật khẩu không

Tôi chưa thể tìm ra cấu hình PAM chính xác để người dùng không có tệp .google_authenticator vẫn đăng nhập. Tùy thuộc vào những gì tôi sử dụng, người dùng được nhắc nhập mật khẩu (họ không có mật khẩu) hoặc không được phép vào cả.

Trong /etc/pam.d/sshd tôi đã thử (như thế này Đang cố gắng lấy SSH bằng khóa chung (không có mật khẩu) + trình xác thực google hoạt động trên Ubuntu 14.04.1):

#@bao gồm xác thực chung
yêu cầu xác thực pam_google_authenticator.so gỡ lỗi nullok

Trong trường hợp này, người dùng không có thiết lập trình xác thực sẽ bị từ chối với lần gỡ lỗi sau;

Ngày 05 tháng 8 15:11:18 <host> sshd(pam_google_authenticator)[746624]: gỡ lỗi: bắt đầu google_authenticator cho "<user>"
Ngày 05 tháng 8 15:11:18 <host> sshd(pam_google_authenticator)[746624]: gỡ lỗi: kết thúc google_authenticator cho "<user>" Kết quả: Giá trị trả về phải được bỏ qua bởi công văn PAM
ngày 05 tháng 8 15:11:18 <máy chủ> sshd[746620]: lỗi: PAM: Quyền bị từ chối đối với <người dùng> từ <IP>

pam_permit là cần thiết để thiết lập trường hợp dự phòng?

Tôi cũng đã thử nhiều cách kết hợp khác nhau yêu cầu xác thựcxác thực đủ trước và sau @include chung-auth nhưng tất cả đều dẫn đến việc người dùng không có trình xác thực được yêu cầu nhập mật khẩu và đôi khi người dùng CÓ trình xác thực cũng được yêu cầu nhập mật khẩu.

Có ai có một công thức để làm cho công việc này?

lá cờ in
Ok tôi nghĩ rằng cuối cùng tôi cũng hiểu rõ hơn về vấn đề của bạn. Tôi đã đọc một số, và bây giờ tôi có một câu hỏi. Có phải tất cả người dùng cần pubkey+totp trong một nhóm cụ thể hay có thể là trong một nhóm không? Hoặc có lẽ ngược lại.Có phải tất cả người dùng chỉ là pubkey trong một nhóm không? Bạn có thể đặt các chỉ thị `AuthenticationMethod` khác nhau trong phần `match` trong sshd_config của mình.
Hamish Moffatt avatar
lá cờ de
Tôi có thể làm cho công việc đó. Tuy nhiên, để làm phức tạp thêm mọi thứ, một khi tôi đã làm việc này, tôi muốn cố gắng làm cho yêu cầu TOTP phụ thuộc vào nơi tôi đang kết nối bằng cách sử dụng `pam_access` - nếu tôi đang kết nối từ IP VPN, tôi muốn bỏ qua TOTP. Mặc dù có vẻ như tôi cũng có thể kiểm tra IP bằng cách sử dụng `match` chứ không phải `pam_access` nên có thể sau này nó sẽ hoạt động.
Điểm:2
lá cờ de

Đây là cấu hình làm việc của tôi. Một số người dùng đã bật trình xác thực và một số thì không và chỉ cho phép đăng nhập SSH bằng khóa công khai, không bao giờ được phép sử dụng mật khẩu.

Trong /etc/ssh/sshd_config,

Sử dụngPAM có
Mật khẩu Xác thực không
ChallengeResponseXác thực có
AuthenticationMethods khóa công khai, bàn phím tương tác
Giấy phépEmptyMật khẩu không

Trong /etc/pam.d/sshd,

# Xác thực Un*x tiêu chuẩn.
#@bao gồm xác thực chung

# Yêu cầu trình xác thực, nếu chưa được định cấu hình thì hãy cho phép
yêu cầu xác thực pam_google_authenticator.so gỡ lỗi nullok
yêu cầu xác thực pam_permit.so

@include comon-auth phải bị vô hiệu hóa vì nó bao gồm pam_unix mà tôi không muốn sử dụng. Sau đó, bạn cần pam_permit để xác thực thành công cho người dùng mà không cần trình xác thực (trong đó pam_google_authenticator trả về bỏ qua thay vì vượt qua).

Điều này vẫn không cho phép đăng nhập root bằng khóa ssh; nhật ký sshd

sshd [1244501]: gây tử vong: Lỗi nội bộ: PAM auth đã thành công khi lẽ ra nó phải thất bại

Điều này được thảo luận tại Google Authenticator PAM trên SSH chặn đăng nhập root mà không cần 2FA .

Đã làm việc này như trên, tôi nghĩ việc thực thi 2FA cho một số nhóm nhất định bằng cách sử dụng cấu hình SSH như @zoredache đã đề xuất thực sự tốt hơn. Điều này dễ dàng cho phép bạn đưa vào danh sách trắng một số IP nhất định vì cũng không yêu cầu 2FA. Trong trường hợp này, sshd_config nói ví dụ

Sử dụngPAM có
Mật khẩu Xác thực không
ChallengeResponseXác thực có
#AuthenticationMethods bất kỳ # mặc định
Giấy phépEmptyMật khẩu không

Địa chỉ adm nhóm phù hợp *,!172.16.1.0/24
    AuthenticationMethods khóa công khai, bàn phím tương tác

và /etc/pam.d/ssh nói

 Xác thực Un*x tiêu chuẩn.
#@bao gồm xác thực chung

# Yêu cầu trình xác thực; SSH không nên cho phép bất kỳ người dùng nào không có nó
auth đủ pam_google_authenticator.so gỡ lỗi nullok
auth cần thiết pam_deny.so
NeverEndingQueue avatar
lá cờ cn
Cảm ơn, không có hướng dẫn nào mà tôi tìm thấy đề cập đến: cài đặt `pam_permit` để đặt 2FA là tùy chọn cho người dùng.
Điểm:0
lá cờ in

Tôi không nghĩ rằng bạn cần hoặc muốn bình luận về @include chung-auth. Hoặc ít nhất là tôi đã không làm và nó dường như hoạt động chính xác. Nhưng tôi vẫn chủ yếu thử nghiệm điều này.

Có ai có một công thức để làm cho công việc này?

Không có thời gian để dịch nó sang tập lệnh shell cho bạn, nhưng đây là đoạn trích của một vở kịch ansible có vẻ phù hợp với tôi.Tôi nghi ngờ bạn sẽ có thể làm theo những gì nó đang làm ngay cả khi bạn không sử dụng ansible.

- máy chủ: linux_systems
  nhiệm vụ:

  - tên: Thêm nhóm 'totp'
    tập đoàn:
      tên: totp
      trạng thái: hiện tại
      hệ thống: có

  - name: Tạo thư mục bí mật totp
    tập tin:
      trạng thái: thư mục
      đường dẫn: /var/lib/google-authenticator
      chủ sở hữu: "0"
      nhóm: "0"
      chế độ: "0700"

  - tên: cài đặt libpam-google-authenticator
    đúng cách:
      update_cache: có
      cache_valid_time: '{{ apt_cache_valid_time | mặc định (7200) }}'
      trạng thái: hiện tại
      Tên:
      - libpam-google-xác thực

  - tên: Tạo bí mật cho 'người dùng ví dụ'
    lập luận:
      tạo: /var/lib/google-authenticator/example-user
    vỏ: |
      TOTP_USER=ví dụ-người dùng; \
      trình xác thực google \
        --force --quiet \
        --emergency-codes=10 \
        --dựa trên thời gian \
        --qr-mode=none \
        --allow-tái sử dụng \
        --window-size=3 \
        --rate-limit=4 --rate-time=30 \
        --secret=/var/lib/google-authenticator/${TOTP_USER}

  - tên: cập pam
    tập tin dòng:
      insertafter: '^@bao gồm mật khẩu chung'
      đường dẫn: /etc/pam.d/login
      dòng: 'yêu cầu xác thực pam_google_authenticator.so nullok user=root secret=/var/lib/google-authenticator/${USER}'

  - tên: cập pam
    tập tin dòng:
      insertafter: '^@bao gồm mật khẩu chung'
      đường dẫn: /etc/pam.d/sshd
      dòng: 'yêu cầu xác thực pam_google_authenticator.so nullok user=root secret=/var/lib/google-authenticator/${USER}'

  - tên: cập nhật sshd ChallengeResponseAuthentication
    thông báo: Khởi động lại sshd
    tập tin dòng:
      đường dẫn: /etc/ssh/sshd_config
      regexp: '^ChallengeResponseAuthentication .*'
      dòng: 'ChallengeResponseAuthentication có'

  xử lý:

  - tên: Khởi động lại sshd
    dịch vụ:
      tên: sshd
      trạng thái: khởi động lại
Hamish Moffatt avatar
lá cờ de
Cảm ơn. Nó trông giống như những gì tôi có, ngoại trừ việc bạn đã thêm mô-đun vào sau trong tệp - thực sự ở cuối. Bạn cũng đã thay đổi AuthenticationMethods trong sshd_config để thêm tương tác bàn phím? Tôi chưa bao giờ nhận được bất kỳ lời nhắc nào về mã xác minh nếu không có nó. Nhưng với nó và mô-đun xác thực ở cuối, tôi được yêu cầu nhập mật khẩu. Là common-auth của bạn chưa sửa đổi?
lá cờ in
Theo như nhớ lại, những thay đổi đó là mọi thứ tôi cần từ bản cài đặt Debian buster hiện tại hoàn toàn có sẵn.
Hamish Moffatt avatar
lá cờ de
Tôi không nhận được bất kỳ nỗ lực xác minh TOTP nào mà không sửa đổi Phương thức xác thực trong sshd_config. Tài liệu khác mà tôi đã xem, ví dụ: https://blog.geoghegan.me/linux/setting-up-google-auth-2fa-on-debian cũng bao gồm bước này.
lá cờ in
Bạn đã đúng khi các tài liệu nói điều đó cho ssh. Hầu hết thử nghiệm của tôi cho điều này là thử nghiệm thông tin đăng nhập cục bộ. Bây giờ tôi không chắc mình đã từng thử SSH chưa. SSH của tôi về cơ bản chỉ dựa trên khóa và tôi không lo lắng về ssh cho tài khoản thử nghiệm của mình vì nó không nhận được bất kỳ khóa nào.
Hamish Moffatt avatar
lá cờ de
OK cảm ơn vì đã trả lời.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.