Linux主机加固知识详解
Linux主机加固是通过配置、优化和限制系统功能,提升服务器安全性,降低被攻击风险的过程。以下是系统化的加固方案,涵盖基础配置、权限管理、服务安全、日志监控等核心内容。
一、系统更新与补丁管理
定期更新软件包
bash
#sudo: 确保显示所有进程的端口(包括 root 权限的进程)。 # Debian/Ubuntu sudo apt update && sudo apt upgrade -y # CentOS/RHEL sudo yum update -y启用自动安全更新
bash
# Debian/Ubuntu(安装unattended-upgrades) sudo apt install unattended-upgrades #--priority=low 优先级选择;low、medium、high、critical sudo dpkg-reconfigure --priority=low unattended-upgrades # CentOS/RHEL(使用yum-cron) sudo yum install yum-cron sudo systemctl enable yum-cron && sudo systemctl start yum-cron移除废弃软件包
bash
sudo apt autoremove && sudo apt clean # Debian/Ubuntu sudo yum autoremove && sudo yum clean all # CentOS/RHEL
二、用户与权限管理
禁用Root直接登录
修改SSH配置:
bash
sudo sed -i 's/^PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config sudo systemctl restart sshd
创建普通用户并授权
bash
sudo useradd -m -s /bin/bash admin sudo passwd admin # 授予sudo权限(Debian/Ubuntu),-a(追加用户到组)、-G(指定组名) sudo usermod -aG sudo admin # CentOS/RHEL sudo usermod -aG wheel admin密码策略强化
修改
/etc/login.defs:bash
#设置密码到期天数 PASS_MAX_DAYS 90 #可用的最少天数 PASS_MIN_DAYS 7 #设置到期警告天数 PASS_WARN_AGE 14
三、SSH安全配置
修改默认端口
bash
sudo sed -i 's/#Port 22/Port 2222/' /etc/ssh/sshd_config启用密钥登录,禁用密码登录
bash
sudo sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config sudo systemctl restart sshd限制SSH访问IP
bash
sudo vim /etc/hosts.allow sshd: 192.168.1.0/24, 10.0.0.5 sudo vim /etc/hosts.deny sshd: ALL安装
libpam-pwquality(Debian/Ubuntu)或libpwquality(CentOS)限制密码复杂度:sudo vim /etc/security/pwquality.conf minlen = 12 dcredit = -1 # 至少1位数字 ucredit = -1 # 至少1位大写字母
四、防火墙配置
使用UFW(Ubuntu)或Firewalld(CentOS)
bash
# Ubuntu # 设置默认策略(需确保已放行SSH) sudo ufw default deny incoming # 放行SSH(例如已配置SSH使用2222端口) sudo ufw allow 2222/tcp # SSH端口 # 放行Web端口 sudo ufw allow 80/tcp # HTTP sudo ufw allow 443/tcp # HTTPS #启用防火墙 sudo ufw enable # CentOS sudo firewall-cmd --permanent --add-port=2222/tcp sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --reload禁用IPv6(如非必要)
bash
sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1 sudo sysctl -w net.ipv6.conf.default.disable_ipv6=1
五、服务与进程管理
停止无用服务
bash
sudo systemctl stop bluetooth cups sudo systemctl disable bluetooth cups检查监听端口
bash
sudo netstat -tulnp sudo ss -tuln ss: 替代 netstat 的现代工具,用于查看网络连接信息。 -t: 显示 TCP 协议 的连接。 -u: 显示 UDP 协议 的连接。 -l: 仅显示 监听(LISTEN) 状态的端口。 -n: 以数字形式显示地址和端口(不解析域名和服务名)。 sudo: 确保显示所有进程的端口(包括 root 权限的进程)。使用chkconfig管理启动项(CentOS 6)
bash
sudo chkconfig --list | grep '3:on' sudo chkconfig <service> off
六、文件系统安全
关键目录权限控制
bash
sudo chmod 700 /root sudo chmod 600 /etc/shadow sudo chmod 644 /etc/passwd启用文件系统保护
挂载选项添加
noexec,nosuid:bash
sudo vim /etc/fstab /dev/sda1 /tmp ext4 defaults,noexec,nosuid 0 0
安装AIDE进行文件完整性检查
bash
sudo apt install aide # Debian/Ubuntu sudo yum install aide # CentOS/RHEL sudo aideinit sudo mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db sudo aide.wrapper --check # 定期检查
七、内核参数调优
修改
/etc/sysctl.confbash
# 防止SYN洪水攻击 net.ipv4.tcp_syncookies = 1 # 禁止ICMP重定向 net.ipv4.conf.all.accept_redirects = 0 # 限制核心转储 fs.suid_dumpable = 0 sudo sysctl -p # 应用配置
八、日志与监控
集中日志管理(rsyslog)
bash
sudo vim /etc/rsyslog.conf *.* @192.168.1.100:514 # 转发到日志服务器 sudo systemctl restart rsyslog安装Fail2ban防御暴力破解
bash
sudo apt install fail2ban # Debian/Ubuntu sudo yum install fail2ban # CentOS/RHEL sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local sudo systemctl enable fail2ban && sudo systemctl start fail2ban
九、安全审计工具
使用Lynis进行自动化审计
bash
sudo apt install lynis # Debian/Ubuntu sudo yum install lynis # CentOS/RHEL sudo lynis audit systemOpenSCAP合规检查
bash
sudo yum install openscap-scanner scap-security-guide # CentOS/RHEL sudo oscap xccdf eval --profile stig-rhel7-disa /usr/share/xml/scap/ssg/content/ssg-rhel7-ds.xml
十、备份与恢复
定期全量备份
bash
sudo tar -czvf /backup/$(date +%F).tar.gz /etc /home /var/www配置自动化备份(cron)
bash
sudo crontab -e 0 2 * * * /usr/bin/tar -czvf /backup/$(date +\%F).tar.gz /etc /home
总结
通过以上步骤,可显著提升Linux主机的安全性。实际环境中需根据业务需求调整配置,并定期进行漏洞扫描与渗透测试。安全加固是一个持续过程,需结合监控、日志分析和应急响应,形成完整的安全防护体系。
遇到的问题
1、kali换源+签名无效问题
wget archive.kali.org/archive-key.asc //下载签名
apt-key add archive-key.asc //安装签名