Mục lục

Không có mục lục
Tham gia kênh Telegram của CloudFly để nhận thêm ưu đãi và không bỏ lỡ bất kỳ khuyến mãi nào từ CloudFly

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

Ngày đăng: 25 tháng 2 năm 2025

Giới thiệu

SSH sử dụng mật khẩu để xác thực theo mặc định và hầu hết các hướng dẫn tăng cường bảo mật SSH đều khuyên dùng SSH key thay thế. Tuy nhiên, SSH key vẫn chỉ là một yếu tố duy nhất, mặc dù là yếu tố an toàn hơn nhiều. Kênh (channel) là thiết bị đầu cuối (terminal) trên máy tính của bạn gửi dữ liệu qua đường hầm được mã hóa đến máy từ xa. Nhưng giống như tin tặc có thể đoán mật khẩu, chúng có thể đánh cắp SSH key và sau đó trong cả hai trường hợp, với dữ liệu duy nhất đó, kẻ tấn công có thể truy cập vào hệ thống từ xa của bạn.

Trong hướng dẫn này, chúng tôi sẽ thiết lập xác thực đa yếu tố để chống lại điều đó. Xác thực đa yếu tố (Multi-factor authentication- MFA) hoặc xác thực hai yếu tố (Two-factor authentication- 2FA) yêu cầu nhiều hơn một yếu tố để xác thực hoặc đăng nhập. Điều này có nghĩa là kẻ xấu sẽ phải thỏa hiệp nhiều thứ, như máy tính và điện thoại của bạn, để xâm nhập. Có một số loại yếu tố được sử dụng trong xác thực:

  • Một thứ bạn biết, như mật khẩu hoặc câu hỏi bảo mật
  • Một thứ bạn , như ứng dụng xác thực hoặc mã thông báo bảo mật
  • Một thứ bạn , như dấu vân tay 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 mật khẩu dùng một lần, thường là số gồm sáu chữ số được lặp lại sau mỗi 30 giây.

Bài viết này sẽ hướng dẫn cách bật xác thực SSH bằng ứng dụng OATH-TOTP ngoài SSH key. Đăng nhập vào máy chủ của bạn qua SSH sẽ yêu cầu hai yếu tố trên hai kênh, do đó an toàn hơn so với chỉ sử dụng mật khẩu hoặc SSH key. Ngoài ra, chúng tôi sẽ hướng dẫn một số trường hợp sử dụng bổ sung cho MFA và một số mẹo và thủ thuật hữu ích.

Và nếu bạn đang tìm kiếm hướng dẫn thêm về cách bảo mật kết nối SSH, hãy xem các hướng dẫn về Hardening OpenSSH và Hardening OpenSSH Client.

Điều kiện tiên quyết

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

  • Một máy chủ Ubuntu 20.04 có sudo non-root user, SSH key và tường lửa được bật, bạn có thể thiết lập bằng cách làm theo hướng dẫn Thiết lập máy chủ ban đầu với Ubuntu 20.04.
  • Một điện thoại thông minh hoặc máy tính bảng đã cài đặt ứng dụng OATH-TOTP, như Google Authenticator (iOS, Android).
  • Ngoài ra, bạn cũng có thể sử dụng ứng dụng dòng lệnh Linux có tên là 'oathtool' để tạo mã OATH-TOTP. Ứng dụng này có sẵn trong nhiều kho lưu trữ phân phối khác nhau
  • Nếu bạn muốn bảo mật kết nối SSH của mình, có một số bước hữu ích được nêu trong bài viết SSH Essentials này, chẳng hạn như đưa người dùng vào danh sách trắng, vô hiệu hóa đăng nhập gốc và thay đổi cổng SSH sử dụng.

Bước 1 — Cài đặt PAM của Google

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

PAM, viết tắt của Pluggable Authentication Module, là 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 người dùng. 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, như Google Authenticator hoặc Authy.

Đầu tiên, hãy cập nhật bộ nhớ đệm kho lưu trữ của Ubuntu:

  1. sudo apt-get update

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

  1. sudo apt-get install libpam-google-authenticator

Sau khi cài đặt PAM, chúng ta sẽ sử dụng ứng dụng trợ giúp đi kèm với PAM để tạo khóa TOTP cho người dùng cần yếu tố thứ hai. Khóa này được tạo theo từng người dùng, không phải trên toàn hệ thống. Điều này có nghĩa là mọi người dùng muốn sử dụng ứng dụng xác thực TOTP sẽ cần phải đăng nhập và chạy ứng dụng trợ giúp để lấy khóa của họ; bạn không thể chỉ chạy một lần để bật cho tất cả mọi người (nhưng có một số mẹo ở cuối hướng dẫn này để thiết lập hoặc yêu cầu MFA cho nhiều người dùng).

Chạy ứng dụng khởi tạo:

  1. google-authenticator

Sau khi bạn chạy lệnh, ứng dụng sẽ hỏi một vài câu hỏi. Câu hỏ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:

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

PAM này cho phép sử dụng mã thông báo theo thời gian hoặc tuần tự. Sử dụng mã thông báo theo tuần tự có nghĩa là mã bắt đầu tại một thời đ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 theo thời gian có nghĩa là mã thay đổi sau một khung thời gian nhất định. Chúng tôi sẽ sử dụng mã theo 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 y cho câu trả lời là có.

Sau khi trả lời câu hỏi này, rất nhiều đầu ra sẽ cuộn qua, bao gồm cả mã QR lớn. Sử dụng ứng dụng xác thực trên điện thoại của bạn để quét mã QR hoặc nhập thủ công khóa bí mật. Nếu mã QR quá lớn để quét, bạn có thể sử dụng URL phía trên mã QR để lấy phiên bản nhỏ hơn. Sau khi thêm mã, bạn sẽ thấy mã sáu chữ số thay đổi sau mỗi 30 giây trong ứng dụng của mình.

Lưu ý: Đảm bảo bạn ghi lại khóa bí mật, mã xác minh và mã khôi phục ở nơi an toàn, như trình quản lý mật khẩu. Mã khôi phục là cách duy nhất để lấy lại quyền truy cập nếu bạn, ví dụ, mất quyền truy cập vào ứng dụng TOTP của mình.

Các câu hỏi còn lại cung cấp thông tin cho PAM về cách hoạt động. Chúng ta sẽ xem xét từng câu hỏi một:

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

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

Output
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 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 chặn kẻ tấn công lấy được mã bạn vừa sử dụng và đăng nhập bằng mã đó:

Output
By default, a new token is generated every 30 seconds by the mobile app. 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. This allows for a time skew of up to 30 seconds between the authentication server and client. Suppose you experience problems with poor time synchronization. In that case, you can increase the window from its default size of 3 permitted codes (one previous code, the current code, the next code) to 17 permitted codes (the eight previous codes, the current code, and the eight next codes). This will permit a time skew of up to 4 minutes between client and server. Do you want to do so? (y/n) n

Trả lời có ở đây cho phép tối đa 17 mã hợp lệ trong một cửa sổ bốn phút di chuyển. Bằng cách trả lời không, bạn giới hạn ở 3 mã hợp lệ trong một cửa sổ lăn 1:30 phút. Trừ khi bạn tìm thấy vấn đề với cửa sổ 1:30 phút, trả lời không là lựa chọn an toàn hơn. Bạn có thể thay đổi cài đặt này sau trong tệp .google_authenticator được lưu trữ tại gốc thư mục gốc của bạn:

Output
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 three login attempts every 30s. Do you want to enable rate-limiting (y/n) y

Giới hạn tốc độ có 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 buộc phải đợi một thời gian trước khi có thể thử lại. Nếu trước đây bạn chưa định cấu hình giới hạn tốc độ trực tiếp vào SSH, thì việc thực hiện ngay bây giờ là một kỹ thuật tăng cường bảo mật tuyệt vời.

Lưu ý: Sau khi hoàn tất thiết lập này, nếu bạn muốn sao lưu khóa bí mật của mình, bạn có thể sao chép tệp ~/.google-authenticator vào một vị trí đáng tin cậy. Từ đó, bạn có thể triển khai tệp này trên các hệ thống bổ sung hoặc triển khai lại sau khi sao lưu.

Bây giờ PAM của Google đã được cài đặt và định cấu hình, bước tiếp theo là định cấu hình SSH để sử dụng khóa TOTP của bạn. Chúng ta sẽ cần thông báo cho SSH về PAM và sau đó định cấu hình SSH để sử dụng khóa này.

Bước 2 — Định cấu hình OpenSSH để sử dụng MFA/2FA

Vì chúng ta sẽ thực hiện các thay đổi SSH qua SSH, nên điều quan trọng là không bao giờ được đóng kết nối SSH ban đầu của bạn. Thay vào đó, hãy mở phiên SSH thứ hai để thực hiện thử nghiệm. Điều này nhằm tránh việc bạn bị khóa khỏi máy chủ nếu có lỗi trong cấu hình SSH của bạn. Khi mọi thứ hoạt động, bạn có thể đóng bất kỳ phiên nào một cách an toàn. Một biện pháp phòng ngừa an toàn khác là tạo bản sao lưu các tệp hệ thống mà bạn sẽ chỉnh sửa, vì vậy nếu có sự cố xảy ra, bạn có thể quay về tệp gốc và bắt đầu lại với cấu hình sạch.

Để bắt đầu, hãy sao lưu tệp cấu hình sshd:

  1. sudo cp /etc/pam.d/sshd /etc/pam.d/sshd.bak

Bây giờ hãy mở tệp bằng nano hoặc trình soạn thảo văn bản yêu thích của bạn:

  1. sudo nano /etc/pam.d/sshd

Thêm dòng sau vào cuối tệp:

/etc/pam.d/sshd
. . .
# Standard Un*x password updating.
@include common-password
auth required pam_google_authenticator.so nullok
auth required pam_permit.so

Từ nullok ở cuối dòng cuối cùng cho PAM biết rằng phương thức xác thực này là tùy chọn. Điều này cho phép người dùng không có mã thông báo OATH-TOTP vẫn có thể đăng nhập chỉ bằng SSH key của họ. Khi tất cả người dùng đều có mã thông báo OATH-TOTP, bạn có thể xóa nullok khỏi dòng này để bắt buộc sử dụng MFA. Dòng thứ hai với pam_permit.so là bắt buộc để cho phép xác thực nếu người dùng không sử dụng mã thông báo MFA để đăng nhập. Khi đăng nhập, mỗi phương thức cần có SUCCESS để cho phép xác thực. Nếu người dùng không sử dụng công cụ xác thực MFA, việc sử dụng tùy chọn nullok sẽ trả về IGNORE cho xác thực bàn phím tương tác. pam_permit.so sau đó trả về SUCCESS và cho phép xác thực tiếp tục.

Lưu và đóng tệp.

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

Trước tiên, hãy sao lưu tệp:

  1. sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

Bây giờ hãy mở tệp cấu hình SSH để chỉnh sửa:

  1. sudo nano /etc/ssh/sshd_config

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

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

Lưu và đóng tệp, sau đó khởi động lại SSH để tải lại các tệp cấu hình. Khởi động lại dịch vụ sshd sẽ không đóng các kết nối mở hiện tại của chúng ta, nghĩa là bạn sẽ không có nguy cơ bị khóa ngoài bằng lệnh này:

  1. sudo systemctl restart sshd.service

Để kiểm tra mọi thứ có hoạt động cho đến nay hay không, hãy mở MỘT thiết bị đầu cuối KHÁC và thử đăng nhập qua SSH. Điều rất quan trọng là bạn phải giữ phiên SSH hiện tại của mình mở và thử với một phiên bổ sung, nếu không, bạn sẽ tự khóa mình ở một thời điểm nào đó và sẽ cần sử dụng bảng điều khiển web để đăng nhập lại.

Lưu ý: Nếu bạn đã tạo SSH key trước đó và đang sử dụng khóa này, bạn sẽ nhận thấy rằng bạn không phải nhập mật khẩu người dùng hoặc mã xác minh MFA. Điều này là do SSH key ghi đè lên tất cả các tùy chọn xác thực khác theo mặc định. Nếu không, bạn sẽ nhận được lời nhắc nhập mật khẩu và mã xác minh.

Tiếp theo, để bật khóa SSH làm một yếu tố và mã xác minh làm yếu tố thứ hai, chúng ta cần cho SSH biết yếu tố nào cần sử dụng và ngăn khóa SSH ghi đè lên tất cả các loại khác.

Bước 3 — Làm cho SSH nhận biết MFA

MFA vẫn không hoạt động nếu bạn đang sử dụng SSH key. Để làm cho SSH nhận biết MFA, hãy mở lại tệp cấu hình sshd:

  1. sudo nano /etc/ssh/sshd_config

Thêm dòng sau vào cuối tệp. Điều này cho SSH biết phương pháp xác thực nào là bắt buộc. Chúng tôi cho SSH biết người dùng cần SSH key và mật khẩu hoặc mã xác minh (hoặc cả ba):

/etc/ssh/sshd_config
. . .
AuthenticationMethods publickey,password publickey,keyboard-interactive

Lưu và đóng tệp.

Tiếp theo, mở lại tệp cấu hình PAM sshd:

  1. sudo nano /etc/pam.d/sshd

Tìm dòng @include common-auth và chú thích nó bằng cách thêm ký tự # làm ký tự đầu tiên trên dòng. Điều này cho PAM biết không cần nhắc nhập mật khẩu:

/etc/pam.d/sshd
. . .
# Standard Un*x authentication.
#@include common-auth
. . .

Lưu và đóng tệp, sau đó khởi động lại SSH:

  1. sudo systemctl restart sshd.service

Bây giờ hãy thử đăng nhập lại vào máy chủ bằng một phiên/cửa sổ thiết bị đầu cuối khác. Không giống như lần trước, SSH sẽ yêu cầu mã xác minh của bạn. Nhập mã đó và bạn sẽ hoàn tất quá trình đăng nhập. Mặc dù không có dấu hiệu nào cho thấy SSH key của bạn đã được sử dụng, nhưng nỗ lực đăng nhập của bạn đã sử dụng hai yếu tố. Nếu bạn muốn xác minh điều này, bạn có thể thêm -v (để chi tiết) sau lệnh SSH.

Công tắc -v sẽ tạo ra đầu ra như thế này:

Example SSH output\
. . . debug1: Authentications that can continue: publickey debug1: Next authentication method: publickey debug1: Offering RSA public key: /Users/sammy/.ssh/id_rsa debug1: Server accepts key: pkalg rsa-sha2-512 blen 279 Authenticated with partial success. debug1: Authentications that can continue: password,keyboard-interactive debug1: Next authentication method: keyboard-interactive Verification code:

Gần cuối đầu ra, bạn sẽ thấy SSH sử dụng SSH key của bạn rồi yêu cầu mã xác minh. Bây giờ bạn có thể đăng nhập qua SSH bằng SSH key và mật khẩu một lần. Nếu bạn muốn áp dụng cả ba loại xác thực, bạn có thể làm theo bước tiếp theo.

Xin chúc mừng, bạn đã thêm thành công yếu tố thứ hai khi đăng nhập từ xa vào máy chủ của mình qua SSH. Nếu đây là điều bạn muốn — sử dụng SSH key và mã thông báo TOTP để bật MFA cho SSH (đối với hầu hết mọi người, đây là cấu hình tối ưu) — thì bạn đã hoàn tất.

Sau đây là một số mẹo và thủ thuật để khôi phục, sử dụng tự động, v.v.

Bước 4 — Thêm yếu tố thứ ba (Tùy chọn)

Trong Bước 3, chúng tôi đã liệt kê các loại xác thực được chấp thuận trong tệp sshd_config:

  1. publickey (SSH key)
  2. password publickey (mật khẩu)
  3. key-interactive (mã xác minh)

Mặc dù chúng tôi đã liệt kê ba yếu tố khác nhau, các tùy chọn chúng tôi đã chọn cho đến nay chỉ cho phép SSH key và mã xác minh. Nếu bạn muốn có cả ba yếu tố (SSH key, mật khẩu và mã xác minh), một thay đổi nhanh sẽ kích hoạt cả ba.

Mở tệp cấu hình sshd của PAM:

  1. sudo nano /etc/pam.d/sshd

Xác định vị trí dòng bạn đã chú thích trước đó, #@include common-auth, và bỏ chú thích dòng bằng cách xóa ký tự #. Lưu và đóng tệp. Bây giờ, khởi động lại SSH một lần nữa:

  1. sudo systemctl restart sshd.service

Bằng cách bật tùy chọn @include common-auth, PAM hiện sẽ nhắc nhập mật khẩu ngoài việc kiểm tra khóa SSH và yêu cầu mã xác minh, mà chúng tôi đã làm việc trước đó. Bây giờ chúng ta có thể sử dụng thứ chúng ta biết (mật khẩu) và hai loại thứ khác nhau mà chúng ta có (khóa SSH và mã xác minh) qua hai kênh khác nhau (máy tính của bạn cho khóa SSH và điện thoại của bạn cho mã thông báo TOTP).

Bước 5 — Khôi phục quyền truy cập vào Google MFA (tùy chọn)

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

Mất khóa bí mật TOTP của bạn

Nếu bạn làm mất khóa bí mật TOTP, bạn có thể chia quá trình khôi phục thành một vài bước. Bước đầu tiên là đăng nhập lại mà không biết mã xác minh và bước thứ hai là tìm khóa bí mật hoặc tạo lại khóa để đăng nhập MFA thông thường. Điều này thường xảy ra nếu bạn mua điện thoại mới và không chuyển bí mật của mình sang ứng dụng xác thực mới.

Để vào sau khi mất khóa bí mật TOTP trên Droplet, bạn có thể sử dụng bảng điều khiển ảo từ bảng điều khiển để đăng nhập bằng tên người dùng và mật khẩu của mình. Điều này hiệu quả vì chúng tôi chỉ bảo vệ tài khoản người dùng của bạn bằng MFA cho các kết nối SSH. Các kết nối không phải ssh, chẳng hạn như đăng nhập bằng bảng điều khiển, không sử dụng mô-đun PAM của Google Authenticator.

Nếu bạn đang sử dụng hệ thống không phải Droplet, thì bạn có hai tùy chọn để lấy lại quyền truy cập:

  1. Truy cập bảng điều khiển (cục bộ/không phải ssh) vào hệ thống (thường là vật lý hoặc thông qua thứ gì đó như iDrac)
  2. Có một người dùng khác không bật MFA

Tùy chọn thứ hai kém an toàn hơn vì mục đích sử dụng MFA là để bảo vệ tất cả các kết nối SSH, nhưng đây là một biện pháp an toàn nếu bạn mất quyền truy cập vào ứng dụng xác thực MFA của mình.

Sau khi bạn đã đăng nhập, có hai cách để giúp lấy được bí mật TOTP:

  1. Khôi phục khóa hiện có
  2. Tạo khóa mới

Trong thư mục gốc của mỗi người dùng, khóa bí mật và cài đặt Google Authenticator được lưu trong tệp ~/.google-authenticator. Dòng đầu tiên của tệp này là khóa bí mật. Một cách nhanh chóng để lấy khóa là thực hiện lệnh sau, lệnh này sẽ hiển thị dòng đầu tiên của tệp google-authenticator (tức là khóa bí mật). Sau đó, lấy khóa bí mật đó và nhập thủ công vào ứng dụng TOTP:

  1. head -n 1 /home/sammy/.google_authenticator

Sau khi khôi phục được khóa hiện tại, bạn có thể nhập thủ công vào ứng dụng xác thực hoặc điền thông tin chi tiết có liên quan vào URL bên dưới và yêu cầu Google tạo mã QR để bạn quét. Bạn sẽ cần thêm tên người dùng, tên máy chủ, khóa bí mật từ tệp .google-authenticator và sau đó là bất kỳ tên nào bạn chọn cho 'entry-name-in-auth-app' để dễ dàng xác định khóa này so với mã thông báo TOTP khác:

https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth://totp/username@hostname%3Fsecret%3D16-char-secret%26issuer%3Dentry-name-in-auth-app

Nếu có lý do không sử dụng khóa hiện tại (ví dụ: không thể dễ dàng chia sẻ khóa bí mật với người dùng bị ảnh hưởng một cách an toàn), bạn có thể xóa tệp ~/.google-authenticator ngay lập tức. Thao tác này sẽ cho phép người dùng đăng nhập lại chỉ bằng một yếu tố duy nhất, giả sử bạn chưa thực thi MFA bằng cách xóa tùy chọn nullok. Sau đó, họ có thể chạy google-authenticator để tạo khóa mới.

Mất quyền truy cập vào ứng dụng TOTP

Nếu bạn cần đăng nhập vào máy chủ nhưng không có quyền truy cập vào ứng dụng TOTP để lấy mã xác minh, bạn vẫn có thể đăng nhập bằng mã khôi phục được hiển thị khi bạn tạo khóa bí mật lần đầu và là năm dòng cuối cùng của tệp .google-authenticator. Lưu ý rằng các mã khôi phục này chỉ sử dụng một lần. Tuy nhiên, để thực hiện thao tác này, bạn cần cung cấp mã khôi phục khi không có quyền truy cập vào ứng dụng TOTP.

Bước 6 — Thay đổi Cài đặt Xác thực (tùy chọn)

Nếu bạn muốn thay đổi cài đặt MFA sau khi cấu hình ban đầu, thay vì tạo cấu hình mới với cài đặt đã cập nhật, bạn chỉ cần chỉnh sửa tệp ~/.google-authenticator. Các tùy chọn trong tệp này xuất hiện theo cách sau:

.google-authenticator layout
<secret key>
<options>
<recovery codes>

Các tùy chọn được đặt trong tệp này có một dòng trong phần tùy chọn; nếu bạn trả lời "no" cho một tùy chọn cụ thể trong quá trình thiết lập ban đầu, chương trình sẽ loại trừ tùy chọn tương ứng.

Sau đây là một số thay đổi bạn có thể thực hiện đối với tệp này:

  • Để bật mã tuần tự thay vì mã theo thời gian, hãy đổi dòng "TOTP_AUTH thành "HOTP_COUNTER 1.
  • Để cho phép sử dụng nhiều lần một mã duy nhất, hãy xóa dòng "DISALLOW_REUSE.
  • Để kéo dài thời gian hết hạn của mã lên 4 phút, hãy thêm dòng "WINDOW_SIZE 17.
  • Để vô hiệu hóa nhiều lần đăng nhập không thành công (giới hạn tỷ lệ), hãy xóa dòng "RATE_LIMIT 3 30.
  • Để thay đổi ngưỡng giới hạn tỷ lệ, hãy tìm dòng "RATE_LIMIT 3 30 và điều chỉnh các số. Số 3 trong bản gốc biểu thị số lần thử trong một khoảng thời gian và số 30 biểu thị thời gian tính bằng giây.
  • Để vô hiệu hóa việc sử dụng mã khôi phục, hãy xóa năm mã gồm tám chữ số ở cuối tệp.

Bước 7 — Tránh MFA cho một số tài khoản (tùy chọn)

Có thể có trường hợp một người dùng hoặc một vài tài khoản dịch vụ (tức là tài khoản do ứng dụng sử dụng, không phải con người) cần quyền truy cập SSH mà không bật MFA. Ví dụ: một số ứng dụng sử dụng SSH, như một số máy khách FTP, có thể không hỗ trợ MFA. Nếu ứng dụng không có cách nào để yêu cầu mã xác minh, yêu cầu có thể bị kẹt cho đến khi kết nối SSH hết thời gian chờ.

Để kiểm soát các yếu tố nào sẽ sử dụng cho người dùng, bạn có thể chỉnh sửa tệp /etc/pam.d/sshd.

Để cho phép MFA cho một số tài khoản và chỉ SSH cho những tài khoản khác, hãy đảm bảo các cài đặt sau trong /etc/pam.d/sshd đang hoạt động:

/etc/pam.d/sshd
# PAM configuration for the Secure Shell service

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

. . .

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

Ở đây, @include common-auth được chú thích vì cần phải tắt mật khẩu. Bạn không thể buộc MFA nếu một số tài khoản đã tắt MFA, vì vậy hãy để tùy chọn nullok ở dòng cuối cùng.

Sau khi thiết lập cấu hình này, hãy chạy google-authenticator với tư cách là bất kỳ người dùng nào cần MFA và không chạy nó cho những người dùng chỉ sử dụng SSH key.

Bước 8 — Tự động thiết lập bằng Quản lý cấu hình (tùy chọn)

Nhiều quản trị viên hệ thống sử dụng các công cụ quản lý cấu hình, như Puppet, Chef hoặc Ansible, để quản lý hệ thống của họ. Bạn có thể sử dụng một hệ thống như thế này để cài đặt và thiết lập khóa bí mật bất cứ khi nào người dùng mới tạo tài khoản.

google-authenticator hỗ trợ các công tắc dòng lệnh để thiết lập tất cả các tùy chọn trong một lệnh duy nhất, không tương tác. Để xem tất cả các tùy chọn, bạn có thể nhập google-authenticator --help. Dưới đây là lệnh sẽ thiết lập mọi thứ như đã nêu trong Bước 1:

  1. google-authenticator -t -d -f -r 3 -R 30 -w 3

Các tùy chọn được tham chiếu ở trên như sau:

  • -t => Bộ đếm theo thời gian
  • -d => Không cho phép sử dụng lại mã thông báo
  • -f => Buộc ghi cài đặt vào tệp mà không cần nhắc người dùng
  • -r => Số lần thử nhập mã đúng
  • -R => Thời gian tính bằng giây mà người dùng có thể thử nhập mã đúng
  • -w => Số lượng mã có thể hợp lệ tại một thời điểm (điều này tham chiếu đến cửa sổ mã hợp lệ từ 1:30 phút đến 4 phút)

Điều này cấu hình đầy đủ trình xác thực, lưu vào tệp và sau đó xuất khóa bí mật, mã QR và mã khôi phục. (Nếu bạn thêm cờ -q, thì sẽ không có bất kỳ đầu ra nào.) Nếu bạn sử dụng lệnh này theo cách tự động, hãy đảm bảo rằng tập lệnh của bạn nắm bắt khóa bí mật và/hoặc mã khôi phục và cung cấp chúng cho người dùng.

Bước 9 — Buộc MFA cho tất cả người dùng (tùy chọn)

Nếu bạn muốn buộc MFA cho tất cả người dùng, ngay cả khi đăng nhập lần đầu hoặc không muốn dựa vào người dùng để tạo khóa của họ, thì có một cách nhanh chóng để xử lý việc này. Bạn có thể sử dụng cùng một tệp .google-authenticator cho mỗi người dùng vì không có dữ liệu cụ thể của người dùng nào được lưu trữ trong tệp.

Để thực hiện việc này, sau khi tạo tệp cấu hình, người dùng có đặc quyền cần sao chép tệp vào thư mục gốc của mọi thư mục gốc và thay đổi quyền của tệp đó thành người dùng phù hợp. Bạn cũng có thể sao chép tệp vào /etc/skel/, tự động sao chép tệp vào thư mục gốc của mọi người dùng mới khi tạo.

Cảnh báo: Điều này có thể gây ra rủi ro bảo mật vì mọi người đều chia sẻ cùng một yếu tố thứ hai. Điều này có nghĩa là nếu tệp bị rò rỉ, thì giống như mọi người dùng chỉ có một yếu tố. Hãy cân nhắc điều này nếu bạn muốn sử dụng phương pháp này.

Một phương pháp khác để buộc tạo khóa bí mật của người dùng là sử dụng tập lệnh bash:

  1. Tạo mã thông báo TOTP,
  2. Yêu cầu họ tải xuống ứng dụng Google Authenticator và quét mã QR sẽ hiển thị
  3. Chạy ứng dụng google-authenticator cho họ sau khi kiểm tra xem tệp .google-authenticator đã tồn tại chưa.

Để đảm bảo tập lệnh chạy khi người dùng đăng nhập, bạn có thể đặt tên là .bash_login và đặt ở gốc thư mục gốc của họ.

Kết luận

Trong hướng dẫn này, bạn đã thêm hai yếu tố (SSH key + mã thông báo MFA) trên hai kênh (máy tính + điện thoại) vào máy chủ của mình. Bạn đã khiến tác nhân bên ngoài rất khó có thể tấn công bằng cách dùng vũ lực để xâm nhập vào máy của bạn thông qua SSH và tăng đáng kể tính bảo mật của máy.

Tham gia kênh Telegram của CloudFly để nhận thêm ưu đãi và không bỏ lỡ bất kỳ khuyến mãi nào từ CloudFly
Chia sẻ

0 câu trả lời