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 -yKiể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 systemNếu dùng Git, cập nhật:
cd /opt/lynis
sudo git pullKhuyế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 systemNếu dùng bản Git:
sudo /opt/lynis/lynis audit systemSau khi chạy, Lynis tạo log:
/var/log/lynis.log
/var/log/lynis-report.datXem warning/suggestion nhanh:
sudo grep Warning /var/log/lynis.log
sudo grep Suggestion /var/log/lynis.logHoặc:
sudo grep -E "warning|suggestion" /var/log/lynis-report.datHiể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/nullHardening thực chiến:
sudo apt update
sudo apt upgrade -y
sudo rebootVớ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-upgradesKiểm tra config:
/etc/apt/apt.conf.d/50unattended-upgrades
/etc/apt/apt.conf.d/20auto-upgrades2. 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_configGợi ý baseline:
PermitRootLogin no
PasswordAuthentication no
PermitEmptyPasswords no
PubkeyAuthentication yes
MaxAuthTries 3
X11Forwarding no
AllowUsers deploy adminuserTest config trước restart:
sudo sshd -tReload:
sudo systemctl reload sshCả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 -tulpenBật UFW baseline:
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw enable
sudo ufw status verboseWeb server:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcpNguyê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 -lntpNếu service chỉ cần local:
127.0.0.1thay vì:
0.0.0.04. 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/passwdXem sudo:
sudo grep -R "ALL" /etc/sudoers /etc/sudoers.d/Thiết lập password aging:
sudo chage -M 90 -m 7 -W 14 usernameKiểm tra:
sudo chage -l usernameKhuyế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 auditdKiểm tra:
sudo auditctl -sTheo 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.rulesLog quan trọng:
/var/log/auth.log
/var/log/syslog
/var/log/audit/audit.logThự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 chkrootkitLư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/nullKiểm tra thư mục world-writable không sticky bit:
sudo find / -xdev -type d -perm -0002 ! -perm -1000 -ls 2>/dev/nullUmask khuyến nghị cho server:
umask 027Có thể cấu hình tại:
/etc/login.defs
/etc/profile
/etc/bash.bashrcCẩ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– 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-auditsudo lynis audit systemSo 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 -eThêm:
0 3 1 /usr/sbin/lynis audit system --quietHoặc nếu dùng /opt/lynis:
0 3 1 /opt/lynis/lynis audit system --quietNê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ự.
Bình luận (0)
Chưa có bình luận. Hãy là người đầu tiên!