hoatranlab.io.vn Zalo: 0917516878 Hotline: 0917516878 [email protected]
HoaTranLab Logo HoaTranLab
Linux Bible 11th Edition - Chapter 23

Understanding Basic Linux Security

Bảo mật tài khoản, quyền file, giám sát hệ thống và bảo vệ Linux khỏi các mối đe dọa

Mục Tiêu Chương 23

Sau khi hoàn thành chương này, bạn sẽ nắm vững các kỹ thuật bảo mật cơ bản cho hệ thống Linux

Bảo mật tài khoản người dùng

Giới hạn quyền truy cập root, đặt hạn tài khoản tạm thời, xóa tài khoản không dùng để giảm bề mặt tấn công.

Chính sách mật khẩu mạnh

Sử dụng PAM pwquality, faillock, shadow file để thực thi chính sách mật khẩu phức tạp và chống brute-force.

Bảo mật hệ thống file

chmod, chown, umask, tìm SUID/SGID nguy hiểm và cấu hình mount options an toàn cho filesystem.

Giám sát hệ thống

Sử dụng tripwire/AIDE, rkhunter, clamscan, auditd để phát hiện xâm nhập và giám sát toàn vẹn hệ thống.

Cập nhật bảo mật

Dùng dnf check-update --security, theo dõi CVE và áp dụng patches kịp thời để vá lỗ hổng bảo mật.

Kiểm tra dấu hiệu xâm nhập

Xem xét log hệ thống, quét rootkit, xác minh tính toàn vẹn package và phân tích audit trail.

Lý Thuyết

C1 Bảo Mật Tài Khoản Người Dùng

Nguyên tắc cơ bản

  • Mỗi tài khoản chỉ dùng cho một người duy nhất — đảm bảo trách nhiệm giải trình (accountability)
  • Giới hạn quyền truy cập root: dùng sudo thay vì đăng nhập trực tiếp vào root
  • Mọi lần dùng sudo được ghi lại tại /var/log/secure hoặc systemd journal
  • Đặt ngày hết hạn cho tài khoản tạm thời (interns, consultants)
  • Xóa tài khoản không còn sử dụng để tránh backdoor

Đặt ngày hết hạn tài khoản với usermod

Terminal

# usermod -e 2027-01-01 tim

# chage -l tim | grep Account

Account expires : Jan 01, 2027

Quản lý password aging với chage

Terminal

# Xem thông tin aging hiện tại

# chage -l tim | grep days

Minimum number of days between password change : 0

Maximum number of days between password change : 99999

Number of days of warning before password expires: 7


# Đặt: max 90 ngày, cảnh báo 7 ngày trước

# chage -M 90 -W 7 tim


# Khóa tài khoản 5 ngày sau khi mật khẩu hết hạn

# chage -M 30 -I 5 tim

Cấu hình /etc/login.defs

Terminal — /etc/login.defs

PASS_MAX_DAYS 90

PASS_MIN_DAYS 5

PASS_WARN_AGE 7

PASS_MIN_LEN 12

Khóa / mở khóa tài khoản

Terminal

# Khóa tài khoản

# usermod -L username

# passwd -l username


# Mở khóa tài khoản

# passwd -u username


# Xóa tài khoản và home directory

# userdel -r username

Tìm tài khoản đã hết hạn trong /etc/shadow

Terminal

$ TODAY=$(( $(date --utc +%s) / 86400 ))

$ echo $TODAY

20202

# gawk -F: '{if (($8 > 0) && (ENVIRON["TODAY"] > $8)) print $1,$8}' /etc/shadow

consultant 19005

intern 19005

C2 Bảo Mật Mật Khẩu

/etc/passwd vs /etc/shadow

  • /etc/passwd: Readable bởi tất cả user (-rw-r--r--). Trước đây chứa password hash — không còn an toàn
  • /etc/shadow: Chỉ root đọc được (----------). Chứa password hash SHA-512, thông tin aging
  • Password được hash (one-way) và salt (thêm giá trị ngẫu nhiên trước khi hash) để chống rainbow table
Terminal

# ls -l /etc/passwd /etc/shadow

-rw-r--r--. 1 root root 1644 Feb 2 02:30 /etc/passwd

----------. 1 root root 1049 Feb 2 09:45 /etc/shadow


# tail -2 /etc/shadow

johndoe:$6$jJjdRN9/qELmb8xWM1LgOYGhEIxc/:15364:0:99999:7:::

tim:$6$z760AJ42$QXdhFyndpbVPVM5oVtNHs4B/:15372:5:30:7:16436::

PAM pwquality — Thực thi chính sách mật khẩu

Terminal — /etc/security/pwquality.conf

$ grep -v '^#' /etc/security/pwquality.conf

minlen = 12

dcredit = 2

ucredit = 3

lcredit = 2

difok = 4

# minlen=12: tối thiểu 12 ký tự

# dcredit=2: ít nhất 2 chữ số

# ucredit=3: ít nhất 3 chữ hoa

# lcredit=2: ít nhất 2 chữ thường

# difok=4: ít nhất 4 ký tự khác mật khẩu cũ

PAM faillock — Chống brute-force

Terminal — /etc/security/faillock.conf

$ cat /etc/security/faillock.conf

deny = 5

unlock_time = 300

fail_interval = 900

# deny=5: khóa sau 5 lần nhập sai

# unlock_time=300: tự mở khóa sau 300 giây (5 phút)


# Xem trạng thái faillock của user

# faillock --user username

# Reset faillock

# faillock --user username --reset

C3 Bảo Mật Hệ Thống File

chmod và umask

Terminal

# Phân quyền octal

$ chmod 750 /script.sh

rwxr-x--- (owner: rwx, group: r-x, other: ---)


# umask mặc định 022 → file tạo ra có 644, dir có 755

# umask bảo mật hơn 027 → file có 640, dir có 750

$ umask 027

$ umask

0027

Tìm file nguy hiểm có bit SUID/SGID

Terminal

# Tìm tất cả file có SUID hoặc SGID bit

# find / -perm /4000 -o -perm /2000 2>/dev/null

/usr/bin/sudo

/usr/bin/passwd

/usr/bin/su

/usr/bin/newgrp


# Chỉ tìm SUID (chạy với quyền owner)

# find / -perm -4000 -type f 2>/dev/null | xargs ls -la

Mount options bảo mật trong /etc/fstab

Terminal — /etc/fstab

/dev/sda3 /tmp ext4 defaults,noexec,nosuid,nodev 0 0

/dev/sda4 /var ext4 defaults,nosuid 0 0

# noexec: không cho chạy binary từ /tmp

# nosuid: bỏ qua SUID/SGID bit trên filesystem này

# nodev: không cho dùng device files

File immutability với chattr

Terminal

# Làm file không thể sửa/xóa dù là root

# chattr +i /etc/resolv.conf

# lsattr /etc/resolv.conf

----i--------e-- /etc/resolv.conf


# Gỡ bỏ immutable flag

# chattr -i /etc/resolv.conf

C4 Bảo Mật Phần Mềm và Dịch Vụ

  • Nguyên tắc minimal install: chỉ cài những gì cần thiết
  • Tắt các dịch vụ không dùng để thu hẹp attack surface
  • Theo dõi CVE (Common Vulnerabilities and Exposures) thường xuyên
  • Áp dụng security patches kịp thời
Terminal

# Kiểm tra cập nhật bảo mật chưa áp dụng

# dnf check-update --security

kernel.x86_64 5.14.0-427.28.1.el9_4 baseos

openssl.x86_64 3.0.7-28.el9_4 baseos


# Xem danh sách advisory bảo mật

# dnf updateinfo list security


# Áp dụng toàn bộ security updates

# dnf update --security


# Kiểm tra các service đang chạy

# systemctl list-units --state=running --type=service

sshd.service loaded active running OpenSSH server daemon

firewalld.service loaded active running firewalld


# Tắt service không cần thiết

# systemctl disable --now cups.service

C5 Giám Sát Hệ Thống và Phát Hiện Xâm Nhập

AIDE — Advanced Intrusion Detection Environment

AIDE tạo database checksum của các file quan trọng. Sau đó so sánh định kỳ để phát hiện thay đổi trái phép.

Terminal — AIDE

# Cài đặt AIDE

# dnf install aide -y


# Khởi tạo database ban đầu (baseline)

# aide --init

AIDE initialized database at /var/lib/aide/aide.db.new.gz

# cp /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz


# Kiểm tra toàn vẹn so với baseline

# aide --check

AIDE found differences between database and filesystem!

Changed: /etc/passwd

Changed: /etc/shadow

rkhunter — Rootkit Hunter

Terminal — rkhunter

# Cập nhật database rootkit

# rkhunter --update

[ Rootkit Hunter version 1.4.6 ]

Checking rkhunter data files...

Checking file mirrors.dat [ Updated ]


# Chạy kiểm tra toàn diện

# rkhunter --checkall

System checks summary

=====================

File properties checks: Passed

Rootkit checks: Passed

Application checks: Passed

ClamAV — Quét virus

Terminal — ClamAV

# Cập nhật signature database

# freshclam


# Quét thư mục /home recursively

# clamscan -r /home

----------- SCAN SUMMARY -----------

Known viruses: 8677143

Scanned files: 4523

Infected files: 0

auditd — Linux Audit Framework

Terminal — auditd

# Xem các audit rules đang áp dụng

# auditctl -l

-a always,exit -F arch=b64 -S open -k file_access


# Thêm rule: theo dõi truy cập /etc/passwd

# auditctl -w /etc/passwd -p wa -k passwd_changes


# Tìm kiếm sự kiện theo key

# ausearch -k passwd_changes


# Tạo báo cáo tổng hợp

# aureport --auth

Authentication Report

============================================

yes 42 root ssh 192.168.1.10 1234

Lab Thực Hành

Kiểm tra bảo mật cơ bản cho Linux server — thực hành từng bước theo thứ tự

1

Kiểm tra các tài khoản người dùng

Liệt kê tất cả tài khoản có UID >= 1000 (tài khoản người dùng thường, không phải system account)

Terminal

$ cat /etc/passwd | awk -F: '$3>=1000{print}'

alice:x:1000:1000:Alice Smith:/home/alice:/bin/bash

bob:x:1001:1001:Bob Jones:/home/bob:/bin/bash

consultant:x:1002:1002::/home/consultant:/bin/bash

2

Kiểm tra mật khẩu và expiry

Xem thông tin aging của từng tài khoản và nội dung trong shadow file

Terminal

# chage -l alice

Last password change : Mar 15, 2025

Password expires : Jun 13, 2025

Password inactive : never

Account expires : never

Minimum days between change : 5

Maximum days between change : 90

Number of days of warning : 7


# grep alice /etc/shadow

alice:$6$XxYy...:19800:5:90:7:::

3

Tìm file có quyền SUID/SGID nguy hiểm

Xác định các file có SUID bit — chạy với quyền của owner dù user bình thường gọi

Terminal

# find / -perm /4000 2>/dev/null

/usr/bin/sudo

/usr/bin/passwd

/usr/bin/su

/usr/bin/newgrp

/usr/bin/chfn

/tmp/suspicious_binary <-- NGUY HIỂM! Điều tra ngay

4

Cấu hình chính sách mật khẩu với PAM

Xem và điều chỉnh các tham số trong pwquality.conf để thực thi mật khẩu mạnh

Terminal

# cat /etc/security/pwquality.conf

minlen = 12

dcredit = -1

ucredit = -1

lcredit = -1

ocredit = -1

difok = 4

maxrepeat = 3

# Giá trị âm = số lượng tối thiểu bắt buộc

5

Cấu hình faillock

Thiết lập giới hạn đăng nhập sai để chặn tấn công brute-force

Terminal

# cat /etc/security/faillock.conf

deny = 5

unlock_time = 300

fail_interval = 900

audit


# Kiểm tra user bị khóa

# faillock --user alice

alice:

When Type Source Valid

2025-03-20 10:30:05 TTY ssh V

6

Kiểm tra filesystem mounts

Xác minh các partition quan trọng được mount với options bảo mật

Terminal

# cat /etc/fstab | grep -E 'noexec|nosuid'

/dev/sda3 /tmp ext4 defaults,noexec,nosuid,nodev 0 0

/dev/sda5 /var ext4 defaults,nosuid 0 0


# Xác minh mount options đang áp dụng

$ mount | grep /tmp

/dev/sda3 on /tmp type ext4 (rw,nosuid,nodev,noexec,relatime)

7

Chạy rkhunter để kiểm tra rootkit

Quét hệ thống tìm rootkit, backdoor và các file binary bị thay đổi

Terminal

# rkhunter --checkall --report-warnings-only

[ Rootkit Hunter version 1.4.6 ]

Checking system commands...

/usr/bin/awk [ OK ]

/usr/bin/basename [ OK ]

Checking for rootkits...

Suckit Rootkit [ Not found ]

Adore Rootkit [ Not found ]

System checks summary: No warnings found.

8

Thiết lập AIDE

Khởi tạo baseline database và thực hiện kiểm tra toàn vẹn hệ thống file

Terminal

# Bước 1: Khởi tạo database

# aide --init

AIDE initialized database at /var/lib/aide/aide.db.new.gz

# cp /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz


# Bước 2: Kiểm tra (chạy định kỳ qua cron)

# aide --check

AIDE found differences between database and filesystem!

Summary:

Total number of files: 45231

Added files: 0

Removed files: 0

Changed files: 2

Changed: /etc/passwd

Changed: /etc/group

Câu Hỏi Ôn Tập

10 câu hỏi củng cố kiến thức về bảo mật Linux cơ bản

1

Sự khác nhau giữa /etc/passwd và /etc/shadow là gì?

/etc/passwd có thể đọc bởi mọi user (permissions: -rw-r--r--), chứa thông tin tài khoản cơ bản nhưng KHÔNG chứa password hash. /etc/shadow chỉ root đọc được (permissions: ----------), chứa password hash SHA-512 đã được salt, cùng với thông tin aging (ngày đổi mật khẩu, ngày hết hạn, số ngày cảnh báo...). Tách biệt này bảo vệ hash khỏi bị đọc bởi rainbow table attacks.

2

Lệnh nào dùng để đặt ngày hết hạn mật khẩu cho user?

Dùng lệnh chage với các tùy chọn: chage -M 90 -W 7 username — đặt tối đa 90 ngày trước khi phải đổi, cảnh báo 7 ngày trước. Hoặc dùng chage -M 30 -I 5 username để khóa tài khoản 5 ngày sau khi mật khẩu hết hạn. Lệnh chage -l username để xem thông tin hiện tại.

3

umask 027 có nghĩa là gì với file permissions?

umask 027 nghĩa là: file mới tạo sẽ có permissions 640 (rw-r-----), directory mới tạo sẽ có 750 (rwxr-x---). Tính bằng cách lấy max permissions (666 cho file, 777 cho dir) trừ đi umask (027): file = 666-027 = 640, dir = 777-027 = 750. "Other" (người ngoài group) không có quyền gì cả — an toàn hơn umask mặc định 022.

4

Tại sao SUID bit trên file nhị phân có thể gây rủi ro bảo mật?

SUID (Set User ID) bit khiến chương trình chạy với quyền của owner file thay vì user đang gọi. Nếu một binary thuộc root có SUID và có lỗ hổng (buffer overflow, command injection...), attacker có thể lợi dụng để thực thi lệnh với quyền root — dù chỉ là user thường. Đây là kỹ thuật privilege escalation phổ biến. Cần kiểm tra định kỳ bằng find / -perm /4000 và loại bỏ SUID trên các file không cần thiết.

5

PAM faillock hoạt động như thế nào?

faillock theo dõi số lần đăng nhập thất bại của mỗi user. Khi vượt quá ngưỡng deny (mặc định 5 lần) trong khoảng thời gian fail_interval (900 giây), tài khoản bị khóa tạm thời. Sau unlock_time giây (300 = 5 phút), tài khoản tự mở lại. Admin có thể dùng faillock --user username --reset để mở ngay. Cơ chế này bảo vệ khỏi brute-force attacks.

6

Sự khác nhau giữa rkhunter và AIDE?

rkhunter (Rootkit Hunter): Chuyên phát hiện rootkit, backdoor, và so sánh binary hệ thống với known-good hashes từ database của nó. Tập trung vào phát hiện malware đã biết. AIDE (Advanced Intrusion Detection Environment): Tạo baseline checksum của toàn bộ filesystem, sau đó so sánh định kỳ để phát hiện BẤT KỲ thay đổi nào — dù là thêm/xóa/sửa file. AIDE phát hiện cả thay đổi không mong muốn không nhất thiết là malware.

7

Lệnh nào kiểm tra các cập nhật bảo mật chưa áp dụng?

Trên RHEL/Fedora/CentOS dùng: dnf check-update --security — liệt kê các package có security updates. dnf updateinfo list security — xem danh sách advisory kèm mã CVE. dnf update --security — áp dụng tất cả security updates. Nên tích hợp vào cron job để tự động kiểm tra hàng ngày và gửi email cảnh báo khi có patches mới.

8

Tại sao mount /tmp với tùy chọn noexec?

/tmp là thư mục có thể ghi bởi mọi user — attacker thường upload malware hoặc exploit script vào đây. Option noexec ngăn không cho thực thi bất kỳ binary nào từ /tmp, kể cả khi file đã được chmod +x. Kết hợp với nosuid (bỏ qua SUID bit) và nodev (không cho dùng device files), đây là lớp bảo vệ quan trọng chống privilege escalation qua /tmp.

9

chattr +i làm gì với một file?

chattr +i đặt thuộc tính immutable (bất biến) cho file. Khi đó, không ai — kể cả root — có thể sửa, xóa, rename, hay tạo hard link tới file đó cho đến khi thuộc tính được gỡ bỏ bằng chattr -i. Hữu ích để bảo vệ file cấu hình quan trọng như /etc/resolv.conf, /etc/hosts. Dùng lsattr để xem các attributes hiện tại.

10

Auditd được dùng để làm gì trong Linux security?

auditd là Linux Audit Framework — ghi lại chi tiết các sự kiện bảo mật: ai đọc/ghi file nào, ai dùng lệnh gì, thay đổi quyền, đăng nhập thành công/thất bại... Dùng auditctl để thêm rules theo dõi, ausearch để tìm kiếm sự kiện theo keyword/user/file, aureport để tạo báo cáo tổng hợp. Audit logs được lưu tại /var/log/audit/audit.log và rất quan trọng cho forensics và compliance (PCI-DSS, HIPAA).