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 admin01Hệ 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 admin01Kế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 admin01Kiểm tra:
groups admin01Nên thấy:
admin01 : admin01 sudoĐăng nhập bằng user mới:
su - admin01Test sudo:
sudo whoamiNế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 visudovisudo 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 visudoCó 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=5Muốn sudo luôn hỏi mật khẩu:
Defaults timestamp_timeout=0Muốn giới hạn số lần nhập sai:
Defaults passwd_tries=3Không khuyến nghị:
admin01 ALL=(ALL) NOPASSWD:ALLDò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_configTìm/sửa:
PermitRootLogin noKhuyến nghị thêm:
PasswordAuthentication no
PubkeyAuthentication yesChỉ bật PasswordAuthentication no sau khi SSH key đã hoạt động chắc chắn.
Kiểm tra cú pháp:
sudo sshd -tReload SSH:
sudo systemctl reload sshQuan 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.
Thiết lập SSH key cho user sudo
Trên máy cá nhân tạo key:
ssh-keygen -t ed25519 -C "admin01-server"Copy key lên server:
ssh-copy-id admin01@SERVER_IPHoặc thủ công:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
nano ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keysSSH key mạnh hơn mật khẩu vì:
– Khó brute-force hơn. – Có thể bảo vệ bằng passphrase. – Dễ thu hồi từng key. – Phù hợp automation an toàn.
Nên dùng ed25519, tránh key cũ như DSA.
Chính sách mật khẩu mạnh: nền tảng cần có
Mật khẩu mạnh không chỉ là “có chữ hoa, số, ký tự đặc biệt”. Quan trọng hơn: độ dài, khó đoán, không tái sử dụng, không nằm trong danh sách rò rỉ.
Khuyến nghị:
– Tối thiểu 14–16 ký tự.
– Ưu tiên passphrase: MayXanh!SongDai#2026.
– Không dùng tên công ty, domain, username.
– Không dùng mẫu phổ biến: Admin@123, Password1!, Qwerty@2024.
– Mỗi server/user → mật khẩu riêng.
– Dùng password manager: Bitwarden, 1Password, KeePassXC.
Mật khẩu tốt:
LuaMua-DenBien!73-CaPheMật khẩu kém:
P@ssw0rd123Dù có ký tự đặc biệt, mẫu này vẫn rất dễ đoán.
Cài module kiểm tra mật khẩu mạnh
Ubuntu có thể dùng libpam-pwquality.
Cài đặt:
sudo apt update
sudo apt install libpam-pwqualityMở config:
sudo nano /etc/security/pwquality.confVí dụ chính sách:
minlen = 14
dcredit = -1
ucredit = -1
lcredit = -1
ocredit = -1
maxrepeat = 3
difok = 5
retry = 3
enforce_for_rootÝ nghĩ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-passwordNên có dòng tương tự:
password requisite pam_pwquality.so retry=3Khô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.defsGợ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 admin01Xem trạng thái:
sudo chage -l admin01Vớ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-modulesTrên Ubuntu mới, cấu hình qua:
sudo nano /etc/security/faillock.confVí 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.
Xem trạng thái:
sudo faillockReset user:
sudo faillock --user admin01 --resetNếu server public Internet, nên thêm Fail2ban.
Dùng Fail2ban bảo vệ SSH
Cài:
sudo apt install fail2banTạo config local:
sudo nano /etc/fail2ban/jail.localVí dụ:
[sshd]
enabled = true
port = ssh
maxretry = 5
findtime = 10m
bantime = 1hRestart:
sudo systemctl restart fail2banKiểm tra:
sudo fail2ban-client status sshdFail2ban → 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 sudoKhóa tài khoản:
sudo usermod -L admin01Mở khóa:
sudo usermod -U admin01Vô hiệu hóa shell đăng nhập:
sudo usermod -s /usr/sbin/nologin admin01Xóa user nhưng giữ home:
sudo deluser admin01Xóa cả home:
sudo deluser --remove-home admin01Cả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ỳ:
sudo journalctl -u ssh
sudo grep sudo /var/log/auth.logKết luận thực tế
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.
Bình luận (0)
Chưa có bình luận. Hãy là người đầu tiên!