本腳本旨在自動化執行 Linux 系統基礎安全加固。使用方法:將腳本存為 security.sh,上傳至伺服器,執行 sh security.sh 即可。注意:生產環境執行前務必審閱每項操作,並做好快照備份。
passwd -l xfs news nscd dbus vcsa games nobody avahi haldaemon gopher ftp mailnull pcap mail shutdown halt uucp operator sync adm lp
鎖定無需登入的系統帳號,縮小攻擊面。建議改用 usermod -s /sbin/nologin 並檢查 /etc/passwd 確認無誤。
chattr +i /etc/passwd /etc/shadow /etc/group /etc/gshadow
防止關鍵帳號檔案被竄改。需解鎖時使用 chattr -i。注意:此操作會干擾使用者管理工具(useradd、passwd 等),新增用戶前須先解鎖。
auth required pam_tally.so onerr=fail deny=3 unlock_time=300
連續 3 次認證失敗鎖定 5 分鐘。現代系統建議改用 pam_faillock.so(模組名可能為 pam_faillock),功能更完善。
echo "TMOUT=300" >> /etc/profile
閒置 5 分鐘自動登出。僅對互動式 Shell 生效,不影響服務類進程。
sed -i "s/HISTSIZE=1000/HISTSIZE=10/" /etc/profile
將歷史記錄從 1000 縮減至 10 條。安全與可用性需平衡,建議設為 100-500 並配合 HISTCONTROL=ignoredups:erasedups 去重。
echo "net.ipv4.tcp_syncookies=1" >> /etc/sysctl.conf
sysctl -p
sed -i "s/#MaxAuthTries 6/MaxAuthTries 6/" /etc/ssh/sshd_config
sed -i "s/#UseDNS yes/UseDNS no/" /etc/ssh/sshd_config
systemctl reload sshd
限制最大認證嘗試 6 次,關閉 DNS 反向解析加速登入。強烈建議額外配置:PermitRootLogin no、PubkeyAuthentication yes、PasswordAuthentication no、修改非預設埠。
chmod 700 /bin/ping /usr/bin/finger /usr/bin/who /usr/bin/w /usr/bin/locate /usr/bin/whereis /sbin/ifconfig /usr/bin/pico /bin/vi /usr/bin/which /usr/bin/gcc /usr/bin/make /bin/rpm
僅 root 可執行上述命令。副作用:普通用戶無法使用 ping、vi、gcc 等常用工具,可能嚴重影響開發運維效率。建議改用 sudo 精細授權或僅限制真正高風險命令(如 rpm、ifconfig)。
chattr +a /root/.bash_history # 僅允許追加
chattr +i /root/.bash_history # 設為不可變(與 +a 衝突,實際僅後者生效)
建議僅用 chattr +a 防止刪除竄改,配合 HISTFILESIZE 限制大小。
腳本建立核心命令 MD5 雜湊值存入 /var/log/$(hostname).log,供後續完整性檢查比對。建議改用 aide 或 tripwire 專業完整性檢查工具。
--dry-run 預覽模式/root/security_backup/$(date +%F)security_rollback.sh原腳本涵蓋帳號、檔案、網路、SSH、審計等基礎加固面向,但部分操作過於激進(如命令權限 700)、技術棧略舊(pam_tally、chattr +i 衝突)。實際部署請依據業務場景裁剪調整,並納入變更管理流程。