Chúng tôi quy định quy trình truy cập khẩn cấp vào máy chủ SSH bằng khóa phần cứng

Chúng tôi quy định quy trình truy cập khẩn cấp vào máy chủ SSH bằng khóa phần cứng

Trong bài đăng này, chúng tôi sẽ phát triển quy trình truy cập khẩn cấp vào máy chủ SSH bằng khóa bảo mật phần cứng ngoại tuyến. Đây chỉ là một cách tiếp cận và bạn có thể điều chỉnh nó cho phù hợp với nhu cầu của mình. Chúng tôi sẽ lưu trữ tổ chức cấp chứng chỉ SSH cho máy chủ của mình trên khóa bảo mật phần cứng. Lược đồ này sẽ hoạt động trên hầu hết mọi OpenSSH, bao gồm cả SSH với đăng nhập một lần.

Tất cả những điều này là để làm gì? Được rồi, đây là lựa chọn cuối cùng. Đây là một cửa sau cho phép bạn truy cập vào máy chủ của mình khi vì lý do nào đó mà không có cách nào khác hoạt động được.

Tại sao nên sử dụng chứng chỉ thay vì khóa chung/riêng để truy cập khẩn cấp?

  • Không giống như khóa công khai, chứng chỉ có thể có thời hạn sử dụng rất ngắn. Bạn có thể tạo chứng chỉ có giá trị trong 1 phút hoặc thậm chí 5 giây. Sau khoảng thời gian này, chứng chỉ sẽ không còn sử dụng được cho các kết nối mới. Đây là lý tưởng cho việc truy cập khẩn cấp.
  • Bạn có thể tạo chứng chỉ cho bất kỳ tài khoản nào trên máy chủ của mình và nếu cần, hãy gửi chứng chỉ “một lần” đó cho đồng nghiệp.

Bạn cần gì

  • Khóa bảo mật phần cứng hỗ trợ khóa thường trú.
    Khóa thường trú là khóa mật mã được lưu trữ hoàn toàn trong khóa bảo mật. Đôi khi chúng được bảo vệ bằng mã PIN chữ và số. Phần công khai của khóa thường trú có thể được xuất từ ​​khóa bảo mật, tùy chọn cùng với bộ xử lý khóa riêng. Ví dụ: Khóa USB dòng Yubikey 5 hỗ trợ khóa thường trú. Chúng tôi khuyên rằng chúng chỉ dành cho mục đích truy cập khẩn cấp vào máy chủ. Đối với bài đăng này, tôi sẽ chỉ sử dụng một khóa, nhưng bạn nên có một khóa bổ sung để dự phòng.
  • Một nơi an toàn để lưu trữ những chìa khóa đó.
  • OpenSSH phiên bản 8.2 trở lên trên máy tính cục bộ của bạn và trên máy chủ mà bạn muốn có quyền truy cập khẩn cấp. Ubuntu 20.04 được cài sẵn OpenSSH 8.2.
  • (tùy chọn, nhưng được khuyến nghị) Công cụ CLI để kiểm tra chứng chỉ.

Đào tạo

Trước tiên, bạn cần tạo cơ quan cấp chứng chỉ sẽ nằm trên khóa bảo mật phần cứng. Chèn key và chạy:

$ ssh-keygen -t ecdsa-sk -f sk-user-ca -O resident -C [security key ID]

Như một nhận xét (-C) tôi đã chỉ ra [email được bảo vệ]để bạn không quên khóa bảo mật mà tổ chức phát hành chứng chỉ này thuộc về.

Ngoài việc thêm khóa vào Yubikey, hai tệp sẽ được tạo cục bộ:

  1. sk-user-ca, một mã điều khiển khóa đề cập đến khóa riêng được lưu trong khóa bảo mật,
  2. sk-user-ca.pub, đây sẽ là khóa chung cho cơ quan cấp chứng chỉ của bạn.

Nhưng đừng lo lắng, Yubikey lưu trữ một khóa riêng khác không thể lấy lại được. Vì vậy, mọi thứ ở đây đều đáng tin cậy.

Trên máy chủ, với quyền root, hãy thêm (nếu bạn chưa có) phần sau vào cấu hình SSHD của bạn (/etc/ssh/sshd_config):

TrustedUserCAKeys /etc/ssh/ca.pub

Sau đó trên Máy chủ, thêm khóa chung (sk-user-ca.pub) vào /etc/ssh/ca.pub

Khởi động lại daemon:

# /etc/init.d/ssh restart

Bây giờ chúng ta có thể thử truy cập vào máy chủ. Nhưng trước tiên chúng ta cần có chứng chỉ. Tạo một cặp khóa sẽ được liên kết với chứng chỉ:

$ ssh-keygen -t ecdsa -f emergency

Cặp chứng chỉ và SSH
Đôi khi, việc sử dụng chứng chỉ để thay thế cho cặp khóa công khai/riêng tư là điều rất hấp dẫn. Nhưng chỉ chứng chỉ thôi thì không đủ để xác thực người dùng. Mỗi chứng chỉ cũng có một khóa riêng được liên kết với nó. Đây là lý do tại sao chúng ta cần tạo cặp khóa "khẩn cấp" này trước khi cấp cho mình chứng chỉ. Điều quan trọng là chúng tôi hiển thị chứng chỉ đã ký cho máy chủ, cho biết cặp khóa mà chúng tôi có khóa riêng.

Vì vậy, trao đổi khóa công khai vẫn còn tồn tại và tốt đẹp. Điều này hoạt động ngay cả với chứng chỉ. Chứng chỉ chỉ đơn giản là loại bỏ nhu cầu máy chủ lưu trữ khóa chung.

Tiếp theo, tự tạo chứng chỉ. Tôi cần ủy quyền người dùng Ubuntu trong khoảng thời gian 10 phút. Bạn có thể làm theo cách của bạn.

$ ssh-keygen -s sk-user-ca -I test-key -n ubuntu -V -5m:+5m emergency

Bạn sẽ được yêu cầu ký vào chứng chỉ bằng dấu vân tay của mình. Bạn có thể thêm tên người dùng bổ sung được phân tách bằng dấu phẩy, ví dụ -n ubuntu,carl,ec2-user

Thế là xong, bây giờ bạn đã có chứng chỉ! Tiếp theo bạn cần chỉ định các quyền chính xác:

$ chmod 600 emergency-cert.pub

Sau này, bạn có thể xem nội dung chứng chỉ của mình:

$ step ssh inspect emergency-cert.pub

Đây là những gì của tôi trông giống như:

emergency-cert.pub
        Type: [email protected] user certificate
        Public key: ECDSA-CERT SHA256:EJSfzfQv1UK44/LOKhBbuh5oRMqxXGBSr+UAzA7cork
        Signing CA: SK-ECDSA SHA256:kLJ7xfTTPQN0G/IF2cq5TB3EitaV4k3XczcBZcLPQ0E
        Key ID: "test-key"
        Serial: 0
        Valid: from 2020-06-24T16:53:03 to 2020-06-24T17:03:03
        Principals:
                ubuntu
        Critical Options: (none)
        Extensions:
                permit-X11-forwarding
                permit-agent-forwarding
                permit-port-forwarding
                permit-pty
                permit-user-rc

Ở đây khóa chung là khóa khẩn cấp mà chúng tôi đã tạo và sk-user-ca được liên kết với cơ quan chứng nhận.

Cuối cùng chúng ta đã sẵn sàng chạy lệnh SSH:


$ ssh -i emergency ubuntu@my-hostname
ubuntu@my-hostname:~$

  1. Bây giờ bạn có thể tạo chứng chỉ cho bất kỳ người dùng nào trên máy chủ tin cậy tổ chức phát hành chứng chỉ của bạn.
  2. Bạn có thể loại bỏ trường hợp khẩn cấp. Bạn có thể lưu sk-user-ca nhưng không cần thiết vì nó cũng nằm trên khóa bảo mật. Bạn cũng có thể muốn xóa khóa chung PEM ban đầu khỏi máy chủ của mình (ví dụ: trong ~/.ssh/authorized_keys đối với người dùng ubuntu) nếu bạn sử dụng nó để truy cập khẩn cấp.

Tiếp cận khẩn cấp: Kế hoạch hành động

Dán khóa bảo mật và chạy lệnh:

$ ssh-add -K

Điều này sẽ thêm khóa công khai và bộ mô tả khóa của tổ chức phát hành chứng chỉ vào tác nhân SSH.

Bây giờ xuất khóa chung để tạo chứng chỉ:

$ ssh-add -L | tail -1 > sk-user-ca.pub

Tạo chứng chỉ có ngày hết hạn, chẳng hạn như không quá một giờ:

$ ssh-keygen -t ecdsa -f emergency
$ ssh-keygen -Us sk-user-ca.pub -I test-key -n [username] -V -5m:+60m emergency
$ chmod 600 emergency-cert.pub

Và bây giờ lại SSH:

$ ssh -i emergency username@host

Nếu tệp .ssh/config của bạn gây ra một số sự cố khi kết nối, bạn có thể chạy ssh với tùy chọn -F none để bỏ qua nó. Nếu bạn cần gửi chứng chỉ cho đồng nghiệp, tùy chọn dễ dàng và an toàn nhất là Lỗ sâu ma thuật. Để thực hiện việc này, bạn chỉ cần hai tệp - trong trường hợp của chúng tôi là Emergency và Emergency-cert.pub.

Điều tôi thích ở phương pháp này là sự hỗ trợ về phần cứng. Bạn có thể cất chìa khóa bảo mật của mình vào két an toàn và chúng sẽ không biến mất đâu cả.

Như một quảng cáo

Máy chủ hoành tráng - VPS giá rẻ với bộ xử lý mạnh mẽ của AMD, tần số lõi CPU lên tới 3.4 GHz. Cấu hình tối đa cho phép bạn giải quyết hầu hết mọi vấn đề - lõi CPU 128, RAM 512 GB, NVMe 4000 GB. Tham gia với chúng tôi!

Chúng tôi quy định quy trình truy cập khẩn cấp vào máy chủ SSH bằng khóa phần cứng

Nguồn: www.habr.com

Thêm một lời nhận xét