Linux 安全加固需要從??用戶權限、系統服務、網絡防護、日志審計、文件系統、訪問控制??等多個維度入手,目標是減少攻擊面、限制未授權訪問、提升系統健壯性。以下是??詳細步驟+實操示例??,覆蓋主流 Linux 發行版(如 CentOS/Ubuntu)。
??一、用戶與權限安全:最小權限原則??
用戶和權限是最基礎的安全防線,核心是“??最小權限原則??”(Least Privilege),即用戶僅擁有完成任務所需的最小權限。
1. 禁用或刪除冗余用戶/組
- ??目標??:移除默認無用賬戶(如
nobody
、bin
等),避免被攻擊者利用。 - ??操作??:
# 查看所有用戶(關注 UID < 1000 的系統用戶) cat /etc/passwd | awk -F: '$3 < 1000 {print $1}'# 刪除冗余用戶(示例:刪除 games 用戶) sudo userdel -r games # -r 同時刪除家目錄和郵件# 禁用用戶(不刪除,僅鎖定) sudo passwd -l username # 鎖定 sudo passwd -u username # 解鎖
2. 強制密碼策略
- ??目標??:防止弱密碼(如短密碼、常見密碼)被暴力破解。
- ??操作(以 PAM 模塊為例)??:
編輯/etc/security/pwquality.conf
(CentOS 7+/Ubuntu 18.04+):minlen = 12 # 最小長度 12 位 dcredit = -1 # 至少 1 位數字(負數表示至少) ucredit = -1 # 至少 1 位大寫字母 lcredit = -1 # 至少 1 位小寫字母 ocredit = -1 # 至少 1 位特殊符號(如 !@#$) maxrepeat = 3 # 禁止連續 3 位重復字符
3. 限制 root 遠程登錄
- ??目標??:避免 root 賬戶直接暴露在公網,降低被暴力破解風險。
- ??操作(以 SSH 為例)??:
編輯/etc/ssh/sshd_config
:PermitRootLogin no # 禁止 root 遠程登錄 # 改為允許特定用戶通過 sudo 切換 root(更安全) AllowUsers user1 user2 # 僅允許 user1/user2 遠程登錄
sudo systemctl restart sshd # CentOS/Ubuntu 通用
??二、系統更新與補丁管理:修復已知漏洞??
未修復的系統/軟件漏洞是最常見的攻擊入口,需定期更新。
1. 自動更新配置(以 Ubuntu 為例)
- 啟用無人值守更新(自動安裝安全補丁):
sudo apt install unattended-upgrades sudo dpkg-reconfigure unattended-upgrades # 圖形化配置
/etc/apt/apt.conf.d/50unattended-upgrades
,啟用以下選項:Unattended-Upgrade::Allowed-Origins {"${distro_id}:${distro_codename}";"${distro_id}:${distro_codename}-security"; # 僅安全補丁 };
2. 手動更新(CentOS 示例)
sudo yum update -y # 升級所有包(生產環境建議先測試)
# 或僅升級安全補丁(需安裝 yum-plugin-security)
sudo yum update --security -y
??三、網絡服務與防火墻:最小化暴露面??
關閉不必要的網絡服務,僅開放需要的端口,并通過防火墻嚴格限制訪問。
1. 關閉冗余服務
- ??目標??:減少攻擊面(如未使用的 FTP、Telnet、RPC 等)。
- ??操作??:
# 查看運行中的服務(CentOS 7+/Ubuntu 16.04+ 使用 systemd) systemctl list-units --type=service --state=running# 禁用并停止冗余服務(示例:禁用 telnet) sudo systemctl disable --now telnet.socket # 禁用開機啟動并停止
2. 配置防火墻(以 firewalld 為例,CentOS)
- ??目標??:僅允許必要的端口(如 SSH 22、HTTP 80、HTTPS 443)。
- ??操作??:
# 查看當前規則 sudo firewall-cmd --list-all# 開放 HTTP/HTTPS 端口(永久生效) sudo firewall-cmd --add-service=http --permanent sudo firewall-cmd --add-service=https --permanent# 禁止 ICMP(ping)請求(防掃描) sudo firewall-cmd --add-icmp-block=echo-request --permanent# 重載規則 sudo firewall-cmd --reload
3. 高級防護:使用 fail2ban 防止暴力破解
??目標??:自動封禁多次登錄失敗的 IP。
??操作(以 SSH 為例)??:
# 安裝 fail2ban(CentOS) sudo yum install fail2ban -y# 配置(編輯 /etc/fail2ban/jail.local) [sshd] enabled = true maxretry = 3 # 允許失敗次數 findtime = 600 # 統計時間窗口(秒) bantime = 3600 # 封禁時間(秒,1小時)
重啟服務生效:
sudo systemctl start fail2ban && sudo systemctl enable fail2ban
??四、日志與審計:監控異常行為??
通過日志記錄和分析,及時發現入侵跡象。
1. 啟用詳細日志記錄
- ??目標??:記錄關鍵操作(如 sudo、SSH 登錄、文件修改)。
- ??操作??:
編輯/etc/rsyslog.conf
(或/etc/syslog.conf
),調整日志級別:# 記錄所有 sudo 操作(需配合 auditd) local2.debug /var/log/sudo.log# 記錄 SSH 登錄成功/失敗 authpriv.* /var/log/auth.log # Ubuntu # 或 /var/log/secure (CentOS)
2. 使用 auditd 進行審計(高級)
- ??目標??:監控敏感文件/目錄的訪問(如
/etc/passwd
、/root
)。 - ??操作??:
# 安裝 auditd(CentOS) sudo yum install auditd -y# 添加審計規則(監控 /etc/passwd 的修改) sudo auditctl -w /etc/passwd -p wa -k passwd_changes # wa=寫/屬性變更# 查看審計日志 ausearch -k passwd_changes # 按標簽過濾
3. 日志集中管理(可選)
- ??目標??:避免日志被篡改,便于集中分析。
- ??方案??:使用 ELK(Elasticsearch+Logstash+Kibana)或 Graylog 收集多臺服務器日志。
??五、文件系統與磁盤安全:保護數據完整性??
1. 設置文件/目錄權限
- ??目標??:敏感文件(如
passwd
、shadow
)僅允許 root 讀取。 - ??操作??:
# 查看 /etc/shadow 權限(應僅 root 可讀) ls -l /etc/shadow # 正常輸出:-rw-r----- 1 root shadow ...# 修復權限(示例:設置 /etc/ssh/sshd_config 僅 root 可寫) sudo chmod 600 /etc/ssh/sshd_config # 600=所有者讀寫,其他無權限
2. 掛載選項強化(防數據篡改)
- ??目標??:防止關鍵分區(如
/home
、/var
)被意外或惡意修改。 - ??操作??:編輯
/etc/fstab
,添加noexec
(禁止執行)、nosuid
(禁止 SUID)選項:/dev/sda3 /home ext4 defaults,noexec,nosuid 0 0
??六、高級防護:SELinux/AppArmor??
SELinux(Security-Enhanced Linux)是 Linux 內核的強制訪問控制(MAC)模塊,可限制進程的權限(即使 root 也無法越權)。
1. 啟用 SELinux(CentOS 默認啟用)
??檢查狀態??:
getenforce # 輸出 Enforcing(啟用)、Permissive(警告模式)、Disabled(禁用)
??臨時禁用(測試用)??:
sudo setenforce 0 # 設為 Permissive 模式
??永久啟用??:編輯
/etc/selinux/config
,將SELINUX=disabled
改為SELINUX=enforcing
,重啟生效。
2. SELinux 策略示例(限制 Apache 訪問)
假設 Apache(httpd
)僅需訪問 /var/www/html
,可設置自定義策略:
# 查看當前布爾值(是否允許 Apache 訪問外部網絡)
semanage boolean -l | grep httpd_can_network_connect# 禁止 Apache 訪問外部網絡(增強安全性)
sudo setsebool -P httpd_can_network_connect off
??七、其他關鍵加固項??
??禁用不必要的內核功能??:
編輯/etc/sysctl.conf
,調整內核參數(如禁止 IP 轉發、限制 SYN 洪水攻擊):net.ipv4.ip_forward = 0 # 禁止 IP 轉發(非網關服務器) net.ipv4.tcp_syncookies = 1 # 啟用 SYN Cookie 防御洪水攻擊 net.ipv4.icmp_echo_ignore_broadcasts = 1 # 忽略 ICMP 廣播請求(防 ping 掃描)
生效:
sudo sysctl -p
。??定期備份??:
使用rsync
或tar
備份關鍵數據,結合cron
定時任務(如每日凌晨備份):# 示例:每天 2 點備份 /etc 到 /backup/etc.tar.gz 0 2 * * * tar -czf /backup/etc_$(date +\%F).tar.gz /etc
??禁用 USB 自動掛載??(防惡意設備):
編輯/etc/modprobe.d/disable-usb-storage.conf
:options usb-storage delay_use=1 # 延遲掛載(需手動觸發) # 或完全禁用(需重啟): blacklist usb-storage
??加固效果驗證??
完成上述步驟后,需驗證安全措施是否生效:
- ??檢查開放端口??:
ss -tlnp
或netstat -tlnp
(僅應顯示必要端口)。 - ??測試 root 遠程登錄??:嘗試
ssh root@服務器IP
(應拒絕連接)。 - ??模擬暴力破解??:使用工具(如
hydra
)嘗試登錄,觀察是否觸發 fail2ban 封禁。 - ??查看日志??:檢查
/var/log/auth.log
(Ubuntu)或/var/log/secure
(CentOS)是否有異常登錄記錄。
??總結??
Linux 安全加固是??持續過程??,需結合“最小權限、定期更新、網絡隔離、日志監控”四大原則。實際操作中需根據業務需求調整(如 Web 服務器需開放 80/443,數據庫服務器需限制 3306 僅內網訪問),并定期進行安全審計(如使用 lynis
工具掃描)。