Kiểm tra Ubuntu Server bằng Lynis và hardening thực chiến

15/05/2026 · P T P · Chung

Kiểm tra lỗ hổng Ubuntu Server bằng Lynis và lập kế hoạch hardening thực chiến

Một Ubuntu server “chạy ổn” không đồng nghĩa “an toàn”. Dịch vụ vẫn online, CPU/RAM bình thường, log chưa thấy gì lạ — nhưng SSH có thể đang mở quá rộng, kernel thiếu cập nhật, quyền file sai, firewall chưa chặt, audit log chưa đủ, cấu hình TLS yếu, hoặc cron/script ẩn chứa rủi ro.

Vấn đề lớn: nhiều đội vận hành chỉ hardening khi đã có incident. Cách tốt hơn: đo trước → ưu tiên → xử lý → kiểm tra lại. Lynis phù hợp cho việc này: nhẹ, mã nguồn mở, chạy local, không cần agent phức tạp, tạo báo cáo rõ ràng cho Linux/Unix security audit.

Bài này hướng dẫn kiểm tra Ubuntu Server bằng Lynis, đọc kết quả đúng cách, rồi biến findings thành kế hoạch hardening thực chiến.


Lynis là gì?

Lynis → công cụ audit bảo mật cho Linux, macOS, Unix.

Nó kiểm tra nhiều nhóm:

System tools
Boot/kernel
Users/groups
Authentication
Shells
Filesystems
Storage
Networking
Firewall
SSH
Logging
Cron
Malware tools
File permissions
Package management
Hardening options

Lynis không “vá lỗi tự động”. Nó chỉ ra:

– Warning
– Suggestion
– Hardening index
– Vị trí config liên quan
– Test ID để tra cứu thêm

Điểm mạnh: chạy nhanh, ít phá hệ thống, hợp cho audit định kỳ.

Điểm yếu: không thay thế pentest, không hiểu toàn bộ business context, đôi khi suggestion cần đánh giá trước khi áp dụng.


Cài Lynis trên Ubuntu Server

Cách nhanh qua APT

sudo apt update
sudo apt install lynis -y

Kiểm tra version:

lynis show version

Ưu điểm: đơn giản. Nhược: version có thể cũ.

Cách dùng bản mới từ CISOfy

cd /opt
sudo git clone https://github.com/CISOfy/lynis.git
cd lynis
sudo ./lynis audit system

Nếu dùng Git, cập nhật:

cd /opt/lynis
sudo git pull

Khuyến nghị production: dùng repo/phiên bản ổn định, ghi version vào báo cáo để so sánh audit sau.


Chạy audit đầu tiên

Lệnh chuẩn:

sudo lynis audit system

Nếu dùng bản Git:

sudo /opt/lynis/lynis audit system

Sau khi chạy, Lynis tạo log:

/var/log/lynis.log
/var/log/lynis-report.dat

Xem warning/suggestion nhanh:

sudo grep Warning /var/log/lynis.log
sudo grep Suggestion /var/log/lynis.log

Hoặc:

sudo grep -E "warning|suggestion" /var/log/lynis-report.dat

Hiểu kết quả Lynis: đừng chỉ nhìn điểm

Lynis có Hardening Index. Ví dụ:

Hardening index : 68

Điểm cao hơn → tốt hơn. Nhưng đừng chạy theo điểm mù quáng.

Ví dụ:

– Server public web → SSH/firewall/TLS/logging cực quan trọng.
– Server internal batch job → quyền file, cron, user, outbound network quan trọng.
– DB server → network binding, auth, backup encryption, filesystem permission quan trọng.

Ưu tiên theo rủi ro:

1. Internet-facing?
2. Có dữ liệu nhạy cảm?
3. Có quyền root/sudo rộng?
4. Có exposed service không cần thiết?
5. Finding có exploit phổ biến không?
6. Fix có nguy cơ downtime không?

Lynis → dữ liệu đầu vào. Kế hoạch hardening → cần bối cảnh vận hành.


Các nhóm finding quan trọng trên Ubuntu Server

1. Cập nhật hệ thống

Finding thường gặp:

– Package outdated
– Security updates pending
– Reboot required

Kiểm tra:

sudo apt update
apt list --upgradable
cat /var/run/reboot-required 2>/dev/null

Hardening thực chiến:

sudo apt update
sudo apt upgrade -y
sudo reboot

Với server production: cần maintenance window. Kernel/libc/OpenSSL update → thường cần restart service hoặc reboot.

Bật unattended security upgrades:

sudo apt install unattended-upgrades -y
sudo dpkg-reconfigure unattended-upgrades

Kiểm tra config:

/etc/apt/apt.conf.d/50unattended-upgrades
/etc/apt/apt.conf.d/20auto-upgrades

2. SSH hardening

SSH là cửa chính. Lynis thường cảnh báo:

– Root login enabled
– Password auth enabled
– PermitEmptyPasswords chưa tắt rõ
– MaxAuthTries cao
– AllowUsers chưa cấu hình

Mở file:

sudo nano /etc/ssh/sshd_config

Gợi ý baseline:

PermitRootLogin no
PasswordAuthentication no
PermitEmptyPasswords no
PubkeyAuthentication yes
MaxAuthTries 3
X11Forwarding no
AllowUsers deploy adminuser

Test config trước restart:

sudo sshd -t

Reload:

sudo systemctl reload ssh

Cảnh báo: không đóng session hiện tại trước khi test login SSH bằng cửa sổ khác. Sai config → tự khóa khỏi server.


3. Firewall và network exposure

Lynis có thể cảnh báo firewall inactive.

Kiểm tra port:

sudo ss -tulpen

Bật UFW baseline:

sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw enable
sudo ufw status verbose

Web server:

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

Nguyên tắc: chỉ mở port cần thiết. DB như PostgreSQL/MySQL không nên public Internet trừ khi bắt buộc và có allowlist/VPN/TLS/auth mạnh.

Kiểm tra service bind:

sudo ss -lntp

Nếu service chỉ cần local:

127.0.0.1

thay vì:

0.0.0.0

4. User, sudo, password policy

Lynis thường soi:

– User không cần thiết
– UID/GID bất thường
– Password aging yếu
– Sudo quá rộng

Xem user có shell login:

awk -F: '$7 !~ /(nologin|false)/ {print $1,$7}' /etc/passwd

Xem sudo:

sudo grep -R "ALL" /etc/sudoers /etc/sudoers.d/

Thiết lập password aging:

sudo chage -M 90 -m 7 -W 14 username

Kiểm tra:

sudo chage -l username

Khuyến nghị:

– Mỗi người 1 account riêng.
– Không share user ubuntu, admin, deploy.
– Sudo theo nhóm/command cụ thể nếu có thể.
– Tắt user nghỉ việc ngay.
– SSH key rotate định kỳ.


5. Logging và audit

Không log → không điều tra được. Lynis thường khuyến nghị tăng logging/audit.

Cài auditd:

sudo apt install auditd audispd-plugins -y
sudo systemctl enable --now auditd

Kiểm tra:

sudo auditctl -s

Theo dõi file nhạy cảm:

sudo auditctl -w /etc/passwd -p wa -k identity
sudo auditctl -w /etc/sudoers -p wa -k sudoers
sudo auditctl -w /etc/ssh/sshd_config -p wa -k ssh_config

Để persistent, dùng:

/etc/audit/rules.d/audit.rules

Log quan trọng:

/var/log/auth.log
/var/log/syslog
/var/log/audit/audit.log

Thực chiến: đẩy log ra nơi khác. Nếu attacker chiếm server, log local có thể bị xóa.


6. Malware/rootkit detection

Lynis có thể gợi ý cài tool như rkhunter/chkrootkit.

sudo apt install rkhunter chkrootkit -y
sudo rkhunter --update
sudo rkhunter --check
sudo chkrootkit

Lưu ý: nhiều false positive. Không kết luận server bị hack chỉ vì một cảnh báo. Cần đối chiếu process, network, package, file integrity, timeline log.


7. File permissions và umask

Permission lỏng → leak secret/config.

Kiểm tra file world-writable:

sudo find / -xdev -type f -perm -0002 -ls 2>/dev/null

Kiểm tra thư mục world-writable không sticky bit:

sudo find / -xdev -type d -perm -0002 ! -perm -1000 -ls 2>/dev/null

Umask khuyến nghị cho server:

umask 027

Có thể cấu hình tại:

/etc/login.defs
/etc/profile
/etc/bash.bashrc

Cẩn thận: đổi umask có thể ảnh hưởng deploy/app ghi file.


Biến kết quả Lynis thành kế hoạch hardening

Đừng xử lý 50 suggestion ngẫu nhiên. Dùng bảng ưu tiên.

Mẫu phân loại

| Nhóm | Ví dụ | Ưu tiên | Ghi chú |
|—|—|—:|—|
| Critical exposure | SSH password/root login, DB public | P0 | Fix ngay |
| Patch | Security update, reboot required | P0/P1 | Theo window |
| Access control | Sudo rộng, user thừa | P1 | Cần review |
| Logging | Auditd thiếu, log rotation yếu | P1/P2 | Tăng visibility |
| Hardening tuning | umask, banner, compiler | P2/P3 | Theo môi trường |

Kế hoạch 7 ngày thực chiến

Ngày 1: Baseline

– Chạy Lynis
– Lưu report
– Ghi danh sách service/port/user
– Snapshot/backup trước thay đổi lớn

sudo lynis audit system
sudo cp /var/log/lynis.log /root/lynis-$(date +%F).log
sudo cp /var/log/lynis-report.dat /root/lynis-report-$(date +%F).dat

Ngày 2: Patch

– Cập nhật security packages
– Reboot nếu cần
– Kiểm tra service sau reboot

Ngày 3: SSH + firewall

– Tắt root login
– Tắt password auth nếu đã có key
– Bật UFW
– Đóng port không dùng

Ngày 4: User/sudo

– Xóa/lock user thừa
– Review sudoers
– Áp password aging
– Chuẩn hóa SSH key

Ngày 5: Logging/audit

– Bật auditd
– Theo dõi file nhạy cảm
– Kiểm tra logrotate
– Forward log nếu có SIEM/syslog server

Ngày 6: App/service hardening

– Review Nginx/Apache/TLS
– Kiểm tra DB bind address
– Tách quyền app user
– Kiểm tra secret trong repo/config

Ngày 7: Re-audit

sudo lynis audit system

So sánh Hardening Index, warning, suggestion. Mục tiêu không phải 100 điểm. Mục tiêu: giảm rủi ro thật, không làm gãy hệ thống.


Tự động hóa audit định kỳ

Tạo cron weekly:

sudo crontab -e

Thêm:

0 3   1 /usr/sbin/lynis audit system --quiet

Hoặc nếu dùng /opt/lynis:

0 3   1 /opt/lynis/lynis audit system --quiet

Nên gửi report về email/log server. Audit định kỳ giúp phát hiện drift: admin mở port tạm rồi quên, package mới kéo config yếu, user cũ chưa xóa.


Sai lầm thường gặp

Fix tất cả suggestion ngay → downtime.
Chỉ nhìn Hardening Index → bỏ qua rủi ro nghiệp vụ.
Hardening SSH không test session mới → tự khóa.
Bật firewall trước khi allow SSH → mất truy cập.
Không backup config → khó rollback.
Không ghi change log → audit sau không biết đã đổi gì.
Dùng root cho app → impact lớn khi app bị khai thác.


Kết luận thực tế

Lynis không phải “nút bấm an toàn tuyệt đối”. Nó là công cụ soi hệ thống rất tốt: nhanh, rõ, dễ lặp lại. Giá trị thật nằm ở quy trình phía sau: audit → ưu tiên theo rủi ro → thay đổi có kiểm soát → kiểm tra lại → duy trì định kỳ.

Với Ubuntu Server, hãy bắt đầu từ các điểm có tác động lớn: cập nhật bảo mật, SSH, firewall, user/sudo, logging, service exposure. Sau đó mới tối ưu các hardening sâu hơn như audit rules, filesystem permissions, malware scanning, app-level security.

Một server an toàn không phải server “không có warning”. Đó là server có cấu hình tối thiểu cần thiết, quyền hạn giới hạn, log đủ điều tra, bản vá kịp thời, và mọi thay đổi đều có kế hoạch rollback. Lynis giúp bạn nhìn thấy bức tranh. Hardening tốt là biến bức tranh đó thành hành động đúng thứ tự.

#bang #kiem #lynis #server #ubuntu
Chia sẻ:
← Trước
Secure Ubuntu bằng WireGuard: Chặn SSH ngoài mạng riêng

Bài viết tương tự

Bình luận

Chưa có bình luận. Hãy là người đầu tiên!