Tạo user sudo an toàn và chính sách mật khẩu mạnh cho Ubuntu server
Một Ubuntu server mới cài thường có một điểm yếu rất phổ biến: quản trị viên dùng trực tiếp tài khoản root, mật khẩu yếu, không giới hạn đăng nhập, không kiểm soát quyền sudo. Hệ quả → brute-force SSH, leo thang đặc quyền, mất server.
Cách đúng: không dùng root hằng ngày, tạo user riêng có quyền sudo, khóa bớt bề mặt tấn công, áp dụng chính sách mật khẩu mạnh, kiểm soát phiên đăng nhập. Bài này hướng dẫn thực tế, an toàn, phù hợp VPS, cloud server, máy chủ nội bộ chạy Ubuntu.
Vì sao không nên dùng root trực tiếp?
root có toàn quyền. Sai một lệnh → xóa hệ thống. Lộ mật khẩu → mất toàn bộ server. Không có lớp kiểm soát trung gian.
Dùng user sudo giúp:
– Truy vết tốt hơn: log biết user nào chạy lệnh.
– Giảm rủi ro thao tác nhầm: lệnh nguy hiểm cần sudo.
– Dễ thu hồi quyền: bỏ user khỏi group sudo.
– Tăng bảo mật SSH: có thể tắt login root.
– Phù hợp nguyên tắc least privilege: chỉ cấp quyền cần thiết.
Mục tiêu: user thường để đăng nhập, sudo khi cần quản trị.
Tạo user mới trên Ubuntu
Đăng nhập server bằng user hiện có quyền root/sudo. Tạo user:
sudo adduser admin01
Hệ thống hỏi mật khẩu, tên, thông tin phụ. Thông tin phụ có thể bỏ qua bằng Enter.
Tên user nên:
– Không dùng admin, test, user, ubuntu nếu không cần.
– Dễ nhận diện người dùng thật, ví dụ namops, linhdev, admin01.
– Không chứa thông tin nhạy cảm.
Ví dụ kiểm tra user:
id admin01
Kết quả kỳ vọng có UID/GID riêng.
Cấp quyền sudo đúng cách
Ubuntu dùng group sudo để cấp quyền quản trị. Thêm user vào group:
sudo usermod -aG sudo admin01
Kiểm tra:
groups admin01
Nên thấy:
admin01 : admin01 sudo
Đăng nhập bằng user mới:
su - admin01
Test sudo:
sudo whoami
Nếu trả về:
root
→ user sudo hoạt động.
Lưu ý: không sửa trực tiếp /etc/sudoers bằng editor thường. Dùng:
sudo visudo
visudo kiểm tra cú pháp trước khi lưu → tránh khóa sudo toàn server.
Cấu hình sudo an toàn hơn
Mặc định Ubuntu yêu cầu mật khẩu khi chạy sudo. Đây là lựa chọn tốt. Không nên bật NOPASSWD trừ automation được kiểm soát kỹ.
Mở sudoers:
sudo visudo
Có thể đặt timeout sudo ngắn hơn. Ví dụ yêu cầu nhập lại mật khẩu sau 5 phút:
Defaults timestamp_timeout=5
Muốn sudo luôn hỏi mật khẩu:
Defaults timestamp_timeout=0
Muốn giới hạn số lần nhập sai:
Defaults passwd_tries=3
Không khuyến nghị:
admin01 ALL=(ALL) NOPASSWD:ALL
Dòng này tiện nhưng nguy hiểm. Nếu SSH key/máy người dùng bị lộ → attacker có root ngay.
Tắt đăng nhập root qua SSH
Sau khi chắc chắn user sudo mới hoạt động, hãy khóa SSH root.
Mở config:
sudo nano /etc/ssh/sshd_config
Tìm/sửa:
PermitRootLogin no
Khuyến nghị thêm:
PasswordAuthentication no
PubkeyAuthentication yes
Chỉ bật PasswordAuthentication no sau khi SSH key đã hoạt động chắc chắn.
Kiểm tra cú pháp:
sudo sshd -t
Reload SSH:
sudo systemctl reload ssh
Quan trọng: giữ phiên SSH hiện tại mở, mở terminal khác để test login user mới. Nếu lỗi config → vẫn còn đường sửa.
– minlen = 14: tối thiểu 14 ký tự.
– dcredit = -1: cần ít nhất 1 chữ số.
– ucredit = -1: cần ít nhất 1 chữ hoa.
– lcredit = -1: cần ít nhất 1 chữ thường.
– ocredit = -1: cần ít nhất 1 ký tự đặc biệt.
– maxrepeat = 3: chặn lặp ký tự quá nhiều.
– difok = 5: mật khẩu mới phải khác mật khẩu cũ.
– retry = 3: nhập sai yêu cầu 3 lần → hủy.
– enforce_for_root: root cũng bị áp chính sách.
Kiểm tra file PAM:
sudo nano /etc/pam.d/common-password
Nên có dòng tương tự:
password requisite pam_pwquality.so retry=3
Không chỉnh bừa PAM. Sai cú pháp → lỗi đổi mật khẩu/login.
Cấu hình tuổi thọ mật khẩu
Dùng /etc/login.defs để đặt mặc định cho user mới:
sudo nano /etc/login.defs
Gợi ý:
PASS_MAX_DAYS 90
PASS_MIN_DAYS 1
PASS_WARN_AGE 14
Ý nghĩa:
– PASS_MAX_DAYS 90: mật khẩu hết hạn sau 90 ngày.
– PASS_MIN_DAYS 1: không đổi liên tục trong cùng ngày.
– PASS_WARN_AGE 14: cảnh báo trước 14 ngày.
Áp cho user hiện có:
sudo chage -M 90 -m 1 -W 14 admin01
Xem trạng thái:
sudo chage -l admin01
Với môi trường dùng SSH key + MFA/password manager, không nên ép đổi quá thường xuyên nếu gây mật khẩu yếu hơn. 90–180 ngày thường hợp lý; tài khoản đặc quyền nên kiểm soát chặt hơn.
Khóa tài khoản sau đăng nhập sai
Brute-force mật khẩu SSH rất phổ biến. Nếu vẫn cho phép password login, cần giới hạn thử sai. Dùng pam_faillock.
Kiểm tra/cài:
sudo apt install libpam-modules
Trên Ubuntu mới, cấu hình qua:
sudo nano /etc/security/faillock.conf
Ví dụ:
deny = 5
unlock_time = 900
fail_interval = 900
Ý nghĩa:
– Sai 5 lần → khóa.
– Khóa 900 giây.
– Đếm lỗi trong 900 giây.
Fail2ban → chặn IP brute-force trước khi PAM xử lý quá nhiều.
Thu hồi quyền sudo và khóa user khi cần
Bỏ quyền sudo:
sudo deluser admin01 sudo
Khóa tài khoản:
sudo usermod -L admin01
Mở khóa:
sudo usermod -U admin01
Vô hiệu hóa shell đăng nhập:
sudo usermod -s /usr/sbin/nologin admin01
Xóa user nhưng giữ home:
sudo deluser admin01
Xóa cả home:
sudo deluser --remove-home admin01
Cảnh báo: xóa home có thể mất dữ liệu. Backup trước.
Checklist cấu hình khuyến nghị
– Tạo user riêng: admin01.
– Thêm vào group sudo.
– Test sudo whoami.
– Cài SSH key.
– Tắt PermitRootLogin.
– Tắt password SSH nếu key ổn.
– Cấu hình pwquality.
– Đặt tuổi thọ mật khẩu bằng chage.
– Bật giới hạn đăng nhập sai.
– Cài Fail2ban.
– Không dùng NOPASSWD tùy tiện.
– Kiểm tra log định kỳ:
Bảo mật Ubuntu server không bắt đầu từ công cụ phức tạp. Nó bắt đầu từ việc rất cơ bản: user đúng, sudo đúng, mật khẩu mạnh, SSH an toàn, log rõ ràng.
Cấu hình tốt nhất cho đa số server: đăng nhập bằng user thường qua SSH key, dùng sudo có mật khẩu, tắt root login, áp chính sách mật khẩu mạnh, bật Fail2ban. Làm vậy → giảm mạnh nguy cơ brute-force, lộ root, thao tác nhầm, khó truy vết.
Một giờ cấu hình chuẩn hôm nay có thể tránh nhiều ngày khôi phục server sau này.