Cách cấu hình xác thực đa yếu tố trên Ubuntu 18.04
Xác thực hai yếu tố (2FA) là phương thức xác thực yêu cầu nhập nhiều thông tin để đăng nhập thành công vào account hoặc thiết bị. Ngoài việc nhập kết hợp tên user và password , 2FA yêu cầu user nhập một phần thông tin bổ sung như mật khẩu dùng một lần (OTP), chẳng hạn như mã xác minh gồm sáu chữ số.Nói chung, 2FA yêu cầu user nhập các loại thông tin khác nhau:
- Một cái gì đó mà user biết , chẳng hạn như password
- Một cái gì đó mà user có , chẳng hạn như mã xác minh được tạo từ ứng dụng xác thực
2FA là một tập con của xác thực đa yếu tố (MFA), ngoài những thứ mà user biết và những thứ mà họ có, còn yêu cầu một thứ mà user phải có . Đây là trường hợp của sinh trắc học, sử dụng các công nghệ như nhận dạng fingerprint hoặc giọng nói.
2FA giúp tăng cường quy trình xác thực cho một dịch vụ hoặc thiết bị nhất định: ngay cả khi password bị xâm phạm, kẻ tấn công cũng cần có quyền truy cập vào thiết bị của user có ứng dụng xác thực được sử dụng để tạo mã bảo mật. Vì lý do này, nhiều dịch vụ trực tuyến ( bao gồm cả DigitalOcean ) cung cấp khả năng bật 2FA cho account user để tăng cường bảo mật account khi nói đến giai đoạn xác thực.
Trong hướng dẫn này, bạn sẽ cấu hình 2FA cho user sudoer không phải root trên bản cài đặt Ubuntu 18.04 với module PAM của Google. Vì bạn đang cấu hình 2FA trên user không phải root, bạn vẫn có thể truy cập máy từ account root của mình trong trường hợp bị khóa. Hướng dẫn này sẽ đủ chung để áp dụng cho cả cài đặt server và máy tính để bàn, cả local và từ xa.
Yêu cầu
Trước khi bắt đầu hướng dẫn này, bạn cần những thứ sau:
Một server Ubuntu 18.04 hoặc môi trường máy tính để bàn. Nếu bạn đang sử dụng server Ubuntu, hãy cài đặt nó theo hướng dẫn cài đặt server ban đầu Ubuntu 18.04 , bao gồm cả user không phải root có quyền sudo và firewall .
Một ứng dụng xác thực được cài đặt trên thiết bị di động của bạn mà bạn có thể quét mã QR 2FA, chẳng hạn như Google Authenticator hoặc Authy .
Bước 1 - Cài đặt Mô-đun PAM của Google
Để cấu hình 2FA trên Ubuntu 18.04, bạn cần cài đặt mô-đun PAM của Google dành cho Linux. Mô-đun xác thực có thể cắm được (PAM) là cơ chế xác thực mà Linux sử dụng. Bạn sẽ sử dụng module PAM của Google để user của bạn xác thực qua 2FA bằng mã OTP do Google tạo.
Trước tiên, hãy đăng nhập với quyền là user không phải root mà bạn đã cấu hình trong yêu cầu :
- ssh sammy@your_server_ip
Cập nhật repository Ubuntu để download version mới nhất của trình xác thực:
- sudo apt-get update
Bây giờ repository của bạn đã được cập nhật, hãy cài đặt version mới nhất của module PAM:
- sudo apt-get install libpam-google-authenticator
Đây là một gói rất nhỏ không có phụ thuộc, vì vậy sẽ mất vài giây để cài đặt. Trong phần tiếp theo, bạn sẽ cấu hình 2FA cho user không phải root trên hệ thống.
Bước 2 - Cấu hình 2FA cho user
Đến đây bạn đã cài đặt module PAM, bạn sẽ chạy nó để tạo mã QR cho user đã đăng nhập. Thao tác này sẽ tạo mã, nhưng môi trường Ubuntu sẽ không yêu cầu 2FA cho đến khi bạn kích hoạt nó sau trong hướng dẫn này.
Chạy lệnh google-authenticator
để bắt đầu và cấu hình module PAM:
- google-authenticator
Lệnh sẽ hiển thị một dấu nhắc sẽ hỏi bạn một số câu hỏi cấu hình. Câu hỏi đầu tiên sẽ hỏi nếu bạn muốn mã thông báo dựa trên thời gian. Mã thông báo xác thực dựa trên thời gian sẽ hết hạn sau một khoảng thời gian nhất định, mặc định là 30 giây trên hầu hết các hệ thống. Mã thông báo dựa trên thời gian an toàn hơn mã thông báo không dựa trên thời gian và hầu hết các triển khai 2FA đều sử dụng chúng. Bạn có thể chọn một trong hai tùy chọn ở đây, nhưng hướng dẫn này sẽ chọn Yes
để sử dụng mã thông báo xác thực dựa trên thời gian:
OutputDo you want authentication tokens to be time-based (y/n) y
Sau khi trả lời y
cho câu hỏi này, bạn sẽ thấy một số dòng xuất ra console của bạn :
- Mã QR: Đây là mã bạn cần quét bằng ứng dụng xác thực của bạn . Sau khi bạn quét xong, nó sẽ ngay lập tức biến thành một thiết bị tạo mã sẽ tạo một OTP mới sau mỗi 30 giây.
- Khóa bí mật của bạn: Đây là một phương pháp thay thế để cấu hình ứng dụng trình xác thực của bạn. Nếu đang sử dụng ứng dụng không hỗ trợ quét QR, bạn có thể nhập khóa bí mật để cấu hình ứng dụng xác thực của bạn .
- Mã xác minh của bạn: Đây là mã xác minh gồm sáu chữ số đầu tiên mà mã QR cụ thể này tạo ra.
- Mã cào khẩn cấp của bạn: Còn gọi là mã dự phòng, những mã thông báo dùng một lần này sẽ cho phép bạn vượt qua xác thực 2FA nếu bạn làm mất thiết bị xác thực của bạn . Giữ những mã này ở nơi an toàn để tránh bị khóa account .
Sau khi bạn đã cấu hình ứng dụng trình xác thực của bạn và lưu các mã dự phòng của bạn ở nơi an toàn, dấu nhắc sẽ hỏi bạn có muốn cập nhật file cấu hình hay không. Nếu bạn chọn n
, bạn cần chạy lại chương trình cấu hình. Bạn sẽ nhập y
để lưu các thay đổi của bạn và tiếp tục:
OutputDo you want me to update your "~/.google_authenticator" file (y/n) y
Câu hỏi tiếp theo sẽ hỏi bạn có muốn không cho phép sử dụng mã xác thực nhiều lần hay không. Theo mặc định, bạn chỉ có thể sử dụng mỗi mã một lần, ngay cả khi mã đó vẫn có hiệu lực trong 30 giây. Đây là sự lựa chọn an toàn nhất vì nó ngăn chặn các cuộc tấn công phát lại từ kẻ tấn công bằng cách nào đó đã lấy được mã xác minh của bạn sau khi bạn đã sử dụng. Vì lý do này, sẽ an toàn hơn khi không cho phép sử dụng mã nhiều lần. Trả lời y
để không cho phép sử dụng nhiều lần cùng một mã thông báo:
OutputDo 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
Câu hỏi tiếp theo hỏi bạn có muốn mã thông báo xác thực được chấp nhận trong một thời gian ngắn trước hoặc sau thời gian hiệu lực bình thường của chúng hay không. Mã xác minh rất nhạy cảm về thời gian, nghĩa là mã thông báo của bạn có thể bị từ chối nếu thiết bị của bạn không được đồng bộ hóa. Tùy chọn này cho phép bạn giải quyết vấn đề này bằng cách kéo dài thời gian hiệu lực mặc định của mã xác minh để ngay cả khi thiết bị của bạn tạm thời không đồng bộ hóa, thì mã xác thực của bạn vẫn được chấp nhận. Đảm bảo rằng thời gian giống nhau trên tất cả các thiết bị của bạn là tùy chọn tốt nhất, vì chọn yes
sẽ làm giảm tính bảo mật của hệ thống . Trả lời n
cho câu hỏi này không cho phép một thời gian ân hạn:
OutputBy 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
Câu hỏi cuối cùng hỏi bạn có muốn bật giới hạn tốc độ cho các lần đăng nhập hay không. Điều này sẽ không cho phép nhiều hơn ba lần đăng nhập thất bại sau mỗi 30 giây, đây là một kỹ thuật tăng cường bảo mật tốt. Bật nó bằng cách trả lời y
:
OutputIf 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
Đến đây bạn đã cấu hình và tạo mã 2FA cho user không phải root với module PAM. Bây giờ mã của bạn đã được tạo, bạn cần bật 2FA trong môi trường của bạn .
Bước 3 - Kích hoạt 2FA trong Ubuntu
Mô-đun PAM của Google hiện đang tạo mã 2FA cho user của bạn, nhưng Ubuntu chưa biết rằng nó cần sử dụng mã như một phần của quá trình xác thực của user . Trong bước này, bạn sẽ cập nhật cấu hình của Ubuntu để yêu cầu mã thông báo 2FA ngoài phương pháp xác thực thông thường.
Bạn có hai tùy chọn khác nhau tại thời điểm này:
- Bạn có thể yêu cầu 2FA mỗi khi user đăng nhập vào hệ thống và mỗi khi user yêu cầu quyền
sudo
. - Bạn chỉ có thể yêu cầu 2FA khi đăng nhập, trong đó các lần xác thực
sudo
tiếp theo sẽ chỉ yêu cầu password user .
Tùy chọn đầu tiên sẽ lý tưởng cho môi trường chia sẻ, nơi bạn có thể cần bảo vệ bất kỳ hành động nào yêu cầu quyền sudo
. Cách tiếp cận thứ hai thực tế hơn đối với môi trường máy tính để bàn local , nơi bạn là user duy nhất trên hệ thống.
Lưu ý: Nếu bạn đang bật 2FA trên một máy từ xa mà bạn truy cập qua SSH, chẳng hạn như DigitalOcean Server, bạn cần làm theo bước hai và ba từ hướng dẫn Cách cài đặt xác thực đa yếu tố cho SSH trên Ubuntu 16.04 trước khi tiếp tục điều này hướng dẫn. Các bước còn lại trong hướng dẫn này áp dụng cho tất cả các cài đặt Ubuntu, nhưng các môi trường từ xa cần cập nhật bổ sung để làm cho dịch vụ SSH nhận biết được 2FA.
Nếu bạn không sử dụng SSH để truy cập cài đặt Ubuntu của bạn , bạn có thể tiến hành ngay các bước còn lại trong hướng dẫn.
Yêu cầu 2FA cho Yêu cầu đăng nhập và sudo
Để được yêu cầu 2FA trong khi đăng nhập và các yêu cầu báo cáo quyền tiếp theo, bạn cần chỉnh sửa file /etc/pam.d/common-auth
bằng cách thêm một dòng vào cuối file hiện có.
Tệp xác thực common-auth
áp dụng cho tất cả các cơ chế xác thực trên hệ thống, dù môi trường máy tính để bàn được sử dụng. Nó cũng áp dụng cho các yêu cầu xác thực xảy ra sau khi user đăng nhập vào hệ thống, chẳng hạn như trong một yêu cầu báo cáo sudo
khi cài đặt một gói mới từ terminal .
Mở file này bằng lệnh sau:
- sudo nano /etc/pam.d/common-auth
Thêm dòng được đánh dấu ở cuối file :
... # and here are more per-package modules (the "Additional" block) session required pam_unix.so session optional pam_systemd.so # end of pam-auth-update config auth required pam_google_authenticator.so nullok
Dòng này cho hệ thống xác thực Ubuntu yêu cầu 2FA khi đăng nhập thông qua module PAM của Google. Tùy chọn nullok
cho phép user hiện tại đăng nhập vào hệ thống ngay cả khi họ chưa cấu hình xác thực 2FA cho account của bạn . Nói cách khác, user đã cấu hình 2FA sẽ được yêu cầu nhập mã xác thực ở lần đăng nhập tiếp theo, trong khi user chưa chạy lệnh google-authenticator
sẽ chỉ có thể đăng nhập bằng tên user và password của họ cho đến khi họ cấu hình 2FA.
Lưu file sau khi thêm dòng.
Yêu cầu 2FA chỉ để đăng nhập
Nếu bạn chỉ muốn được yêu cầu 2FA khi lần đầu tiên đăng nhập vào hệ thống trên môi trường máy tính để bàn, bạn cần chỉnh sửa file cấu hình cho trình quản lý máy tính để bàn mà bạn đang sử dụng. Tên của file cấu hình thường trùng với tên của môi trường máy tính để bàn. Ví dụ: file cấu hình cho gdm
, môi trường máy tính Ubuntu mặc định bắt đầu sau Ubuntu 16.04, là /etc/pam.d/gdm
.
Trong trường hợp server không có đầu, chẳng hạn như DigitalOcean Server, bạn sẽ chỉnh sửa file /etc/pam.d/common-session
để thay thế. Mở file có liên quan dựa trên môi trường của bạn:
- sudo nano /etc/pam.d/common-session
Thêm dòng được đánh dấu vào cuối file :
# # /etc/pam.d/common-session - session-related modules common to all services # ... # # and here are more per-package modules (the "Additional" block) session required pam_unix.so session optional pam_systemd.so # end of pam-auth-update config auth required pam_google_authenticator.so nullok
Điều này sẽ yêu cầu Ubuntu yêu cầu 2FA khi user kết nối với hệ thống qua dòng lệnh (cục bộ hoặc từ xa thông qua SSH), nhưng không yêu cầu trong các lần xác thực tiếp theo, chẳng hạn như yêu cầu sudo
.
Đến đây bạn đã cấu hình thành công Ubuntu để nhắc bạn về 2FA hoặc chỉ trong khi đăng nhập hoặc cho mọi hành động đã xác thực được thực hiện trên hệ thống. Đến đây bạn đã sẵn sàng để kiểm tra cấu hình và đảm bảo bạn được yêu cầu về 2FA khi đăng nhập vào cài đặt Ubuntu của bạn .
Bước 4 - Kiểm tra 2FA
Ở bước trước, bạn đã cấu hình 2FA để tạo mã sau mỗi 30 giây. Trong bước này, bạn sẽ kiểm tra 2FA bằng cách đăng nhập vào môi trường Ubuntu của bạn.
Đầu tiên, đăng xuất và đăng nhập lại môi trường Ubuntu của bạn:
ssh sammy@your_server_ip
Nếu bạn đang sử dụng xác thực dựa trên password , bạn sẽ được yêu cầu nhập password user của bạn :
OutputPassword:
Lưu ý: Nếu bạn đang thử nghiệm điều này trên DigitalOcean Server hoặc một server từ xa khác được bảo vệ bằng xác thực certificate , bạn sẽ không được yêu cầu nhập password và khóa của bạn sẽ được chuyển và chấp nhận tự động. Do đó, bạn sẽ chỉ được yêu cầu nhập mã xác minh của bạn .
Nhập password của bạn và bạn sẽ được yêu cầu nhập mã xác minh 2FA:
OutputVerification code:
Sau khi nhập mã xác minh, bạn sẽ đăng nhập:
Outputsammy@your_server_ip: ~#
Nếu 2FA chỉ được bật cho đăng nhập, bạn sẽ không được yêu cầu nhập lại mã 2FA của bạn cho đến khi phiên hết hạn hoặc bạn đăng xuất theo cách thủ công.
Nếu bạn đã bật 2FA thông qua file common-auth
, bạn sẽ được yêu cầu về nó trong mỗi lần đăng nhập và yêu cầu quyền sudo:
Outputsammy@your_server_ip: ~# sudo -s
sudo password for sammy:
Verification code:
root@your_server_ip:
Trong bước này, bạn đã xác nhận cấu hình 2FA của bạn đang hoạt động như mong đợi. Nếu bạn không được yêu cầu nhập mã xác minh của bạn trong giai đoạn này, hãy quay lại bước ba của hướng dẫn và xác nhận bạn đã chỉnh sửa đúng file xác thực Ubuntu.
Bước 5 - Ngăn chặn khóa 2FA
Trong trường hợp điện thoại bị mất hoặc bị xóa, điều quan trọng là phải có các phương pháp backup phù hợp để khôi phục quyền truy cập vào account hỗ trợ 2FA của bạn. Khi cấu hình 2FA lần đầu tiên, bạn có một số tùy chọn đảm bảo rằng bạn có thể khôi phục sau khi bị khóa:
- Lưu bản sao dự phòng của các mã cấu hình bí mật của bạn ở một nơi an toàn. Bạn có thể thực hiện việc này theo cách thủ công, nhưng một số ứng dụng xác thực như Authy cung cấp các tính năng mã dự phòng.
- Lưu mã khôi phục của bạn ở một nơi an toàn có thể được truy cập bên ngoài môi trường kích hoạt 2FA của bạn.
Nếu vì bất kỳ lý do gì mà bạn không có quyền truy cập vào các tùy chọn backup của bạn , bạn có thể thực hiện các bước bổ sung để khôi phục quyền truy cập vào môi trường local đã kích hoạt 2FA hoặc server từ xa của bạn .
Bước 6 - Khôi phục từ Khóa 2FA trên Môi trường local (Tùy chọn)
Nếu bạn có quyền truy cập vật lý vào máy, bạn có thể khởi động vào chế độ cứu hộ để tắt 2FA. Chế độ cứu hộ là một kiểu đích (tương tự như runlevel ) trong Linux được sử dụng để định dạng trước các việc quản trị. Bạn cần chỉnh sửa một số cài đặt trong GRUB , là bộ tải khởi động mặc định trong Ubuntu, để vào chế độ cứu hộ.
Để truy cập GRUB, trước tiên bạn sẽ khởi động lại máy của bạn :
- reboot
Khi menu GRUB xuất hiện, hãy đảm bảo mục nhập Ubuntu được đánh dấu. Đây là tên mặc định trên bản cài đặt 18.04, nhưng có thể khác nếu bạn thay đổi thủ công sau khi cài đặt.
Tiếp theo, nhấn phím e
trên bàn phím để chỉnh sửa cấu hình GRUB trước khi khởi động vào hệ thống của bạn.
Trong file xuất hiện, cuộn xuống cho đến khi bạn thấy một dòng bắt đầu bằng linux
và kết thúc bằng $vt_handoff
. Đi đến cuối dòng này và thêm systemd.unit=rescue.target
, đảm bảo bạn để lại một khoảng trống giữa $vt_handoff
và systemd.unit=rescue.target
. Thao tác này sẽ thông báo cho máy tính Ubuntu của bạn khởi động vào chế độ cứu hộ.
Khi bạn đã áp dụng các thay đổi , hãy lưu file bằng tổ hợp bàn phím Ctrl+X
Máy của bạn sẽ khởi động lại và bạn sẽ thấy mình đang ở một dòng lệnh. Nhấn Enter
để chuyển sang chế độ cứu hộ.
Khi ở chế độ cứu, hãy mở file cấu hình Google Authenticator. Điều này sẽ nằm trong folder chính của user bị khóa:
- nano /home/sammy/.google-authenticator
Dòng đầu tiên trong file này là khóa bí mật của user , được sử dụng để cấu hình ứng dụng xác thực.
Đến đây bạn có hai lựa chọn:
- Bạn có thể sao chép khóa bí mật và cấu hình ứng dụng trình xác thực của bạn .
- Nếu bạn muốn bắt đầu từ một phương tiện chặn rõ ràng, bạn có thể xóa hoàn toàn file
~/.google-authenticator
để tắt 2FA cho user này. Sau khi đăng nhập lại với quyền user không phải root, bạn có thể cấu hình 2FA và nhận khóa bí mật hoàn toàn mới.
Với một trong hai lựa chọn, bạn có thể khôi phục từ khóa 2FA trên môi trường local bằng cách sử dụng bộ tải khởi động GRUB. Trong bước tiếp theo, bạn sẽ khôi phục từ khóa 2FA trên môi trường từ xa.
Bước 7 - Khôi phục từ khóa 2FA trên môi trường từ xa (Tùy chọn)
Nếu account sudoer không phải root của bạn bị khóa trên một máy từ xa, bạn có thể sử dụng root user để tạm thời vô hiệu hóa 2FA hoặc cấu hình lại 2FA.
Bắt đầu bằng cách đăng nhập vào máy của bạn bằng user root :
- ssh root@your_server_ip
Sau khi đăng nhập, hãy mở file cài đặt Google Authenticator nằm bên trong folder chính của user bị khóa:
- sudo nano /home/sammy/.google_authenticator
Dòng đầu tiên trong file này là khóa bí mật của user , Đây là kết quả bạn cần để cấu hình ứng dụng xác thực.
Đến đây bạn có hai lựa chọn:
- Nếu bạn muốn cài đặt một thiết bị mới hoặc đã xóa, bạn có thể sử dụng khóa bí mật để cấu hình lại ứng dụng trình xác thực của bạn .
- Nếu bạn muốn bắt đầu từ một
/home/ sammy /.google_authenticator
rõ ràng, bạn có thể xóa hoàn toàn file/home/ sammy /.google_authenticator
để tắt 2FA cho user này. Sau khi đăng nhập với quyền user không phải root, bạn có thể cấu hình 2FA và nhận khóa bí mật hoàn toàn mới.
Với một trong hai lựa chọn, bạn có thể khôi phục từ khóa 2FA trên môi trường local bằng cách sử dụng user gốc .
Kết luận
Trong hướng dẫn này, bạn đã cấu hình 2FA trên máy Ubuntu 18.04. Với 2FA được cấu hình trên môi trường của bạn, bạn đã thêm một lớp bảo vệ bổ sung vào account của bạn và bạn đã làm cho hệ thống của bạn an toàn hơn. Ngoài phương thức xác thực truyền thống, bạn cũng sẽ phải nhập mã xác minh bổ sung để đăng nhập. Điều này khiến kẻ tấn công đã quản lý để có được thông tin đăng nhập của bạn không thể đăng nhập vào account của bạn mà không có mã xác minh bổ sung này .
Các tin liên quan
Cách thiết lập ứng dụng CakePHP với LAMP trên Ubuntu 18.042019-02-22
Cách đặt quota hệ thống tệp trên Ubuntu 18.04
2019-02-21
Cách thực hiện kiểm tra liên tục các vai trò không thể phục hồi bằng Molecule và Travis CI trên Ubuntu 18.04
2019-02-01
Cách đảm bảo chất lượng mã bằng SonarQube trên Ubuntu 18.04
2019-01-11
Cách cài đặt và bảo mật Memcached trên Ubuntu 18.04
2019-01-04
Cách cài đặt Elasticsearch, Logstash và Kibana (Elastic Stack) trên Ubuntu 16.04
2018-11-20
Cách cài đặt Elasticsearch, Logstash và Kibana (Elastic Stack) trên Ubuntu 16.04
2018-11-20
Cách cài đặt Elasticsearch, Logstash và Kibana (Elastic Stack) trên Ubuntu 18.04
2018-11-06
Cách triển khai ứng dụng Symfony 4 để sản xuất với LEMP trên Ubuntu 18.04
2018-10-18
Cách cài đặt và sử dụng Composer trên Ubuntu 18.04
2018-10-16