Tại Sao Kiểm Tra Bảo Mật Linux Không Còn Là Tùy Chọn Trong 2026
Nói thẳng ra — nếu bạn đang quản lý máy chủ Linux mà chưa có quy trình kiểm tra bảo mật bài bản, thì bạn đang chơi trò may rủi. Và con số không nói dối: số lượng lỗ hổng bảo mật (CVE) trên nhân Linux đã đạt kỷ lục 5.530 CVE trong năm 2025, tăng 28% so với năm trước. Tính ra khoảng 8-9 lỗ hổng mới mỗi ngày. Các cuộc tấn công nhắm vào hệ thống Linux cũng tăng khoảng 130%.
Con số đó đáng sợ thật, nhưng khi nhìn vào bức tranh toàn cảnh thì càng hiểu tại sao. Linux hiện vận hành 49,2% khối lượng công việc đám mây toàn cầu và 100% trong số 500 siêu máy tính hàng đầu thế giới. Bề mặt tấn công khổng lồ, và các tác nhân đe dọa không bỏ lỡ cơ hội — từ webshell, ransomware cho đến brute-force.
Vậy nên, bài viết này sẽ đi thẳng vào thực hành. Mình sẽ hướng dẫn bạn dùng ba công cụ kiểm tra bảo mật hàng đầu — Lynis, OpenSCAP và CIS Benchmarks — để xây dựng quy trình kiểm tra toàn diện, từ cài đặt cơ bản cho đến tự động hóa và tích hợp vào pipeline DevSecOps.
Tổng Quan Về Ba Công Cụ Kiểm Tra Bảo Mật
Lynis — "Con dao đa năng" của kiểm tra bảo mật
Lynis là công cụ mã nguồn mở của CISOfy, chạy được trên Linux, macOS và các hệ Unix. Điểm mạnh của nó là quét toàn diện với hơn 250 bài kiểm tra bảo mật, bao gồm:
- Kernel và Boot loader: Kiểm tra tham số kernel, cấu hình GRUB, thiết lập khởi động an toàn
- Xác thực và quản lý tài khoản: Đánh giá chính sách mật khẩu, cơ chế PAM, quyền sudo
- Hệ thống tệp và quyền: Phát hiện quyền truy cập không phù hợp, SUID/SGID bất thường
- Mạng và tường lửa: Cấu hình mạng, dịch vụ đang lắng nghe, quy tắc tường lửa
- Phần mềm: Xác định phần mềm lỗi thời, gói không cần thiết
- Mã hóa: Chứng chỉ SSL/TLS, cấu hình SSH
- Ghi nhật ký: Cấu hình syslog, auditd
Cái hay của Lynis là nó hoạt động theo cơ chế quét mô-đun và cơ hội — chỉ kiểm tra những gì có trên hệ thống, không cần cài thêm gì. Kết quả được tổng hợp thành điểm Hardening Index từ 0 đến 100. Điểm 70+ là ổn, nhưng production thì nên nhắm 85+ trở lên.
OpenSCAP — Quét tuân thủ theo chuẩn quốc tế
OpenSCAP là bản triển khai mã nguồn mở của SCAP (Security Content Automation Protocol) do NIST quản lý. Nếu Lynis giống như bác sĩ gia đình kiểm tra tổng quát, thì OpenSCAP là chuyên gia chẩn đoán với bộ tiêu chuẩn quốc tế. Nó đã được NIST cấp chứng nhận SCAP 1.2.
Hệ sinh thái OpenSCAP gồm:
- oscap: Công cụ dòng lệnh chính cho quét và đánh giá
- SCAP Workbench: Giao diện đồ họa cho quét và tạo báo cáo
- SCAP Security Guide (SSG): Bộ chính sách bảo mật SCAP, gồm profile CIS, DISA STIG, PCI-DSS
- SCE (Script Check Engine): Cho phép viết nội dung bảo mật bằng Bash, Python, Ruby
Điểm khác biệt lớn nhất so với Lynis? OpenSCAP cung cấp khả năng quét tuân thủ theo các framework chuẩn quốc tế. Nếu tổ chức của bạn phải đáp ứng PCI-DSS, HIPAA hay SOC 2 thì đây là công cụ không thể thiếu.
CIS Benchmarks — Tiêu chuẩn bảo mật công nghiệp
CIS Benchmarks do Center for Internet Security phát triển, cung cấp hướng dẫn cấu hình chi tiết cho hệ điều hành, ứng dụng và nền tảng đám mây. Benchmark chia thành hai cấp độ:
- Level 1 (L1): Cấu hình cơ bản, áp dụng rộng rãi mà không ảnh hưởng đáng kể đến chức năng
- Level 2 (L2): Cấu hình nâng cao cho môi trường bảo mật cao (có thể hạn chế một số chức năng)
CIS Benchmarks tương thích với NIST, PCI-DSS, HIPAA và SOC 2. Một thống kê đáng chú ý: đến năm 2025, tỷ lệ triển khai SELinux và AppArmor ở chế độ enforcing đã đạt 55,6% trên môi trường Linux doanh nghiệp. MAC đang dần trở thành chuẩn mực.
Cài Đặt Và Cấu Hình Lynis
Cài đặt trên các bản phân phối Linux
Lynis cài đặt khá đơn giản qua trình quản lý gói hoặc trực tiếp từ GitHub.
Trên Ubuntu/Debian:
sudo apt update
sudo apt install lynis -y
# Kiểm tra phiên bản
lynis --version
Trên RHEL/CentOS/Fedora:
sudo dnf install lynis -y
# Hoặc cài đặt từ EPEL repository
sudo dnf install epel-release -y
sudo dnf install lynis -y
Cài đặt từ GitHub (khuyến nghị — luôn có bài kiểm tra mới nhất):
cd /opt
sudo git clone https://github.com/CISOfy/lynis.git
cd lynis
sudo ./lynis audit system
Nói thật, mình thường khuyên dùng bản từ GitHub vì bản trong repo của distro đôi khi khá cũ, thiếu các bài kiểm tra mới.
Chạy quét bảo mật đầu tiên
Quét lần đầu đơn giản lắm, chỉ cần một dòng lệnh:
# Quét toàn bộ hệ thống
sudo lynis audit system
# Quét nhanh (bỏ qua các bài kiểm tra tốn thời gian)
sudo lynis audit system --quick
# Quét và ghi kết quả vào tệp tùy chỉnh
sudo lynis audit system --logfile /var/log/lynis-custom.log
# Quét chỉ một nhóm kiểm tra cụ thể
sudo lynis audit system --tests-from-group "firewalls networking"
Đọc hiểu kết quả Lynis
Sau khi quét xong, Lynis sẽ cho bạn một bản tóm tắt khá trực quan:
================================================================================
Lynis security scan details:
Hardening index : 67 [############# ]
Tests performed : 256
Plugins enabled : 2
Components:
- Firewall [V]
- Malware scanner [X]
Scan mode:
Normal [V] Forensics [ ] Integration [ ] Pentest [ ]
Lynis update available : YES
Lynis Modules:
- Compliance status [DISABLED]
- Security audit [ENABLED]
- Vulnerability scan [ENABLED]
Files:
- Test and debug information : /var/log/lynis.log
- Report data : /var/log/lynis-report.dat
================================================================================
Mấy thông tin bạn cần chú ý nhất:
- Hardening Index: Điểm tổng thể — mục tiêu trên 85
- Warnings: Vấn đề nghiêm trọng, cần xử lý ngay
- Suggestions: Đề xuất cải thiện, mỗi cái kèm mã test ID để tra cứu
- lynis-report.dat: Tệp dữ liệu chi tiết cho phân tích tự động
Phân tích chi tiết và xử lý kết quả
Để lọc ra cảnh báo và đề xuất từ kết quả quét:
# Lọc tất cả các cảnh báo
grep "Warning" /var/log/lynis-report.dat
# Lọc tất cả các đề xuất
grep "Suggestion" /var/log/lynis-report.dat
# Xem chi tiết một bài kiểm tra cụ thể
sudo lynis show details AUTH-9286
# Liệt kê tất cả các bài kiểm tra có sẵn
sudo lynis show tests
Ví dụ xử lý một đề xuất hay gặp — thiết lập thời gian hết hạn mật khẩu:
# Đề xuất AUTH-9286: Thiết lập tuổi mật khẩu tối đa
# Chỉnh sửa /etc/login.defs
sudo sed -i 's/^PASS_MAX_DAYS.*/PASS_MAX_DAYS 90/' /etc/login.defs
sudo sed -i 's/^PASS_MIN_DAYS.*/PASS_MIN_DAYS 7/' /etc/login.defs
sudo sed -i 's/^PASS_WARN_AGE.*/PASS_WARN_AGE 14/' /etc/login.defs
# Áp dụng cho người dùng hiện tại
sudo chage --maxdays 90 --mindays 7 --warndays 14 username
Tùy chỉnh hồ sơ quét
Lynis cho phép tạo profile tùy chỉnh để phù hợp với chính sách bảo mật riêng của tổ chức. Đây là tính năng cực kỳ hữu ích khi bạn muốn bỏ qua một số kiểm tra không liên quan hoặc đặt ngưỡng riêng:
# Tạo hồ sơ tùy chỉnh
sudo cp /etc/lynis/default.prf /etc/lynis/custom.prf
# Chỉnh sửa hồ sơ tùy chỉnh
sudo nano /etc/lynis/custom.prf
Nội dung mẫu cho máy chủ web production:
# /etc/lynis/custom.prf - Hồ sơ tùy chỉnh cho máy chủ web production
# Bỏ qua các bài kiểm tra không liên quan
skip-test=CONT-8104
skip-test=TOOL-5002
# Thiết lập ngưỡng Hardening Index tối thiểu
min-hardening-index=85
# Bật kiểm tra tuân thủ
compliance-pci-dss=yes
compliance-hipaa=yes
# Thiết lập cảnh báo cho các dịch vụ không mong muốn
vulnerable-packages-update=yes
Triển Khai OpenSCAP Cho Quét Tuân Thủ
Cài đặt OpenSCAP
Trên Ubuntu/Debian:
sudo apt update
sudo apt install openscap-scanner openscap-utils scap-security-guide -y
# Kiểm tra phiên bản
oscap --version
Trên RHEL/CentOS/Fedora:
sudo dnf install openscap-scanner scap-security-guide openscap-utils -y
# Cài đặt thêm SCAP Workbench (giao diện đồ họa)
sudo dnf install scap-workbench -y
Khám phá các profile bảo mật có sẵn
SCAP Security Guide đi kèm khá nhiều profile cho từng bản phân phối. Để xem có gì:
# Liệt kê profile cho RHEL 9
oscap info /usr/share/xml/scap/ssg/content/ssg-rhel9-ds.xml
# Liệt kê profile cho Ubuntu
oscap info /usr/share/xml/scap/ssg/content/ssg-ubuntu2204-ds.xml
Kết quả sẽ hiển thị danh sách profile kiểu như:
Document type: Source Data Stream
Imported: 2025-06-15T10:00:00
Stream: scap_org.open-scap_datastream
Generated: 2025-06-15
Version: 1.3
Profiles:
Title: CIS Benchmark for Level 1 - Server
Id: xccdf_org.ssgproject.content_profile_cis_server_l1
Title: CIS Benchmark for Level 2 - Server
Id: xccdf_org.ssgproject.content_profile_cis_server_l2
Title: DISA STIG
Id: xccdf_org.ssgproject.content_profile_stig
Title: PCI-DSS v4.0 Control Baseline
Id: xccdf_org.ssgproject.content_profile_pci-dss
Thực hiện quét tuân thủ CIS Level 1
Đây là phần thú vị nhất. Chạy quét và xem hệ thống của bạn "đỗ" được bao nhiêu phần trăm:
# Quét tuân thủ CIS Level 1 trên RHEL 9
sudo oscap xccdf eval \
--profile xccdf_org.ssgproject.content_profile_cis_server_l1 \
--results /tmp/cis-l1-results.xml \
--report /tmp/cis-l1-report.html \
/usr/share/xml/scap/ssg/content/ssg-rhel9-ds.xml
# Quét tuân thủ CIS Level 1 trên Ubuntu 22.04
sudo oscap xccdf eval \
--profile xccdf_org.ssgproject.content_profile_cis_level1_server \
--results /tmp/cis-l1-results.xml \
--report /tmp/cis-l1-report.html \
/usr/share/xml/scap/ssg/content/ssg-ubuntu2204-ds.xml
Sau khi quét xong, mở tệp /tmp/cis-l1-report.html trong trình duyệt. Báo cáo có biểu đồ trực quan rất dễ hiểu — xanh là pass, đỏ là fail.
Tạo kịch bản khắc phục tự động
Đây là một trong những tính năng khiến mình thích OpenSCAP nhất — nó có thể tự tạo script hoặc Ansible playbook để sửa lỗi tuân thủ:
# Tạo kịch bản Bash để khắc phục
sudo oscap xccdf generate fix \
--fix-type bash \
--result-id "" \
/tmp/cis-l1-results.xml > /tmp/remediation-script.sh
# Tạo Ansible playbook cho khắc phục tự động
sudo oscap xccdf generate fix \
--fix-type ansible \
--result-id "" \
/tmp/cis-l1-results.xml > /tmp/remediation-playbook.yml
# Xem nội dung kịch bản trước khi chạy
cat /tmp/remediation-script.sh
# Chạy kịch bản khắc phục (CHÚ Ý: kiểm tra kỹ trước khi chạy trên production!)
sudo bash /tmp/remediation-script.sh
Lưu ý quan trọng: Luôn, luôn, luôn kiểm tra script khắc phục trên staging trước. Mình từng thấy trường hợp script tự động thay đổi cấu hình SSH rồi... khóa luôn người quản trị ra ngoài. Không vui đâu.
Quét lỗ hổng với OpenSCAP
Ngoài quét tuân thủ, OpenSCAP còn hỗ trợ quét lỗ hổng bảo mật bằng dữ liệu OVAL:
# Tải dữ liệu lỗ hổng OVAL cho RHEL
wget https://access.redhat.com/security/data/oval/v2/RHEL9/rhel-9.oval.xml.bz2
bunzip2 rhel-9.oval.xml.bz2
# Quét lỗ hổng
sudo oscap oval eval \
--results /tmp/vuln-results.xml \
--report /tmp/vuln-report.html \
rhel-9.oval.xml
Áp Dụng CIS Benchmarks Vào Thực Tế
Các kiểm tra CIS quan trọng nhất
Không phải tất cả các mục CIS đều có mức độ ưu tiên như nhau. Dưới đây là những kiểm tra quan trọng nhất mà mọi máy chủ Linux production cần đáp ứng.
1. Cấu hình hệ thống tệp:
# Kiểm tra phân vùng riêng cho /tmp
mount | grep " /tmp "
# Kết quả mong đợi: tmpfs on /tmp type tmpfs (rw,nosuid,nodev,noexec)
# Thiết lập mount options an toàn cho /tmp
echo "tmpfs /tmp tmpfs defaults,rw,nosuid,nodev,noexec,relatime 0 0" | sudo tee -a /etc/fstab
# Kiểm tra phân vùng riêng cho /var/log
mount | grep " /var/log "
# Vô hiệu hóa các hệ thống tệp không cần thiết
cat <<EOF | sudo tee /etc/modprobe.d/CIS-filesystem.conf
install cramfs /bin/true
install freevxfs /bin/true
install jffs2 /bin/true
install hfs /bin/true
install hfsplus /bin/true
install squashfs /bin/true
install udf /bin/true
EOF
2. Cấu hình mạng an toàn:
# Thiết lập tham số kernel cho bảo mật mạng
cat <<EOF | sudo tee /etc/sysctl.d/99-cis-network.conf
# Vô hiệu hóa IP forwarding
net.ipv4.ip_forward = 0
# Vô hiệu hóa gửi ICMP redirect
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
# Không chấp nhận source routing
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
# Bật SYN cookies để chống SYN flood
net.ipv4.tcp_syncookies = 1
# Ghi nhật ký các gói tin đáng ngờ
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.default.log_martians = 1
# Không chấp nhận ICMP redirect
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
net.ipv6.conf.default.accept_redirects = 0
# Bật Reverse Path Filtering
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
EOF
# Áp dụng cấu hình
sudo sysctl --system
3. Cấu hình SSH theo CIS:
SSH là cửa ngõ chính vào máy chủ, nên đây là phần bạn phải làm chặt nhất:
# Sao lưu cấu hình SSH hiện tại
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
# Áp dụng các cấu hình CIS cho SSH
cat <<EOF | sudo tee /etc/ssh/sshd_config.d/cis-hardening.conf
# CIS 5.2.4 - Vô hiệu hóa đăng nhập root qua SSH
PermitRootLogin no
# CIS 5.2.6 - Thiết lập MaxAuthTries
MaxAuthTries 4
# CIS 5.2.11 - Thuật toán MAC mạnh
MACs [email protected],[email protected]
# CIS 5.2.12 - Thuật toán mã hóa mạnh
Ciphers [email protected],[email protected],aes256-ctr
# CIS 5.2.13 - Thuật toán trao đổi khóa mạnh
KexAlgorithms curve25519-sha256,[email protected]
# CIS 5.2.16 - Thiết lập thời gian chờ
ClientAliveInterval 300
ClientAliveCountMax 3
# CIS 5.2.5 - Tắt chuyển tiếp X11
X11Forwarding no
# Sử dụng giao thức SSH phiên bản 2
Protocol 2
# Giới hạn người dùng được phép SSH
AllowUsers admin deploy
# Sử dụng xác thực khóa công khai
PubkeyAuthentication yes
PasswordAuthentication no
EOF
# Kiểm tra cấu hình trước khi áp dụng
sudo sshd -t
# Khởi động lại SSH
sudo systemctl restart sshd
Kiểm tra tuân thủ hệ thống ghi nhật ký
Ghi nhật ký nghe có vẻ nhàm chán, nhưng khi xảy ra sự cố thì log chính là thứ cứu bạn. CIS Benchmarks yêu cầu cấu hình audit khá chi tiết:
# Cài đặt và cấu hình auditd
sudo apt install auditd audispd-plugins -y # Debian/Ubuntu
# hoặc
sudo dnf install audit -y # RHEL/CentOS
# Cấu hình quy tắc audit theo CIS
cat <<EOF | sudo tee /etc/audit/rules.d/cis-audit.rules
# Giám sát thay đổi ngày giờ hệ thống
-a always,exit -F arch=b64 -S adjtimex -S settimeofday -k time-change
-a always,exit -F arch=b32 -S adjtimex -S settimeofday -S stime -k time-change
-a always,exit -F arch=b64 -S clock_settime -k time-change
-w /etc/localtime -p wa -k time-change
# Giám sát thay đổi thông tin người dùng/nhóm
-w /etc/group -p wa -k identity
-w /etc/passwd -p wa -k identity
-w /etc/gshadow -p wa -k identity
-w /etc/shadow -p wa -k identity
# Giám sát thay đổi cấu hình mạng
-w /etc/sysconfig/network -p wa -k system-locale
-w /etc/hosts -p wa -k system-locale
# Giám sát sử dụng sudo
-w /var/log/sudo.log -p wa -k actions
# Giám sát thay đổi quy tắc audit
-w /etc/audit/ -p wa -k audit-rules
-w /etc/audisp/ -p wa -k audit-rules
# Đặt quy tắc không thể thay đổi (phải khởi động lại để thay đổi)
-e 2
EOF
# Tải lại quy tắc audit
sudo augenrules --load
sudo systemctl restart auditd
Chiến Lược Kết Hợp Ba Công Cụ Hiệu Quả
Quy trình kiểm tra bảo mật 3 lớp
Dùng một công cụ thôi thì chưa đủ. Để thực sự hiệu quả, bạn nên kết hợp cả ba theo chiến lược phân lớp:
- Lớp 1 — Quét tổng quát với Lynis: Bắt đầu bằng Lynis để có cái nhìn toàn cảnh. Nó phát hiện nhanh các vấn đề rõ ràng nhất và cho điểm tổng thể.
- Lớp 2 — Quét tuân thủ với OpenSCAP: Dùng OpenSCAP đánh giá chi tiết theo CIS Benchmarks hoặc STIG. Đặc biệt hữu ích là khả năng tạo script khắc phục tự động.
- Lớp 3 — Kiểm tra thủ công CIS: Rà soát các mục CIS Benchmark mà công cụ tự động không kiểm tra được — thường là những mục cần đánh giá theo ngữ cảnh cụ thể của tổ chức.
Kịch bản tự động hóa kiểm tra hàng tuần
Dưới đây là script tự động hóa toàn bộ quy trình 3 lớp. Bạn có thể dùng ngay hoặc điều chỉnh cho phù hợp:
#!/bin/bash
# /opt/security-audit/weekly-audit.sh
# Kịch bản kiểm tra bảo mật hàng tuần
AUDIT_DIR="/var/log/security-audits"
DATE=$(date +%Y%m%d_%H%M%S)
REPORT_DIR="${AUDIT_DIR}/${DATE}"
ALERT_EMAIL="[email protected]"
# Tạo thư mục báo cáo
mkdir -p "${REPORT_DIR}"
echo "=== Bắt đầu kiểm tra bảo mật: $(date) ===" | tee "${REPORT_DIR}/audit.log"
# --- Lớp 1: Quét Lynis ---
echo "[1/3] Đang chạy Lynis..." | tee -a "${REPORT_DIR}/audit.log"
lynis audit system --no-colors --quiet \
--logfile "${REPORT_DIR}/lynis.log" \
--report-file "${REPORT_DIR}/lynis-report.dat" \
2>&1 | tee -a "${REPORT_DIR}/audit.log"
# Trích xuất điểm Hardening Index
HARDENING_INDEX=$(grep "hardening_index=" "${REPORT_DIR}/lynis-report.dat" | cut -d= -f2)
echo "Hardening Index: ${HARDENING_INDEX}" | tee -a "${REPORT_DIR}/audit.log"
# --- Lớp 2: Quét OpenSCAP ---
echo "[2/3] Đang chạy OpenSCAP CIS Level 1..." | tee -a "${REPORT_DIR}/audit.log"
SCAP_CONTENT="/usr/share/xml/scap/ssg/content/ssg-$(. /etc/os-release; echo ${ID}${VERSION_ID})-ds.xml"
if [ -f "${SCAP_CONTENT}" ]; then
oscap xccdf eval \
--profile xccdf_org.ssgproject.content_profile_cis_server_l1 \
--results "${REPORT_DIR}/openscap-results.xml" \
--report "${REPORT_DIR}/openscap-report.html" \
"${SCAP_CONTENT}" 2>&1 | tee -a "${REPORT_DIR}/audit.log"
else
echo "CẢNH BÁO: Không tìm thấy nội dung SCAP phù hợp" | tee -a "${REPORT_DIR}/audit.log"
fi
# --- Lớp 3: Kiểm tra CIS thủ công ---
echo "[3/3] Đang kiểm tra CIS bổ sung..." | tee -a "${REPORT_DIR}/audit.log"
# Kiểm tra tệp world-writable
echo "--- Tệp world-writable ---" >> "${REPORT_DIR}/cis-manual.txt"
find / -xdev -type f -perm -0002 -print 2>/dev/null >> "${REPORT_DIR}/cis-manual.txt"
# Kiểm tra tệp SUID/SGID
echo "--- Tệp SUID ---" >> "${REPORT_DIR}/cis-manual.txt"
find / -xdev -type f -perm -4000 -print 2>/dev/null >> "${REPORT_DIR}/cis-manual.txt"
echo "--- Tệp SGID ---" >> "${REPORT_DIR}/cis-manual.txt"
find / -xdev -type f -perm -2000 -print 2>/dev/null >> "${REPORT_DIR}/cis-manual.txt"
# Kiểm tra tài khoản không có mật khẩu
echo "--- Tài khoản không có mật khẩu ---" >> "${REPORT_DIR}/cis-manual.txt"
awk -F: '($2 == "" ) { print $1 }' /etc/shadow >> "${REPORT_DIR}/cis-manual.txt"
# --- Tạo báo cáo tóm tắt ---
echo "=== Kiểm tra hoàn tất: $(date) ===" | tee -a "${REPORT_DIR}/audit.log"
# Gửi cảnh báo nếu Hardening Index dưới ngưỡng
if [ "${HARDENING_INDEX}" -lt 80 ]; then
echo "CẢNH BÁO: Hardening Index = ${HARDENING_INDEX} (dưới ngưỡng 80)" | \
mail -s "[CẢNH BÁO] Kiểm tra bảo mật - Hardening Index thấp" "${ALERT_EMAIL}"
fi
echo "Báo cáo đã được lưu tại: ${REPORT_DIR}"
Thiết lập lịch chạy tự động:
# Chạy kiểm tra mỗi Chủ Nhật lúc 2:00 sáng
echo "0 2 * * 0 root /opt/security-audit/weekly-audit.sh" | sudo tee /etc/cron.d/security-audit
sudo chmod 644 /etc/cron.d/security-audit
Tích Hợp Vào DevSecOps Pipeline
Tích hợp với GitLab CI/CD
Trong DevSecOps, kiểm tra bảo mật phải nằm trong pipeline CI/CD — không phải là việc làm thêm mà là bước bắt buộc. Dưới đây là cấu hình mẫu cho GitLab:
# .gitlab-ci.yml
stages:
- build
- security-scan
- deploy
security-audit:
stage: security-scan
image: registry.access.redhat.com/ubi9/ubi:latest
before_script:
- dnf install -y openscap-scanner scap-security-guide lynis
script:
# Quét Lynis
- lynis audit system --no-colors --quiet --report-file lynis-report.dat
- |
HARDENING_INDEX=$(grep "hardening_index=" lynis-report.dat | cut -d= -f2)
echo "Lynis Hardening Index: ${HARDENING_INDEX}"
if [ "${HARDENING_INDEX}" -lt 70 ]; then
echo "THẤT BẠI: Hardening Index quá thấp"
exit 1
fi
# Quét OpenSCAP
- oscap xccdf eval
--profile xccdf_org.ssgproject.content_profile_cis_server_l1
--results openscap-results.xml
--report openscap-report.html
/usr/share/xml/scap/ssg/content/ssg-rhel9-ds.xml || true
artifacts:
paths:
- lynis-report.dat
- openscap-results.xml
- openscap-report.html
expire_in: 30 days
rules:
- if: $CI_PIPELINE_SOURCE == "schedule"
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
Tích hợp với Ansible cho khắc phục tự động
Ansible kết hợp với các công cụ audit tạo ra một vòng lặp khép kín: quét, phát hiện, sửa, rồi quét lại. Đây là playbook mẫu:
# playbook-security-hardening.yml
---
- name: Kiểm tra và gia cố bảo mật Linux
hosts: all
become: yes
vars:
min_hardening_index: 80
scap_profile: "xccdf_org.ssgproject.content_profile_cis_server_l1"
roles:
# Sử dụng role gia cố từ Ansible Galaxy
- role: devsec.hardening.ssh_hardening
- role: devsec.hardening.os_hardening
tasks:
- name: Cài đặt công cụ kiểm tra bảo mật
package:
name:
- lynis
- openscap-scanner
- scap-security-guide
state: present
- name: Chạy quét Lynis
command: lynis audit system --no-colors --quiet
register: lynis_result
changed_when: false
- name: Thiết lập tham số kernel an toàn
sysctl:
name: "{{ item.key }}"
value: "{{ item.value }}"
sysctl_set: yes
reload: yes
loop:
- { key: "net.ipv4.ip_forward", value: "0" }
- { key: "net.ipv4.conf.all.send_redirects", value: "0" }
- { key: "net.ipv4.conf.all.accept_redirects", value: "0" }
- { key: "net.ipv4.tcp_syncookies", value: "1" }
- { key: "net.ipv4.conf.all.log_martians", value: "1" }
- { key: "net.ipv4.conf.all.rp_filter", value: "1" }
- { key: "kernel.randomize_va_space", value: "2" }
- name: Cấu hình SSH theo CIS Benchmarks
lineinfile:
path: /etc/ssh/sshd_config
regexp: "{{ item.regexp }}"
line: "{{ item.line }}"
validate: "sshd -t -f %s"
loop:
- { regexp: '^#?PermitRootLogin', line: 'PermitRootLogin no' }
- { regexp: '^#?MaxAuthTries', line: 'MaxAuthTries 4' }
- { regexp: '^#?X11Forwarding', line: 'X11Forwarding no' }
- { regexp: '^#?PasswordAuthentication', line: 'PasswordAuthentication no' }
- { regexp: '^#?ClientAliveInterval', line: 'ClientAliveInterval 300' }
- { regexp: '^#?ClientAliveCountMax', line: 'ClientAliveCountMax 3' }
notify: restart sshd
- name: Đảm bảo quyền truy cập tệp nhạy cảm
file:
path: "{{ item.path }}"
mode: "{{ item.mode }}"
owner: root
group: root
loop:
- { path: "/etc/passwd", mode: "0644" }
- { path: "/etc/shadow", mode: "0640" }
- { path: "/etc/group", mode: "0644" }
- { path: "/etc/gshadow", mode: "0640" }
- { path: "/etc/ssh/sshd_config", mode: "0600" }
handlers:
- name: restart sshd
service:
name: sshd
state: restarted
Giám sát liên tục với systemd timer
Thay vì dùng cron truyền thống, systemd timer cho bạn nhiều tính năng hơn như logging tập trung và khả năng chạy bù nếu bỏ lỡ lịch:
# /etc/systemd/system/security-audit.service
[Unit]
Description=Kiểm tra bảo mật tự động
After=network.target
[Service]
Type=oneshot
ExecStart=/opt/security-audit/weekly-audit.sh
StandardOutput=journal
StandardError=journal
# /etc/systemd/system/security-audit.timer
[Unit]
Description=Lịch kiểm tra bảo mật hàng tuần
[Timer]
OnCalendar=Sun 02:00:00
Persistent=true
RandomizedDelaySec=1800
[Install]
WantedBy=timers.target
# Kích hoạt timer
sudo systemctl daemon-reload
sudo systemctl enable --now security-audit.timer
# Kiểm tra trạng thái
sudo systemctl status security-audit.timer
sudo systemctl list-timers security-audit.timer
Xử Lý Các Tình Huống Thực Tế
Tình huống 1: Máy chủ web mới
Khi triển khai máy chủ web mới, đây là quy trình mình thường làm:
- Chạy Lynis ngay sau cài đặt OS để có baseline ban đầu
- Quét OpenSCAP với profile CIS Level 1
- Áp dụng script khắc phục trên staging trước
- Kiểm tra lại bằng cả Lynis và OpenSCAP
- Ghi lại các ngoại lệ — những mục không thể tuân thủ do yêu cầu ứng dụng
- Thiết lập quét tự động hàng tuần
Bước 5 quan trọng lắm, đừng bỏ qua. Không phải lúc nào cũng đạt 100% tuân thủ, nhưng phải biết và ghi nhận rõ ràng những gì mình chấp nhận rủi ro.
Tình huống 2: Chuẩn bị cho kiểm toán bên ngoài
Trước khi đối mặt với audit PCI-DSS, ISO 27001 hay SOC 2, hãy chạy quy trình này:
# Bước 1: Chạy quét toàn diện
sudo lynis audit system --pentest
# Bước 2: Quét tuân thủ PCI-DSS
sudo oscap xccdf eval \
--profile xccdf_org.ssgproject.content_profile_pci-dss \
--results pci-dss-results.xml \
--report pci-dss-report.html \
/usr/share/xml/scap/ssg/content/ssg-rhel9-ds.xml
# Bước 3: Xuất danh sách các mục không tuân thủ
oscap xccdf generate report pci-dss-results.xml > pci-dss-detailed.html
# Bước 4: Tạo và áp dụng kịch bản khắc phục
sudo oscap xccdf generate fix \
--fix-type ansible \
--result-id "" \
pci-dss-results.xml > remediation.yml
# Bước 5: Quét lại sau khi khắc phục để xác nhận
sudo oscap xccdf eval \
--profile xccdf_org.ssgproject.content_profile_pci-dss \
--results pci-dss-results-post.xml \
--report pci-dss-report-post.html \
/usr/share/xml/scap/ssg/content/ssg-rhel9-ds.xml
Tình huống 3: Quản lý ngoại lệ bảo mật
Thực tế là không phải tất cả đề xuất bảo mật đều áp dụng được. Có trường hợp áp dụng sẽ phá vỡ ứng dụng, hoặc đã có biện pháp bù trừ khác. Điều quan trọng là quản lý ngoại lệ một cách có hệ thống:
# Tạo tệp ghi nhận ngoại lệ
cat <<EOF > /opt/security-audit/exceptions.yml
---
security_exceptions:
- rule: "CIS 1.1.2 - /tmp separate partition"
status: "accepted_risk"
reason: "Sử dụng cloud instance với disk layout cố định"
approved_by: "CISO"
review_date: "2026-06-01"
- rule: "CIS 5.2.18 - SSH AllowUsers"
status: "compensating_control"
reason: "Sử dụng LDAP centralized auth thay vì AllowUsers cục bộ"
compensating: "LDAP group restriction + MFA"
approved_by: "Security Team Lead"
review_date: "2026-06-01"
EOF
Mẹo Nâng Cao Và Thực Tiễn Tốt Nhất
Theo dõi kết quả theo thời gian
Một lần quét chỉ cho bạn ảnh chụp tại thời điểm đó. Cái bạn thực sự cần là xu hướng — Hardening Index có đang tăng hay giảm theo thời gian?
#!/bin/bash
# /opt/security-audit/track-index.sh
# Theo dõi Hardening Index theo thời gian
INDEX_LOG="/var/log/security-audits/hardening-index.csv"
# Tạo header nếu tệp chưa tồn tại
if [ ! -f "${INDEX_LOG}" ]; then
echo "date,hostname,hardening_index,warnings,suggestions" > "${INDEX_LOG}"
fi
# Chạy Lynis và trích xuất số liệu
sudo lynis audit system --no-colors --quiet \
--report-file /tmp/lynis-report-track.dat 2>/dev/null
INDEX=$(grep "hardening_index=" /tmp/lynis-report-track.dat | cut -d= -f2)
WARNINGS=$(grep -c "^warning\[\]=" /tmp/lynis-report-track.dat)
SUGGESTIONS=$(grep -c "^suggestion\[\]=" /tmp/lynis-report-track.dat)
# Ghi vào nhật ký
echo "$(date +%Y-%m-%d),$(hostname),${INDEX},${WARNINGS},${SUGGESTIONS}" >> "${INDEX_LOG}"
# Dọn dẹp
rm -f /tmp/lynis-report-track.dat
echo "Hardening Index: ${INDEX} | Cảnh báo: ${WARNINGS} | Đề xuất: ${SUGGESTIONS}"
Tối ưu hóa hiệu suất quét
Khi quản lý nhiều máy chủ, thời gian quét cũng là vấn đề cần quan tâm:
- Lynis: Dùng
--tests-from-groupđể chỉ quét các nhóm quan trọng khi cần kết quả nhanh - OpenSCAP: Dùng
--tailoring-fileđể tạo profile tùy chỉnh, loại bỏ quy tắc không áp dụng - Chiến lược kết hợp: Chạy Lynis hàng ngày (nhanh, nhẹ) và OpenSCAP hàng tuần (chi tiết hơn nhưng nặng hơn)
Bảng so sánh nhanh giữa các công cụ
Để giúp bạn chọn đúng công cụ cho đúng việc:
| Tiêu chí | Lynis | OpenSCAP | CIS-CAT |
|---|---|---|---|
| Loại quét | Kiểm tra tổng quát | Tuân thủ chuẩn SCAP | Tuân thủ CIS Benchmarks |
| Độ phức tạp | Thấp | Trung bình | Thấp-Trung bình |
| Tự động khắc phục | Không (chỉ đề xuất) | Có (Bash/Ansible) | Không |
| Đa nền tảng | Linux, macOS, BSD | Chủ yếu Linux | Linux, Windows |
| Profile tuân thủ | PCI-DSS, HIPAA, GDPR | CIS, STIG, PCI-DSS | CIS Level 1 & 2 |
| Giấy phép | GPL v3 | LGPL v2.1 | Miễn phí (Lite) / Thương mại |
| Phù hợp nhất cho | Kiểm tra nhanh hàng ngày | Audit tuân thủ chính thức | Đánh giá CIS chi tiết |
Kết Luận
Kiểm tra bảo mật Linux không phải chuyện làm một lần rồi quên. Nó là quy trình liên tục — và thành thật mà nói, trong bối cảnh 2026 với CVE tăng vọt và tấn công ngày càng tinh vi, đây không còn là "nice-to-have" nữa.
Chiến lược mà mình khuyến nghị: Lynis cho kiểm tra tổng quát hàng ngày (nhanh, nhẹ, dễ đọc), OpenSCAP cho quét tuân thủ chính thức khi cần báo cáo theo chuẩn, và CIS Benchmarks làm tiêu chuẩn tham chiếu xuyên suốt. Khi tích hợp vào pipeline DevSecOps với Ansible và CI/CD, bạn tạo ra một vòng lặp tự động: phát hiện, khắc phục, kiểm tra lại.
Hãy nhớ: bảo mật tốt nhất không phải là phản ứng sau sự cố, mà là chủ động phòng ngừa. Và ba công cụ này chính là nền tảng vững chắc để bạn bắt đầu.