Hướng dẫn cấu hình khóa SSH trên CentOS 7 để bảo mật máy chủ hiệu quả

meta: Hướng dẫn cấu hình khóa SSH trên CentOS 7 giúp bảo mật máy chủ hiệu quả, bao gồm tạo khóa SSH, sao chép khóa lên server và tối ưu quyền truy cập.

Giới thiệu về khóa SSH và tầm quan trọng trong bảo mật máy chủ

Khi quản trị máy chủ, giao thức SSH là gì là công cụ không thể thiếu, cho phép bạn truy cập và điều khiển server từ xa một cách an toàn. Tuy nhiên, phương thức xác thực là gì truyền thống bằng mật khẩu lại tiềm ẩn nhiều rủi ro. Mật khẩu có thể bị đoán mò thông qua các cuộc tấn công brute-force, bị lộ trong các sự cố rò rỉ dữ liệu hoặc đơn giản là không đủ mạnh để chống lại các công cụ bẻ khóa hiện đại. Đây chính là lúc khóa SSH phát huy vai trò của mình. Vậy khóa SSH là gì? Đây là một phương thức xác thực dựa trên cặp khóa mã hóa: một khóa riêng tư (private key) được giữ bí mật trên máy tính của bạn và một khóa công khai (public key) được đặt trên máy chủ. Khi kết nối, chúng sẽ xác thực lẫn nhau mà không cần truyền mật khẩu qua mạng. Việc sử dụng khóa SSH không chỉ tăng cường bảo mật lên mức cao nhất mà còn mang lại sự tiện lợi vượt trội. Trong bài viết này, chúng ta sẽ cùng tìm hiểu chi tiết các bước cấu hình khóa SSH trên hệ điều hành CentOS 7.

Hướng dẫn tạo cặp khóa SSH trên máy tính cục bộ bằng lệnh ssh-keygen

Bước đầu tiên trong hành trình bảo mật máy chủ là tạo ra một cặp khóa SSH ngay trên máy tính cá nhân của bạn. Công cụ ssh-keygen có sẵn trên hầu hết các hệ điều hành như Linux, macOS và cả trên Windows (thông qua PowerShell hoặc WSL) sẽ giúp bạn thực hiện việc này một cách dễ dàng.

Lệnh ssh-keygen và các tham số cơ bản

Lệnh ssh-keygen được sử dụng để tạo một cặp khóa mã hóa mới. Cú pháp cơ bản nhất chỉ đơn giản là gõ ssh-keygen vào terminal của bạn. Tuy nhiên, để tối ưu hóa bảo mật, bạn nên sử dụng thêm một vài tham số.

Cú pháp đề xuất: ssh-keygen -t ed25519 -C "your_email@example.com"

Trong đó:
* -t ed25519: Tùy chọn -t (type) cho phép bạn chọn loại thuật toán mã hóa. ED25519 là một thuật toán hiện đại, mang lại hiệu suất cao và mức độ bảo mật mạnh mẽ hơn so với RSA đã cũ. Nếu bạn cần tương thích với các hệ thống cũ, có thể sử dụng RSA với độ dài khóa 4096 bit: ssh-keygen -t rsa -b 4096.
* -C "your_email@example.com": Tùy chọn -C (comment) dùng để thêm một nhãn nhận dạng cho khóa của bạn. Việc sử dụng email hoặc một chuỗi định danh nào đó giúp bạn dễ dàng quản lý nhiều khóa khác nhau trong tương lai.

Sau khi thực thi lệnh, bạn sẽ được hỏi về vị trí lưu trữ khóa và thiết lập passphrase.

Hình minh họa

Lưu trữ và bảo vệ khóa riêng tư

Việc bảo vệ khóa riêng tư cũng quan trọng không kém gì việc tạo ra nó. Khóa riêng tư chính là “chìa khóa” để truy cập vào máy chủ, nếu rơi vào tay kẻ xấu, hệ thống của bạn sẽ gặp nguy hiểm.

Theo mặc định, ssh-keygen sẽ lưu cặp khóa vào thư mục ~/.ssh/.
* Khóa riêng tư: id_ed25519 (hoặc id_rsa)
* Khóa công khai: id_ed25519.pub (hoặc id_rsa.pub)

Một bước cực kỳ quan trọng khi tạo khóa là đặt “passphrase”. Passphrase hoạt động như một lớp mật khẩu thứ hai để bảo vệ chính file khóa riêng tư của bạn. Nếu ai đó có được file khóa riêng tư, họ vẫn cần phải nhập đúng passphrase mới có thể sử dụng nó. Hãy luôn đặt một passphrase đủ mạnh và ghi nhớ nó cẩn thận.

Sao chép khóa công khai lên máy chủ CentOS 7 bằng ssh-copy-id

Sau khi đã tạo thành công cặp khóa SSH trên máy tính cục bộ, bước tiếp theo là sao chép khóa công khai (public key) lên máy chủ CentOS 7. Đây là hành động “cấp phép” cho máy tính của bạn được quyền truy cập vào server bằng khóa. Cách đơn giản và an toàn nhất để làm việc này là sử dụng lệnh ssh-copy-id.

Sử dụng lệnh ssh-copy-id để truyền khóa công khai

Lệnh ssh-copy-id tự động hóa toàn bộ quá trình: nó sẽ kết nối đến máy chủ bằng mật khẩu, tìm đến file authorized_keys của người dùng, và dán khóa công khai của bạn vào đó một cách chính xác mà không làm ảnh hưởng đến các khóa đã có sẵn.

Cú pháp lệnh rất đơn giản: ssh-copy-id username@server_ip_address

Trong đó username là tên người dùng trên máy chủ CentOS 7 và server_ip_address là địa chỉ IP của máy chủ.

Ví dụ: ssh-copy-id duc@192.168.1.100

Khi thực thi lệnh, bạn sẽ được yêu cầu nhập mật khẩu của người dùng duc trên server. Đây là lần cuối cùng bạn cần dùng đến mật khẩu này để đăng nhập. Sau khi xác thực thành công, khóa công khai sẽ được tự động thêm vào file ~/.ssh/authorized_keys trên máy chủ. Bạn có thể kiểm tra lại bằng cách đăng nhập vào server và xem nội dung file này.

Hình minh họa

Cấu hình quyền truy cập và kiểm tra kết nối SSH

Để khóa SSH hoạt động, hệ thống yêu cầu quyền truy cập (permission) của thư mục và file liên quan phải được thiết lập một cách nghiêm ngặt. Nếu sai quyền, máy chủ SSH sẽ từ chối kết nối để đảm bảo an toàn.

Trên máy chủ CentOS 7, hãy đăng nhập và chạy các lệnh sau:
* chmod 700 ~/.ssh: Lệnh này đảm bảo chỉ có bạn (chủ sở hữu) mới có quyền đọc, ghi và thực thi trong thư mục .ssh.
* chmod 600 ~/.ssh/authorized_keys: Lệnh này đảm bảo chỉ có bạn mới có quyền đọc và ghi file authorized_keys.

Sau khi thiết lập đúng quyền, hãy thử kết nối lại từ máy tính cục bộ của bạn: ssh username@server_ip_address.

Nếu mọi thứ được cấu hình chính xác, bạn sẽ đăng nhập thẳng vào máy chủ mà không cần nhập mật khẩu. Nếu bạn đã đặt passphrase cho khóa riêng tư, bạn sẽ được yêu cầu nhập passphrase đó tại bước này.

Hình minh họa

Lợi ích khi sử dụng khóa SSH thay vì mật khẩu truyền thống

Việc chuyển đổi từ xác thực mật khẩu sang khóa SSH không chỉ là một thay đổi nhỏ về kỹ thuật, mà là một bước nhảy vọt về an ninh và hiệu quả quản trị hệ thống. Lợi ích mà nó mang lại là vô cùng rõ rệt, giúp bảo vệ máy chủ của bạn trước các mối đe dọa ngày càng tinh vi.

Đầu tiên và quan trọng nhất là tăng cường tính an toàn. Khóa SSH có độ phức tạp cao hơn rất nhiều so với mật khẩu. Một cặp khóa 2048-bit hoặc 4096-bit gần như không thể bị bẻ khóa bằng các phương pháp tấn công mạng là gì brute-force (thử mật khẩu liên tục). Kẻ tấn công sẽ phải mất hàng ngàn năm với siêu máy tính hiện tại để có thể dò ra khóa riêng tư của bạn. Điều này loại bỏ hoàn toàn nguy cơ từ các botnet là gì tự động quét và thử đăng nhập vào cổng SSH của bạn.

Thứ hai, khóa SSH giúp hạn chế tối đa rủi ro đăng nhập trái phép. Mật khẩu, dù mạnh đến đâu, vẫn có thể bị rò rỉ qua các cuộc tấn công phishing là gì, phần mềm độc hại trên máy tính người dùng, hoặc đơn giản là do thói quen sử dụng lại mật khẩu ở nhiều nơi. Với khóa SSH, việc xác thực không dựa vào thứ bạn nhớ (mật khẩu) mà dựa vào thứ bạn sở hữu (khóa riêng tư). Miễn là bạn bảo vệ an toàn file khóa riêng tư, không ai có thể mạo danh bạn để truy cập vào server.

Cuối cùng, khóa SSH mang lại sự tiện lợi và khả năng tự động hóa vượt trội. Trong các hệ thống lớn với hàng chục, hàng trăm máy chủ, việc quản lý mật khẩu cho từng server là một cơn ác mộng. Khóa SSH cho phép bạn đăng nhập nhanh chóng mà không cần gõ lại mật khẩu. Quan trọng hơn, nó là nền tảng cho các công cụ tự động hóa như Ansible, Jenkins hoặc các kịch bản sao lưu, triển khai ứng dụng. Các hệ thống này có thể kết nối và thực thi tác vụ trên nhiều server một cách an toàn mà không cần lưu trữ mật khẩu ở dạng văn bản thuần.

Các lưu ý và mẹo tăng cường bảo mật khi sử dụng SSH trên CentOS 7

Cấu hình khóa SSH là một bước tiến lớn, nhưng để đạt được mức độ bảo mật tối ưu, bạn nên kết hợp thêm một vài biện pháp củng cố khác. Những tinh chỉnh này sẽ tạo ra một hàng rào phòng thủ nhiều lớp, khiến kẻ tấn công gần như không có cơ hội xâm nhập.

Điều quan trọng nhất sau khi đã cấu hình khóa SSH thành công là vô hiệu hóa hoàn toàn việc xác thực bằng mật khẩu. Mở file cấu hình SSH /etc/ssh/sshd_config và tìm đến dòng PasswordAuthentication. Hãy sửa nó thành PasswordAuthentication no. Thay đổi này đảm bảo rằng không ai có thể cố gắng đăng nhập vào máy chủ của bạn bằng mật khẩu nữa, kể cả người dùng root. Sau khi lưu file, đừng quên khởi động lại dịch vụ SSH: sudo systemctl restart sshd. Lưu ý: Trước khi đóng cửa sổ terminal hiện tại, hãy mở một cửa sổ mới và thử đăng nhập bằng khóa SSH để chắc chắn mọi thứ hoạt động bình thường.

Hình minh họa

Tiếp theo, hãy tận dụng tường lửa tích hợp của CentOS 7 là firewalld. Bạn nên cấu hình tường lửa để chỉ cho phép các địa chỉ IP đáng tin cậy (ví dụ: IP văn phòng, IP nhà riêng của bạn) được kết nối đến cổng SSH. Điều này giúp ngăn chặn các cuộc tấn công từ những địa điểm không xác định.

Một mẹo phổ biến khác là thay đổi cổng SSH mặc định từ 22 sang một cổng khác (ví dụ: 2222). Mặc dù đây không phải là một biện pháp bảo mật tuyệt đối (kẻ tấn công vẫn có thể quét ra cổng mới), nó cực kỳ hiệu quả trong việc giảm thiểu sự “làm phiền” từ các bot quét tự động. Để thay đổi, bạn chỉ cần sửa giá trị Port trong file sshd_config và cập nhật lại quy tắc trên tường lửa.

Cuối cùng, hãy tập thói quen quản lý file authorized_keys một cách hợp lý. Định kỳ kiểm tra file này để đảm bảo không có khóa công khai nào lạ hoặc không còn sử dụng. Khi một nhân viên nghỉ việc hoặc một hệ thống không còn cần truy cập, hãy xóa ngay khóa công khai tương ứng của họ khỏi file này.

Các vấn đề thường gặp và cách khắc phục

Dù quá trình cấu hình khóa SSH khá đơn giản, đôi khi bạn vẫn có thể gặp phải một số lỗi phổ biến. Hiểu rõ nguyên nhân và cách khắc phục sẽ giúp bạn tiết kiệm rất nhiều thời gian và tránh được những phiền toái không đáng có.

SSH từ chối kết nối sau khi cấu hình khóa

Lỗi phổ biến nhất bạn có thể gặp là thông báo Permission denied (publickey,gssapi-keyex,gssapi-with-mic). Điều này có nghĩa là máy chủ đã từ chối khóa của bạn. Nguyên nhân hàng đầu gần như luôn luôn là do sai quyền (permissions) trên máy chủ.

  • Nguyên nhân: Dịch vụ SSH trên server yêu cầu thư mục ~/.ssh và file ~/.ssh/authorized_keys phải được bảo mật nghiêm ngặt. Nếu quyền của chúng quá “mở”, SSH sẽ từ chối đọc file authorized_keys để tránh rủi ro bảo mật.
  • Cách khắc phục: Đăng nhập vào máy chủ bằng mật khẩu (nếu bạn chưa tắt) hoặc qua console và thực hiện lại việc phân quyền một cách chính xác:
    * chmod 700 ~/.ssh
    * chmod 600 ~/.ssh/authorized_keys
    * Bạn cũng nên kiểm tra quyền của thư mục nhà của người dùng. Nó không được phép cho phép các user khác ghi vào.

Một nguyên nhân khác có thể là do bạn đã sao chép sai nội dung khóa công khai vào file authorized_keys. Hãy đảm bảo rằng bạn đã sao chép toàn bộ chuỗi ký tự, không thiếu sót và không có ký tự xuống dòng thừa. Sử dụng ssh-copy-id là cách tốt nhất để tránh lỗi này.

Hình minh họa

Lỗi phân quyền và truy cập khóa riêng tư

Một vấn đề khác không đến từ máy chủ mà lại nằm ở chính máy tính cục bộ của bạn. Nếu file khóa riêng tư (~/.ssh/id_ed25519) có quyền truy cập quá rộng, client SSH của bạn sẽ từ chối sử dụng nó.

  • Tác động: Đây là một cơ chế bảo vệ của chính chương trình SSH client. Nó ngăn bạn vô tình sử dụng một khóa riêng tư có thể đã bị người dùng khác trên cùng máy tính xem được. Bạn sẽ nhận được cảnh báo như Permissions 0644 for '/home/user/.ssh/id_ed25519' are too open.
  • Hướng dẫn khắc phục: Rất đơn giản, bạn chỉ cần thiết lập lại quyền cho file khóa riêng tư trên máy tính cá nhân của mình. Lệnh này đảm bảo chỉ bạn mới có quyền đọc file đó.
    * chmod 600 ~/.ssh/id_ed25519 (hoặc id_rsa)

Bằng cách kiểm tra cẩn thận các bước phân quyền ở cả máy chủ và máy khách, bạn có thể giải quyết hầu hết các vấn đề liên quan đến việc đăng nhập bằng khóa SSH.

Hình minh họa

Best Practices

Để tận dụng tối đa sức mạnh bảo mật của khóa SSH và duy trì một hệ thống an toàn, bền vững, việc tuân thủ các nguyên tắc thực hành tốt nhất (best practices) là vô cùng cần thiết. Đây là những thói quen và quy tắc bạn nên áp dụng trong quá trình quản trị máy chủ hàng ngày.

Luôn đặt passphrase cho khóa SSH riêng tư: Đây là lớp bảo vệ cuối cùng của bạn. Dù file khóa riêng tư có bị đánh cắp, kẻ xấu cũng không thể sử dụng nó nếu không biết passphrase. Hãy coi đây là một yêu cầu bắt buộc, không phải tùy chọn.

Hình minh họa

Sao lưu khóa SSH một cách an toàn: Cặp khóa SSH của bạn rất quan trọng. Nếu mất khóa riêng tư, bạn sẽ mất quyền truy cập vào server. Nếu mất khóa công khai, việc cấp lại quyền sẽ phức tạp hơn. Hãy sao lưu cặp khóa này ở một nơi an toàn như trong trình quản lý mật khẩu, USB được mã hóa hoặc một dịch vụ lưu trữ đám mây có mã hóa đầu cuối.

Giới hạn truy cập SSH theo IP hoặc mạng đáng tin cậy: Đừng mở cổng SSH cho toàn bộ Internet nếu không cần thiết. Sử dụng tường lửa (firewalld trên CentOS 7) để tạo ra một “danh sách trắng” (whitelist), chỉ cho phép các địa chỉ IP cụ thể (như IP của văn phòng hoặc nhà bạn) được phép kết nối. Điều này giảm đáng kể bề mặt tấn công của máy chủ.

Hình minh họa

Định kỳ rà soát và xóa khóa SSH không còn sử dụng: File authorized_keys của bạn có thể ngày càng dài ra theo thời gian. Hãy tạo thói quen kiểm tra định kỳ file này và xóa các khóa công khai của những người dùng hoặc hệ thống không còn cần truy cập nữa. Điều này tuân thủ nguyên tắc “đặc quyền tối thiểu”, đảm bảo chỉ những ai thực sự cần mới có quyền truy cập.

Không bao giờ chia sẻ khóa riêng tư: Nguyên tắc vàng cuối cùng và quan trọng nhất. Khóa riêng tư là của riêng bạn và chỉ của riêng bạn. Tuyệt đối không gửi nó qua email, tin nhắn hay lưu trữ ở những nơi không an toàn. Nếu cần cấp quyền truy cập cho người khác, hãy yêu cầu họ tạo cặp khóa riêng và gửi cho bạn khóa công khai của họ để thêm vào server.

Hình minh họa

Kết luận

Qua bài viết này, chúng ta đã cùng nhau đi qua toàn bộ quy trình cấu hình khóa SSH trên CentOS 7, từ việc tạo một cặp khóa an toàn trên máy tính cá nhân, sao chép khóa công khai lên máy chủ, cho đến việc tinh chỉnh các thiết lập để đạt được mức độ bảo mật cao nhất. Việc chuyển đổi từ mật khẩu truyền thống sang khóa SSH không chỉ là một khuyến nghị, mà nên được xem là một tiêu chuẩn bắt buộc đối với bất kỳ ai đang quản trị máy chủ.

Lợi ích mà nó mang lại là không thể bàn cãi: tăng cường bảo mật trước các cuộc tấn công brute-force, ngăn chặn truy cập trái phép và đơn giản hóa quá trình đăng nhập cũng như tự động hóa các tác vụ quản trị. Bằng cách áp dụng các bước đã hướng dẫn và tuân thủ các nguyên tắc bảo mật tốt nhất, bạn đã xây dựng một pháo đài vững chắc bảo vệ cho tài sản số quan trọng của mình. Hãy bắt tay vào việc cấu hình khóa SSH cho máy chủ của bạn ngay hôm nay. Bước tiếp theo trên hành trình bảo mật, bạn có thể tìm hiểu sâu hơn về cách cấu hình tường lửa là gì chi tiết và các kỹ thuật bảo mật nâng cao khác cho SSH trên CentOS 7.

Hình minh họa

Đánh giá
Tác giả

Mạnh Đức

Có cao nhân từng nói rằng: "Kiến thức trên thế giới này đầy rẫy trên internet. Tôi chỉ là người lao công cần mẫn đem nó tới cho người cần mà thôi !"

Chia sẻ
Bài viết liên quan