Tôi đang cố gắng đạt được những điều sau trên máy chủ OpenBSD 6.9 của mình:
- Cấm sử dụng tất cả các phím trừ
ssh-ed25519
một trên cả hai NGƯỜI PHỤC VỤ và KHÁCH HÀNG hai bên.
- giới hạn
ssh-keygen -A
chỉ tạo khóa bởi người được ủy quyền ssh-ed25519
thuật toán và không có gì khác.
Để đạt được những điều này, tôi đã thêm các dòng sau vào sshd_config
:
Khóa máy chủ /etc/ssh/ssh_host_ed25519_key
Thuật toán CASignature ssh-ed25519
HostbasedAcceptedKeyTypes ssh-ed25519
Thuật toán HostKey ssh-ed25519
PubkeyAcceptedKeyTypes ssh-ed25519
Tôi cũng đã thêm các dòng sau vào ssh_config
:
Thuật toán CASignature ssh-ed25519
HostbasedAcceptedKeyTypes ssh-ed25519
Thuật toán HostKey ssh-ed25519
PubkeyAcceptedKeyTypes ssh-ed25519
Tôi đã xóa tất cả các khóa trừ khóa được ủy quyền.
Đã khởi động lại sshd:
# rcctl khởi động lại sshd
sshd (được)
sshd (được)
Sau khi xác minh xem cài đặt của tôi có được sử dụng hay không bằng cách chạy các lệnh sau:
# ssh -Q Thuật toán dựa trên máy chủ được chấp nhận
# ssh -Q Thuật toán HostKey
# ssh -Q Thuật toán PubkeyAccepted
Đối với sự ngạc nhiên của tôi, đây là những gì tất cả họ trở lại với:
ssh-ed25519
[email protected]
[email protected]
[email protected]
ssh-rsa
rsa-sha2-256
rsa-sha2-512
ssh-dss
ecdsa-sha2-nistp256
ecdsa-sha2-nistp384
ecdsa-sha2-nistp521
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
Nói cách khác, các hạn chế chính bị bỏ qua.
Để đảm bảo an toàn, tôi thậm chí đã khởi động lại máy chủ, nhưng không có gì khác biệt.
Một giải pháp thay thế tiềm năng là xóa tất cả các tệp chính trừ tệp được ủy quyền. Tuy nhiên, tập lệnh init /etc/rc
có một dòng, ssh-keygen -A
, sẽ tạo lại tất cả các khóa ssh bị thiếu sau mỗi lần khởi động lại hệ thống, trước khi daemon sshd khởi động, bao gồm cả những thuật toán bị cấm!
Vì vậy, loại bỏ các phím không giải quyết được vấn đề.
Như một giải pháp thay thế bổ sung, tôi có thể xóa ssh-keygen -A
dòng từ tập lệnh init hoặc thay thế nó bằng thuật toán tạo khóa tùy chỉnh của tôi, nhưng điều đó sẽ dẫn trở lại nơi nó đã bắt đầu: phải xử lý vấn đề này nhiều lần, ví dụ: sau mỗi lần cập nhật hệ thống, bất cứ khi nào nhóm OpenBSD phát hành phiên bản mới của /etc/rc
. Việc tự động loại bỏ đường dây đó và thử nghiệm một giải pháp thay thế cẩu thả như vậy trên một số lượng lớn máy chủ là rất khó và có thể dẫn đến lỗi mạng lớn nếu xảy ra sự cố.
Do đó, tôi tiếp tục điều tra và tìm hiểu mã nguồn của ssh-keygen
. Tôi đã phát hiện ra rằng không thể hạn chế hành vi của -MỘT
chuyển đổi từ bên ngoài, v.d. thông qua tập tin cấu hình. Nó thậm chí không thực hiện kiểm tra sơ bộ xem các khóa có được cấp phép hay không, nó chỉ tạo ra các khóa, theo danh sách các thuật toán từ một mảng được mã hóa cứng. Cách duy nhất để tránh điều này là chỉnh sửa, biên dịch lại và sử dụng một nhánh tùy chỉnh của ssh-keygen
, nhưng sau đó tôi sẽ phải xử lý nó sau mỗi lần cập nhật OpenSSH...
Tôi đã tìm thấy một phần giải pháp cho các hệ điều hành khác nhưng không phải cho OpenBSD.
Ai đó có thể vui lòng chỉ cho tôi một giải pháp thích hợp? Tại sao của tôi sshd_config
và ssh_config
hạn chế quan trọng được bỏ qua và làm thế nào để có được ssh-keygen -A
ngừng tạo khóa với các thuật toán bị cấm?
Trước khi bất kỳ ai hỏi: tất cả các cài đặt khác được OpenSSH sử dụng trong cả hai tệp cấu hình, vì vậy các tệp cấu hình này thực sự là những tệp thực tế đang được tải.
Rất cám ơn cho tất cả các câu trả lời hữu ích.