Tại sao mật khẩu sudo thôi là chưa đủ?
Mình từng phải thức trắng đêm xử lý một vụ brute-force SSH chỉ vì chủ quan. Nhiều người tin rằng mật khẩu dài và đổi port SSH là đủ an toàn. Tuy nhiên, nếu server dính lỗ hổng Web Shell, hacker có thể thực thi lệnh với quyền user thường. Mục tiêu tiếp theo của chúng luôn là leo thang đặc quyền (Privilege Escalation) để chiếm quyền Root qua lệnh sudo.
Theo báo cáo từ các hãng bảo mật, phần lớn các vụ tấn công Linux thành công đều nhờ khai thác mật khẩu yếu hoặc bị rò rỉ. Ngay cả khi bạn đã bật 2FA cho SSH, hacker vẫn có thể chiếm session đang hoạt động. Việc cài đặt Google Authenticator cho sudo tạo ra một lớp bảo vệ vật lý. Hacker có mật khẩu nhưng không có điện thoại của bạn? Chúng sẽ bị chặn đứng ngay lập tức.
Cơ chế hoạt động của PAM và Google Authenticator
Trên Linux, mọi hoạt động xác thực như login hay sudo đều do PAM (Pluggable Authentication Modules) quản lý. Hãy coi PAM như một người gác cổng linh hoạt. Bạn có thể thêm bớt các quy tắc kiểm tra tùy ý mà không cần sửa code của hệ thống.
Khi tích hợp module pam_google_authenticator, chúng ta đã thêm một điều kiện vào quy trình này. PAM sẽ yêu cầu: “Ngoài mật khẩu đúng, hãy đưa thêm mã token 6 chữ số”. Nếu thiếu một trong hai, cánh cửa vào quyền Root sẽ đóng chặt.
Các bước triển khai chi tiết
Bước 1: Cài đặt gói thư viện
Trước tiên, hãy cài đặt module PAM cần thiết. Với Ubuntu hoặc Debian, bạn dùng lệnh:
sudo apt update
sudo apt install libpam-google-authenticator -y
Nếu đang dùng CentOS hoặc RHEL, hãy kích hoạt kho EPEL trước khi cài:
sudo yum install epel-release -y
sudo yum install google-authenticator -y
Bước 2: Khởi tạo mã 2FA cho User
Bạn cần chạy lệnh này với tư cách User thường, tuyệt đối không chạy trực tiếp dưới quyền root.
google-authenticator
Hệ thống sẽ đưa ra các tùy chọn, mình khuyến nghị cấu hình như sau để đạt bảo mật tốt nhất:
- Time-based tokens (y/n): Chọn
yđể mã OTP thay đổi mỗi 30 giây. - Quét mã QR hiện ra bằng ứng dụng Google Authenticator hoặc Authy trên điện thoại.
- Update your “/home/user/.google_authenticator” file? Chọn
yđể lưu cấu hình. - Disallow multiple uses of the same token? Chọn
yđể tránh tấn công replay. - Rate-limiting? Chọn
yđể chặn các nỗ lực đoán mã OTP liên tục.
Lưu ý: Hãy chép lại 5 mã emergency scratch codes. Nếu điện thoại hỏng hoặc mất, đây là cách duy nhất để bạn lấy lại quyền truy cập.
Bước 3: Cấu hình PAM cho lệnh Sudo
Đây là bước then chốt. Hãy cẩn thận vì một lỗi nhỏ có thể khiến bạn bị khóa quyền sudo vĩnh viễn.
sudo nano /etc/pam.d/sudo
Thêm dòng lệnh sau vào ngay trên đầu nội dung file:
auth required pam_google_authenticator.so
Từ khóa required buộc người dùng phải nhập đúng OTP mới được đi tiếp. Nếu muốn áp dụng dần dần, bạn có thể dùng nullok ở cuối dòng. Lựa chọn này cho phép những user chưa kịp cài 2FA vẫn dùng được sudo tạm thời.
File hoàn chỉnh sẽ trông tương tự như sau:
#%PAM-1.0
auth required pam_google_authenticator.so
@include common-auth
@include common-account
@include common-session-noninteractive
Bước 4: Kiểm tra (Đừng đóng Terminal cũ!)
Đừng vội tắt cửa sổ hiện tại. Hãy mở một Terminal mới và thử gõ:
sudo su -
Lúc này, hệ thống sẽ đòi Verification code. Hãy nhập 6 số từ ứng dụng trên điện thoại. Nếu bạn vào được quyền root, hệ thống của bạn đã được bảo vệ an toàn.
Mẹo nhỏ để không bị “ra rìa”
Làm việc với bảo mật đôi khi sẽ phát sinh rắc rối. Dưới đây là vài điểm bạn cần lưu ý:
- Đồng bộ thời gian: OTP dựa trên thời gian thực. Nếu đồng hồ server lệch quá 30 giây, mã sẽ sai. Hãy cài
chronyđể server luôn chuẩn giờ. - Thứ tự xác thực: Nếu muốn nhập mật khẩu trước rồi mới đến OTP, hãy đảo dòng
auth requiredxuống dưới dòng@include common-auth. - Mất điện thoại: Nếu mất cả điện thoại lẫn mã dự phòng, bạn sẽ phải dùng bảng điều khiển VPS (Console) để gỡ bỏ dòng cấu hình trong file PAM.
Tóm lại
Thiết lập 2FA cho sudo là cách thực thi chiến lược Phòng thủ đa lớp thực dụng nhất. Chỉ mất 10 phút cài đặt nhưng nó giúp bạn kê cao gối ngủ ngon hơn. Đừng đợi đến khi thấy những dòng log lạ mới bắt đầu lo lắng. Hãy bảo vệ server của bạn ngay từ hôm nay.

