Thứ ba, 29/09/2015 | 00:00 GMT+7

Cách thiết lập xác thực đa yếu tố cho SSH trên Ubuntu 14.04

Bài viết này đã được cập nhật cho Ubuntu 16.04 . Phiên bản cập nhật cũng bao gồm thông tin bổ sung về cách vượt ra ngoài cài đặt cơ bản.


Yếu tố xác thực là một phần thông tin duy nhất được sử dụng để chứng minh bạn có quyền thực hiện một hành động, chẳng hạn như đăng nhập vào hệ thống. Kênh xác thực là cách hệ thống xác thực cung cấp một yếu tố cho user hoặc yêu cầu user trả lời. Mật khẩu và mã thông báo bảo mật là ví dụ về các yếu tố xác thực; máy tính và điện thoại là những ví dụ về kênh.

SSH sử dụng password để xác thực theo mặc định và hầu hết các hướng dẫn tăng cường SSH đều khuyên bạn nên sử dụng SSH key thay thế. Tuy nhiên, đây vẫn chỉ là một yếu tố đơn lẻ. Nếu một kẻ xấu đã xâm nhập máy tính của bạn, thì họ cũng có thể sử dụng khóa của bạn để xâm phạm server của bạn.

Để chống lại điều đó, trong hướng dẫn này, ta sẽ cài đặt xác thực đa yếu tố. Xác thực đa yếu tố (MFA) yêu cầu nhiều yếu tố để xác thực hoặc đăng nhập. Điều này nghĩa là một kẻ xấu sẽ phải xâm nhập nhiều thứ, chẳng hạn như cả máy tính và điện thoại của bạn. Các loại yếu tố khác nhau thường được tóm tắt là:

  1. Điều gì đó bạn biết , chẳng hạn như password hoặc câu hỏi bảo mật
  2. Một thứ bạn , như ứng dụng xác thực hoặc mã thông báo bảo mật
  3. Một cái gì đó bạn đang có, giống như dấu fingerprint hoặc giọng nói của bạn

Một yếu tố phổ biến là ứng dụng OATH-TOTP, như Google Authenticator. OATH-TOTP (Mật khẩu một lần dựa trên thời gian xác thực mở) là một giao thức mở tạo password sử dụng một lần, thường là một số gồm 6 chữ số được tái chế sau mỗi 30 giây.

Bài viết này sẽ hướng dẫn cách cài đặt xác thực SSH bằng ứng dụng OATH-TOTP ngoài SSH key . Đăng nhập vào server của bạn qua SSH sau đó sẽ yêu cầu hai yếu tố trên hai kênh, do đó làm cho nó an toàn hơn so với password hoặc SSH key một mình.

Yêu cầu

Để làm theo hướng dẫn này, bạn cần :

  • Một server Ubuntu 14.04.

  • Một user không phải root có quyền sudo có thêm SSH key , bạn có thể cài đặt khóa này theo hướng dẫn Cài đặt Server Ban đầu này .

  • Điện thoại thông minh hoặc máy tính bảng có cài đặt ứng dụng OATH-TOTP, như Google Authenticator ( iOS , Android ).

Bước 1 - Cài đặt libpam-google-authenticator

Trong bước này, ta sẽ cài đặt và cấu hình PAM của Google.

PAM, viết tắt của Pluggable Authentication Module , là một cơ sở hạ tầng xác thực được sử dụng trên các hệ thống Linux để xác thực user . Vì Google đã tạo ứng dụng OATH-TOTP nên họ cũng tạo PAM để tạo TOTP và hoàn toàn tương thích với bất kỳ ứng dụng OATH-TOTP nào.

Đầu tiên, hãy cập nhật bộ nhớ đệm repository của Ubuntu.

  • sudo apt-get update

Tiếp theo, cài đặt PAM.

  • sudo apt-get install libpam-google-authenticator

Với PAM được cài đặt, ta sẽ sử dụng ứng dụng trợ giúp đã được cài đặt với PAM để tạo khóa TOTP cho user mà bạn muốn thêm yếu tố thứ hai vào. Khóa này được tạo trên cơ sở user , không phải trên toàn hệ thống. Điều này nghĩa là mọi user muốn sử dụng ứng dụng xác thực TOTP cần đăng nhập và chạy ứng dụng trợ giúp để lấy khóa của riêng họ.

  • google-authenticator

Sau khi chạy lệnh, bạn sẽ được hỏi một số câu hỏi. Người đầu tiên hỏi liệu mã thông báo xác thực có nên dựa trên thời gian hay không.

PAM này cho phép mã thông báo dựa trên thời gian hoặc dựa trên tuần tự. Sử dụng mã thông báo dựa trên tuần tự nghĩa là mã bắt đầu tại một điểm nhất định và sau đó tăng mã sau mỗi lần sử dụng. Sử dụng mã thông báo dựa trên thời gian nghĩa là mã thay đổi ngẫu nhiên sau một thời gian nhất định trôi qua. Ta sẽ gắn bó với việc dựa trên thời gian vì đó là những gì các ứng dụng như Google Authenticator dự đoán, vì vậy hãy trả lời có.

Do you want authentication tokens to be time-based (y/n) y 

Sau khi trả lời câu hỏi này, nhiều kết quả sẽ cuộn qua, bao gồm cả một mã QR lớn. Đảm bảo bạn ghi lại khóa bí mật, mã xác minh, các mã cào khẩn cấp ở một nơi an toàn, chẳng hạn như trình quản lý password .

Đến đây, hãy sử dụng ứng dụng xác thực trên điện thoại để quét mã QR hoặc nhập khóa bí mật theo cách thủ công. Nếu mã QR quá lớn để quét, bạn có thể sử dụng URL phía trên mã QR để có version nhỏ hơn. Sau khi được thêm, bạn sẽ thấy mã gồm sáu chữ số thay đổi cứ sau 30 giây trong ứng dụng của bạn .

Các câu hỏi còn lại cho biết PAM hoạt động như thế nào. Ta sẽ đi qua từng cái một.

Do you want me to update your "~/.google_authenticator" file (y/n) y 

Về cơ bản, điều này sẽ ghi khóa và các tùy chọn vào file .google_authenticator . Nếu bạn nói không, chương trình sẽ thoát và không có gì được ghi, nghĩa là trình xác thực sẽ không hoạt động.

Do you want to disallow multiple uses of the same authentication token? This restricts you to one login about every 30s, but it increases your chances to notice or even prevent man-in-the-middle attacks (y/n) y 

Bằng cách trả lời có ở đây, bạn đang ngăn chặn một cuộc tấn công phát lại bằng cách làm cho mỗi mã hết hạn ngay sau khi sử dụng. Điều này ngăn kẻ tấn công nắm bắt mã bạn vừa sử dụng và đăng nhập bằng mã đó.

By default, tokens are good for 30 seconds and in order to compensate for possible time-skew between the client and the server, we allow an extra token before and after the current time. If you experience problems with poor time synchronization, you can increase the window from its default size of 1:30min to about 4min. Do you want to do so (y/n) n 

Trả lời có ở đây cho phép tối đa 8 mã hợp lệ trong một cửa sổ bốn phút chuyển động. Bằng cách trả lời không, ta giới hạn nó ở 3 mã hợp lệ trong thời hạn quay vòng 1:30 phút. Trừ khi bạn tìm thấy vấn đề với cửa sổ 1:30 phút, không có lựa chọn nào an toàn hơn.

If the computer that you are logging into isn't hardened against brute-force login attempts, you can enable rate-limiting for the authentication module. By default, this limits attackers to no more than 3 login attempts every 30s. Do you want to enable rate-limiting (y/n) y 

Giới hạn tỷ lệ nghĩa là kẻ tấn công từ xa chỉ có thể thử một số lần đoán nhất định trước khi bị chặn. Nếu trước đây bạn chưa cấu hình giới hạn tốc độ trực tiếp vào SSH, làm như vậy bây giờ là một kỹ thuật tăng cường độ cứng tuyệt vời.

Bước 2 - Cấu hình OpenSSH

Bước tiếp theo bây giờ là cấu hình SSH để sử dụng khóa TOTP của bạn. Ta cần cho SSH biết về PAM và sau đó cấu hình SSH để sử dụng nó.

Đầu tiên, mở file cấu hình sshd để chỉnh sửa bằng nano hoặc editor yêu thích của bạn.

  • sudo nano /etc/pam.d/sshd

Thêm dòng sau vào cuối file .

. . . # Standard Un*x password updating. @include common-password auth required pam_google_authenticator.so nullok 

Từ "nullok" ở cuối cho PAM biết rằng phương pháp xác thực này là tùy chọn. Điều này cho phép user không có khóa OATH-TOTP vẫn đăng nhập bằng SSH key của họ. Sau khi tất cả user có khóa OATH-TOTP, bạn có thể xóa “nullok” trên dòng này để biến nó thành MFA bắt buộc.

Lưu và đóng file .

Tiếp theo, ta sẽ cấu hình SSH để hỗ trợ loại xác thực này. Mở file cấu hình SSH để chỉnh sửa.

  • sudo nano /etc/ssh/sshd_config

Tìm kiếm ChallengeResponseAuthentication và đặt giá trị của nó thành yes .

. . . # Change to yes to enable challenge-response passwords (beware issues with # some PAM modules and threads) ChallengeResponseAuthentication yes . . . 

Lưu file , sau đó khởi động lại SSH để reload các file cấu hình.

  • sudo service ssh restart

Bước 3 - Làm cho SSH Nhận thức về MFA

Trong bước này, ta sẽ kiểm tra xem SSH key có hoạt động hay không.

Đầu tiên, hãy mở một terminal khác và thử SSHing vào server ngay bây giờ. Bạn sẽ nhận thấy rằng bạn đã đăng nhập vào phiên thứ hai này bằng SSH key của bạn mà không cần nhập mã xác minh hoặc password . Điều này là do SSH key overrides tất cả các tùy chọn xác thực khác theo mặc định. Ta cần yêu cầu SSH sử dụng mã TOTP và sử dụng SSH key thay cho password của bạn.

Bây giờ, hãy mở lại file cấu hình sshd.

  • sudo nano /etc/ssh/sshd_config

Tìm dòng PasswordAuthentication , bỏ ghi chú bằng cách xóa ký tự # ở đầu dòng và cập nhật giá trị của nó thành no . Điều này cho SSH không nhắc nhập password .

. . . # Change to no to disable tunnelled clear text passwords PasswordAuthentication no . . . 

Tiếp theo, thêm dòng sau vào cuối file . Điều này cho SSH biết phương thức xác thực nào được yêu cầu.

. . . UsePAM yes AuthenticationMethods publickey,keyboard-interactive 

Lưu và đóng file .

Tiếp theo, mở file cấu hình sshd PAM.

  • sudo nano /etc/pam.d/sshd

Tìm dòng @include common-auth và comment bằng cách thêm ký tự # ký tự đầu tiên trên dòng. Điều này yêu cầu PAM không nhắc nhập password ; trước đây ta đã yêu cầu SSH không được sử dụng trong sshd_config .

. . . # Standard Un*x authentication. #@include common-auth . . . 

Lưu file , sau đó khởi động lại SSH.

  • sudo service ssh restart

Bây giờ hãy thử đăng nhập lại vào server . Bạn sẽ thấy rằng bạn đã xác thực một phần bằng SSH key và sau đó được yêu cầu nhập mã xác minh của bạn. Nó sẽ trông giống thế này:

Ví dụ kết quả đăng nhập
ssh sammy@your_server_ip  Authenticated with partial success. Verification code: 

Nhập mã xác minh của bạn từ ap OAUTH-TOTP và bạn sẽ đăng nhập vào server . Đến đây bạn đã bật MFA cho SSH!

Kết luận

Như với bất kỳ hệ thống nào mà bạn củng cố và bảo mật, bạn phải chịu trách nhiệm quản lý bảo mật đó. Trong trường hợp này, điều đó nghĩa là không làm mất SSH key hoặc khóa bí mật TOTP của bạn. Tuy nhiên, đôi khi có những điều xảy ra và bạn có thể mất quyền kiểm soát các phím để đưa bạn vào.

Dưới đây là một số gợi ý để lấy lại quyền truy cập vào server của bạn:

  • Nếu bạn mất hoặc không có quyền truy cập vào ứng dụng TOTP của bạn , hãy sử dụng mã khôi phục của bạn làm mã xác minh. Điều này xảy ra nếu bạn nhận được một chiếc điện thoại mới và quên xuất các phím của bạn ra khỏi cái cũ hoặc nếu điện thoại của bạn hết pin.

  • Nếu bạn mất khóa bí mật và bản backup , hãy sử dụng console thông qua console DigitalOcean để đăng nhập. Sau đó, đổi tên hoặc xóa file ~/.google_authenticator . Điều này sẽ đảm bảo PAM không biết về cấu hình của bạn và sẽ không nhắc bạn nhập mã. Đảm bảo rằng /etc/pam.d/sshd vẫn được thêm “nullok”, như trong bước 2; nếu bạn thay đổi điều này, hãy đảm bảo khởi động lại SSH.

  • Nếu bạn mất SSH key , hãy sử dụng lại console để đăng nhập và xóa công khai cũ của bạn khỏi ~/.ssh/authorized_hosts . Sau đó, bạn có thể thay thế nó bằng một key mới.

Bằng cách có hai yếu tố (khóa SSH + mã thông báo MFA) trên hai kênh (máy tính + điện thoại của bạn), bạn gần như không thể để tác nhân bên ngoài xâm nhập vào máy của bạn thông qua SSH và tăng đáng kể bảo mật của máy của bạn.


Tags:

Các tin liên quan

Cách bảo vệ WordPress với Fail2Ban trên Ubuntu 14.04
2015-09-16
Cách cài đặt và sử dụng Composer trên Ubuntu 14.04
2015-09-11
Cách tối ưu hóa cài đặt Tomcat của bạn trên Ubuntu 14.04
2015-09-08
Cách cài đặt Mailpile trên Ubuntu 14.04
2015-08-21
Cách cài đặt CouchDB và Futon trên Ubuntu 14.04
2015-08-10
Cách thiết lập firewall với UFW trên Ubuntu 14.04
2015-08-05
Cách đánh giá độ trễ HTTP theo chuẩn với wrk trên Ubuntu 14.04
2015-07-21
Cách cài đặt và sử dụng Command Line Cheat Sheets trên Ubuntu 14.04
2015-07-21
Cách cài đặt và sử dụng CFEngine Community Edition trên Ubuntu 14.04
2015-07-17
Cách cài đặt và cấu hình Riak2 với Python3 trên Ubuntu 14.04
2015-07-14