Linux系统安全

用户与权限安全

用户安全策略

# 检查空密码账户
sudo awk -F: '($2 == "") {print $1}' /etc/shadow
 
# 检查UID为0的账户(除root外不应有其他账户)
awk -F: '($3 == 0) {print $1}' /etc/passwd
 
# 锁定不常用的账户
usermod -L username
 
# 设置密码策略
chage -M 90 username                 # 密码最大有效期
chage -m 7 username                  # 密码最小使用天数
chage -W 7 username                  # 密码过期前警告

sudo权限管理

# 编辑sudo配置
visudo
 
# 常用配置示例
# 允许用户执行特定命令
username ALL=(ALL) /usr/bin/systemctl restart nginx
 
# 允许组执行所有命令(需要密码)
%wheel ALL=(ALL) ALL
 
# 允许组执行所有命令(不需要密码)
%admin ALL=(ALL) NOPASSWD: ALL
 
# 禁止使用sudo执行某些命令
username ALL=(ALL) ALL, !/usr/bin/su, !/usr/bin/bash

文件权限加固

# 关键文件权限设置
chmod 600 /etc/shadow                # 只有root可读写
chmod 644 /etc/passwd                # 所有用户可读
chmod 600 /etc/gshadow
chmod 644 /etc/group
 
# 设置SUID/SGID检查
find / -perm -4000 -type f -exec ls -la {} \; 2>/dev/null
 
# 查找无主文件
find / -nouser -o -nogroup 2>/dev/null
 
# 查找可写文件
find / -perm -002 -type f 2>/dev/null

SSH安全加固

sshd_config安全配置

# 编辑配置文件
sudo vim /etc/ssh/sshd_config
 
# 推荐安全配置
Port 2222                            # 更改默认端口
PermitRootLogin no                   # 禁止root登录
PasswordAuthentication no            # 禁用密码认证
PubkeyAuthentication yes             # 启用密钥认证
PermitEmptyPasswords no              # 禁止空密码
MaxAuthTries 3                       # 最大认证尝试次数
MaxSessions 5                        # 最大会话数
ClientAliveInterval 300              # 连接保活检测
ClientAliveCountMax 2                # 保活检测次数
LoginGraceTime 60                    # 登录超时
AllowUsers user1 user2               # 限制允许登录的用户
AllowGroups ssh-users                # 限制允许登录的组
 
# 重启SSH服务
sudo systemctl restart sshd

SSH密钥管理

# 生成强密钥
ssh-keygen -t ed25519 -a 100         # Ed25519密钥(推荐)
ssh-keygen -t rsa -b 4096 -o -a 100  # RSA密钥
 
# 使用密钥认证
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@host
 
# 禁用特定用户的SSH登录
echo "DenyUsers username" >> /etc/ssh/sshd_config

fail2ban防护

# 安装fail2ban
apt install fail2ban                 # Debian/Ubuntu
yum install fail2ban                 # RHEL/CentOS
 
# 配置文件 /etc/fail2ban/jail.local
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3                         # 最大尝试次数
findtime = 600                       # 检测时间窗口(秒)
bantime = 3600                       # 封禁时间(秒)
 
# 启动服务
systemctl enable fail2ban
systemctl start fail2ban
 
# 查看封禁状态
fail2ban-client status sshd

防火墙安全

iptables基础规则

# 清空现有规则
iptables -F
iptables -X
 
# 默认策略(先允许所有,避免锁定)
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
 
# 允许回环接口
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
 
# 允许已建立的连接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
 
# 允许SSH
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
 
# 允许HTTP/HTTPS
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
 
# 防止SYN攻击
iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 3 -j ACCEPT
 
# 防止端口扫描
iptables -A INPUT -m recent --name portscan --rcheck --seconds 300 -j DROP
 
# 最后拒绝所有其他输入
iptables -A INPUT -j DROP
 
# 保存规则
iptables-save > /etc/iptables/rules.v4

防火墙日志

# 记录被拒绝的连接
iptables -A INPUT -j LOG --log-prefix "IPTables-Dropped: " --log-level 4
iptables -A INPUT -j DROP
 
# 查看防火墙日志
tail -f /var/log/kern.log | grep "IPTables"

系统审计

auditd审计系统

# 安装auditd
apt install auditd
yum install audit
 
# 配置审计规则 /etc/audit/rules.d/audit.rules
 
# 监控文件变更
-w /etc/passwd -p wa -k passwd_changes
-w /etc/shadow -p wa -k shadow_changes
-w /etc/sudoers -p wa -k sudoers_changes
 
# 监控用户切换
-w /usr/bin/su -p x -k su_usage
-w /usr/bin/sudo -p x -k sudo_usage
 
# 监控网络配置变更
-w /etc/network/ -p wa -k network_config
 
# 系统调用监控
-a always,exit -F arch=b64 -S chmod -S chown -F auid>=1000 -F auid!=4294967295 -k perm_mod
 
# 重启服务
systemctl restart auditd
 
# 查看审计日志
ausearch -k passwd_changes
aureport --file
aureport --user

日志监控

# 监控登录失败
grep "Failed password" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr
 
# 监控sudo使用
grep "sudo:" /var/log/auth.log
 
# 监控用户切换
grep "session opened" /var/log/auth.log
 
# 持续监控日志
tail -f /var/log/auth.log | grep -E "Failed|Invalid|Break"

安全加固清单

系统服务加固

# 禁用不必要的服务
systemctl disable bluetooth
systemctl disable cups
systemctl disable avahi-daemon
 
# 查看监听端口
ss -tunlp
 
# 查看运行的服务
systemctl list-units --type=service --state=running

内核安全参数

# 编辑 /etc/sysctl.conf
 
# 防止SYN攻击
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_synack_retries = 2
 
# 禁用IP转发
net.ipv4.ip_forward = 0
 
# 禁用ICMP重定向
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
 
# 禁用源路由
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
 
# 启用反向路径过滤
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
 
# 应用配置
sysctl -p

文件完整性检查

# 安装AIDE
apt install aide                    # Debian/Ubuntu
yum install aide                    # RHEL/CentOS
 
# 初始化数据库
aide --init
 
# 更新数据库
mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db
 
# 检查文件变更
aide --check
 
# 更新数据库
aide --update

安全扫描工具

端口扫描

# 使用nmap扫描
nmap -sT -O localhost               # TCP扫描和系统检测
nmap -sS -sV localhost              # SYN扫描和版本检测
 
# 检查开放端口
netstat -tunlp
ss -tunlp

漏洞扫描

# 使用Lynis进行安全审计
apt install lynis
lynis audit system
 
# 查看报告
less /var/log/lynis.log

恶意软件检测

# 安装rkhunter
apt install rkhunter
 
# 更新数据库
rkhunter --update
 
# 扫描系统
rkhunter --check
 
# 安装ClamAV
apt install clamav clamav-daemon
 
# 更新病毒库
freshclam
 
# 扫描目录
clamscan -r /home

💡 安全建议:

  • 定期更新系统和软件包,修补漏洞
  • 使用强密码和多因素认证
  • 最小权限原则,限制用户权限
  • 定期审计系统日志和安全事件
  • 及时备份重要数据

🔗 相关笔记: 02.03_系统管理 02.04_网络管理 11.01_性能优化