Xác thực dựa trên khóa SSH: know_hosts vs ủy quyền


21

Tôi đọc về việc thiết lập các khóa ssh trong Linux và có một số câu hỏi. Sửa lỗi cho tôi nếu tôi sai

Giả sử máy chủ tr-lgto muốn kết nối với máy chủ tr-mdm bằng ssh. Nếu chúng tôi muốn chắc chắn rằng đó là tr-mdm thực sự, chúng tôi sẽ tạo một cặp khóa trên tr-mdm và chúng tôi thêm khóa công khai known_hostsvào trên tr-lgto. Nếu tr-mdm muốn kiểm tra xem đó có phải là tr-lgto thật hay không, thì tr-lgto phải tạo ra một cặp khóa và thêm khóa công khai authorized_keysvào trên tr-mdm.

Câu hỏi 1 : Không có trường người dùng trong tệp know_host, chỉ có địa chỉ IP và tên máy chủ. tr-mdm có thể có rất nhiều người dùng, mỗi người có một .sshthư mục riêng . Chúng ta có nên thêm khóa công khai vào mỗi known_hoststệp không?

Câu hỏi 2 : Tôi thấy rằng ssh-keyscan -t rsa tr-mdmsẽ trả về khóa công khai của tr-mdm. Làm thế nào để tôi biết khóa này thuộc về người dùng nào? Hơn nữa, khóa công khai trong /root/.ssh/khác với những gì lệnh đó trả về. Làm sao có thể?



Tôi đã thêm một số bối cảnh nền cho 'ssh' trong câu trả lời "Giới thiệu về tệp bảo mật chứa khóa công khai" tại câu hỏi được đề cập bởi @Gilles: < security.stackexchange.com/questions/20706/iêu >
IAM_AL_X

Câu trả lời:


33

Bạn đang trộn lẫn xác thực của máy chủ với máy khách và xác thực người dùng với máy chủ.

Xác thực máy chủ

Một trong những điều đầu tiên xảy ra khi kết nối SSH được thiết lập là máy chủ gửi khóa công khai của nó đến máy khách và chứng minh (nhờ mật mã khóa công khai ) cho khách hàng biết rằng nó biết khóa riêng được liên kết. Điều này xác thực máy chủ: nếu phần này của giao thức thành công, máy khách biết rằng máy chủ đó là người mà nó giả vờ.

Máy khách có thể kiểm tra xem máy chủ có phải là máy chủ đã biết không, và không phải máy chủ lừa đảo nào đó đang cố gắng vượt qua như một máy chủ phù hợp. SSH chỉ cung cấp một cơ chế đơn giản để xác minh tính hợp pháp của máy chủ: nó nhớ các máy chủ bạn đã kết nối, trong ~/.ssh/known_hoststệp trên máy khách (cũng có tệp toàn hệ thống /etc/ssh/known_hosts). Lần đầu tiên bạn kết nối với máy chủ, bạn cần kiểm tra bằng một số phương tiện khác rằng khóa chung được trình bày bởi máy chủ thực sự là khóa chung của máy chủ mà bạn muốn kết nối. Nếu bạn có khóa chung của máy chủ mà bạn sắp kết nối, bạn có thể thêm nó ~/.ssh/known_hostsvào máy khách theo cách thủ công.

Xác thực máy chủ phải được thực hiện trước khi bạn gửi bất kỳ dữ liệu bí mật nào đến nó. Cụ thể, nếu xác thực người dùng liên quan đến mật khẩu, mật khẩu không được gửi đến máy chủ không được xác thực.

Xác thực người dùng

Máy chủ chỉ cho phép người dùng từ xa đăng nhập nếu người dùng đó có thể chứng minh rằng họ có quyền truy cập vào tài khoản đó. Tùy thuộc vào cấu hình của máy chủ và lựa chọn của người dùng, người dùng có thể đưa ra một trong một số hình thức thông tin đăng nhập (danh sách dưới đây không đầy đủ).

  • Người dùng có thể xuất trình mật khẩu cho tài khoản mà anh ta đang cố đăng nhập; Sau đó, máy chủ sẽ xác minh rằng mật khẩu là chính xác.
  • Người dùng có thể xuất trình khóa chung và chứng minh rằng mình sở hữu khóa riêng được liên kết với khóa chung đó. Đây chính xác là cùng một phương pháp được sử dụng để xác thực máy chủ, nhưng bây giờ người dùng đang cố gắng chứng minh danh tính của họ và máy chủ đang xác minh chúng. Nỗ lực đăng nhập được chấp nhận nếu người dùng chứng minh rằng anh ta biết khóa riêng và khóa chung nằm trong danh sách ủy quyền của tài khoản ( ~/.ssh/authorized_keystrên máy chủ).
  • Một loại phương pháp khác liên quan đến việc ủy ​​thác một phần công việc xác thực người dùng cho máy khách. Điều này xảy ra trong các môi trường được kiểm soát như doanh nghiệp, khi nhiều máy chia sẻ cùng một tài khoản. Máy chủ xác thực máy khách theo cùng một cơ chế được sử dụng theo cách khác, sau đó dựa vào máy khách để xác thực người dùng.

1
Câu trả lời hay của Gilles, nhưng câu hỏi của tôi là bất kỳ máy chủ nào cũng có thể gửi khóa công khai ngẫu nhiên và chứng minh rằng nó có khóa công khai liên quan. Làm thế nào mà chứng minh máy chủ là xác thực?
Alex

@spartacus Tôi nghĩ bạn có nghĩa là người Hồi giáo và chứng minh rằng nó có khóa riêng tư liên quan, phải không? Ý tưởng là máy khách gửi một giá trị được tạo ngẫu nhiên (một thách thức ) đến máy chủ và máy chủ thực hiện một số tính toán dựa trên khóa riêng phụ thuộc vào thử thách (vì vậy máy chủ không thể thực hiện tính toán cho đến khi nhận được thách thức) và điều đó chỉ có thể được thực hiện với kiến ​​thức về khóa riêng.
Gilles 'SO- đừng trở nên xấu xa'

Tôi nghĩ Alex đề cập đến lần đầu tiên khách hàng kết nối với máy chủ. Tôi nghĩ rằng khách hàng sẽ tin tưởng máy chủ lần đầu tiên. Sau đó, máy chủ sẽ gửi khóa chung của nó và máy khách sẽ có thể xác thực máy chủ cho các kết nối sau.
đồng bộ

@synack ơi, lần đầu tiên? Thay vào đó, ứng dụng khách les mà người dùng đưa ra quyết định (Bạn có chắc chắn muốn tiếp tục kết nối (có / không) không? Máy chủ không chứng minh bất cứ điều gì tại thời điểm đó.
Gilles 'SO- ngừng trở nên xấu xa'

bạn nói đúng, đó là người dùng đưa ra quyết định.
đồng bộ

2

Bạn bè của tôi đã cho tôi câu trả lời. Theo mặc định, khóa xác định một máy chứ không phải người dùng. Vì vậy, các khóa được lưu trữ trong / etc / ssh /. Đó là lý do tại sao tôi nhận được một khóa khác với khóa được lưu trữ trong /root/.ssh

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.