系统安全 #

一、用户安全 #

1.1 密码策略 #

bash
# 查看密码策略
chage -l username

# 设置密码过期时间
sudo chage -M 90 username

# 设置密码最小长度
sudo vim /etc/security/pwquality.conf
# minlen = 12

# 密码复杂度要求
# dcredit = -1  # 至少 1 个数字
# ucredit = -1  # 至少 1 个大写字母
# lcredit = -1  # 至少 1 个小写字母
# ocredit = -1  # 至少 1 个特殊字符

# 锁定用户
sudo passwd -l username

# 解锁用户
sudo passwd -u username

1.2 登录控制 #

bash
# 查看登录失败次数
sudo faillog -a

# 重置失败次数
sudo faillog -r username

# 锁定账户(失败次数过多)
sudo faillog -l username

# 配置登录限制
sudo vim /etc/security/faillock.conf
# deny = 5
# unlock_time = 900

# 查看登录历史
last
lastb    # 失败登录
lastlog  # 最后登录时间

1.3 sudo 配置 #

bash
# 编辑 sudoers
sudo visudo

# 基本配置
username ALL=(ALL) ALL

# 无密码 sudo
username ALL=(ALL) NOPASSWD: ALL

# 限制命令
username ALL=(ALL) /usr/bin/apt, /usr/bin/systemctl

# 组权限
%wheel ALL=(ALL) ALL

# 日志记录
Defaults logfile="/var/log/sudo.log"

1.4 SSH 安全 #

bash
# 编辑 SSH 配置
sudo vim /etc/ssh/sshd_config

# 禁用 root 登录
PermitRootLogin no

# 使用密钥认证
PubkeyAuthentication yes
PasswordAuthentication no

# 修改默认端口
Port 2222

# 限制登录用户
AllowUsers user1 user2
AllowGroups ssh-users

# 空密码禁止
PermitEmptyPasswords no

# 登录超时
ClientAliveInterval 300
ClientAliveCountMax 2

# 最大认证尝试
MaxAuthTries 3

# 重启 SSH 服务
sudo systemctl restart sshd

二、文件安全 #

2.1 文件权限 #

bash
# 查看权限
ls -la

# 修改权限
chmod 750 file
chmod -R 755 directory

# 修改所有者
chown user:group file
chown -R user:group directory

# 特殊权限
chmod u+s file    # SUID
chmod g+s dir     # SGID
chmod +t dir      # Sticky bit

# 查找 SUID 文件
find / -perm -4000 2>/dev/null

# 查找可写文件
find / -perm -0002 -type f 2>/dev/null

2.2 文件属性 #

bash
# 查看属性
lsattr file

# 设置不可修改
sudo chattr +i file

# 取消不可修改
sudo chattr -i file

# 设置只追加
sudo chattr +a file

# 取消只追加
sudo chattr -a file

# 查看已设置属性的文件
sudo lsattr -R / | grep -E "^-"

2.3 文件加密 #

bash
# 使用 GPG 加密
gpg -c file

# 解密
gpg file.gpg

# 使用 openssl 加密
openssl enc -aes-256-cbc -salt -in file -out file.enc

# 解密
openssl enc -aes-256-cbc -d -in file.enc -out file

# 使用 age 加密
age -p -o file.age file

# 解密
age -d file.age > file

2.4 文件完整性 #

bash
# 计算文件哈希
md5sum file
sha256sum file
sha512sum file

# 验证文件完整性
md5sum -c checksum.md5
sha256sum -c checksum.sha256

# 创建校验文件
md5sum file > file.md5
sha256sum file > file.sha256

# 使用 AIDE 检测文件变化
sudo apt install aide
sudo aide --init
sudo aide --check

三、网络安全 #

3.1 防火墙配置 #

UFW (Ubuntu):

bash
# 启用防火墙
sudo ufw enable

# 默认策略
sudo ufw default deny incoming
sudo ufw default allow outgoing

# 允许端口
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

# 允许 IP
sudo ufw allow from 192.168.1.100

# 允许 IP 访问指定端口
sudo ufw allow from 192.168.1.100 to any port 22

# 拒绝端口
sudo ufw deny 23/tcp

# 查看状态
sudo ufw status verbose

# 删除规则
sudo ufw delete allow 80/tcp

firewalld (CentOS):

bash
# 启动服务
sudo systemctl start firewalld
sudo systemctl enable firewalld

# 查看状态
sudo firewall-cmd --state

# 开放端口
sudo firewall-cmd --add-port=80/tcp --permanent
sudo firewall-cmd --reload

# 开放服务
sudo firewall-cmd --add-service=http --permanent

# 查看规则
sudo firewall-cmd --list-all

# 移除端口
sudo firewall-cmd --remove-port=80/tcp --permanent

3.2 iptables 高级配置 #

bash
# 查看规则
sudo iptables -L -n -v

# 允许已建立的连接
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# 允许本地回环
sudo iptables -A INPUT -i lo -j ACCEPT

# 允许 SSH
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# 允许 HTTP/HTTPS
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# 防止 SYN 攻击
sudo iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 3 -j ACCEPT

# 防止端口扫描
sudo iptables -A INPUT -m recent --name scanners --set
sudo iptables -A INPUT -m recent --name scanners --rcheck --seconds 60 -j DROP

# 保存规则
sudo iptables-save > /etc/iptables/rules.v4

3.3 端口扫描防护 #

bash
# 安装 fail2ban
sudo apt install fail2ban

# 配置
sudo vim /etc/fail2ban/jail.local

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600

# 启动服务
sudo systemctl start fail2ban
sudo systemctl enable fail2ban

# 查看状态
sudo fail2ban-client status sshd

四、SELinux #

4.1 SELinux 基础 #

bash
# 查看 SELinux 状态
sestatus
getenforce

# 临时设置模式
sudo setenforce 0    # Permissive
sudo setenforce 1    # Enforcing

# 永久设置
sudo vim /etc/selinux/config
SELINUX=enforcing

4.2 SELinux 上下文 #

bash
# 查看文件上下文
ls -Z file

# 查看进程上下文
ps -eZ

# 查看端口上下文
semanage port -l

# 修改文件上下文
sudo chcon -t httpd_sys_content_t /var/www/html/file

# 恢复默认上下文
sudo restorecon -Rv /var/www/html/

# 添加端口上下文
sudo semanage port -a -t http_port_t -p tcp 8080

4.3 SELinux 策略 #

bash
# 查看 SELinux 日志
sudo ausearch -m AVC -ts recent

# 分析日志
sudo audit2why < /var/log/audit/audit.log

# 生成策略模块
sudo audit2allow -a -M mypolicy

# 安装策略模块
sudo semodule -i mypolicy.pp

# 列出策略模块
sudo semodule -l

# 查看 SELinux 布尔值
getsebool -a

# 设置布尔值
sudo setsebool httpd_can_network_connect on
sudo setsebool -P httpd_can_network_connect on

五、审计系统 #

5.1 auditd 配置 #

bash
# 安装 auditd
sudo apt install auditd

# 启动服务
sudo systemctl start auditd
sudo systemctl enable auditd

# 查看状态
sudo systemctl status auditd

# 配置文件
sudo vim /etc/audit/auditd.conf

5.2 审计规则 #

bash
# 查看规则
sudo auditctl -l

# 监控文件访问
sudo auditctl -w /etc/passwd -p wa -k passwd_changes

# 监控目录
sudo auditctl -w /var/log/ -p wa -k log_changes

# 监控系统调用
sudo auditctl -a always,exit -F arch=b64 -S execve

# 监控用户
sudo auditctl -a always,exit -F uid=1000 -S execve

# 永久规则
sudo vim /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

# 重启服务
sudo systemctl restart auditd

5.3 查看审计日志 #

bash
# 查看审计日志
sudo ausearch -m AVC -ts recent
sudo ausearch -k passwd_changes
sudo ausearch -ua username

# 生成报告
sudo aureport
sudo aureport --file
sudo aureport --user
sudo aureport --summary

# 实时监控
sudo tail -f /var/log/audit/audit.log

六、日志安全 #

6.1 日志管理 #

bash
# 查看系统日志
sudo tail -f /var/log/syslog
sudo tail -f /var/log/auth.log
sudo tail -f /var/log/kern.log

# 查看服务日志
sudo journalctl -u nginx
sudo journalctl -u sshd

# 查看所有日志
sudo journalctl

# 实时查看
sudo journalctl -f

# 按时间过滤
sudo journalctl --since "2024-01-01"
sudo journalctl --until "2024-01-02"

# 按优先级过滤
sudo journalctl -p err

6.2 日志轮转 #

bash
# 查看配置
cat /etc/logrotate.conf
ls /etc/logrotate.d/

# 手动轮转
sudo logrotate -f /etc/logrotate.d/nginx

# 测试配置
sudo logrotate -d /etc/logrotate.d/nginx

# 自定义轮转配置
sudo vim /etc/logrotate.d/myapp
/var/log/myapp/*.log {
    daily
    rotate 7
    compress
    delaycompress
    missingok
    notifempty
    create 0640 www-data adm
}

6.3 日志分析 #

bash
# 分析登录失败
sudo grep "Failed password" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr

# 分析 SSH 攻击
sudo grep "Invalid user" /var/log/auth.log | awk '{print $10}' | sort | uniq -c | sort -nr

# 分析 sudo 使用
sudo grep "sudo" /var/log/auth.log

# 分析系统错误
sudo grep -i "error\|fail\|critical" /var/log/syslog

七、安全加固 #

7.1 系统加固 #

bash
# 禁用不必要的服务
sudo systemctl disable service_name
sudo systemctl stop service_name

# 禁用不必要端口
sudo netstat -tulpn
sudo ss -tulpn

# 更新系统
sudo apt update && sudo apt upgrade

# 安装安全更新
sudo apt install unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades

# 检查弱密码
sudo john /etc/shadow

# 检查空密码
sudo awk -F: '($2 == "") {print $1}' /etc/shadow

7.2 内核加固 #

bash
# 编辑 sysctl 配置
sudo vim /etc/sysctl.conf

# 禁用 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

# 启用 SYN cookies
net.ipv4.tcp_syncookies = 1

# 应用配置
sudo sysctl -p

7.3 安全扫描 #

bash
# 安装 Lynis
sudo apt install lynis

# 执行安全审计
sudo lynis audit system

# 查看报告
sudo lynis show details

# 安装 OpenVAS
sudo apt install openvas

# 初始化
sudo gvm-setup

# 启动服务
sudo gvm-start

八、实践练习 #

8.1 练习一:SSH 加固 #

bash
# 1. 修改 SSH 端口
sudo vim /etc/ssh/sshd_config
# Port 2222

# 2. 禁用 root 登录
# PermitRootLogin no

# 3. 禁用密码认证
# PasswordAuthentication no

# 4. 重启服务
sudo systemctl restart sshd

8.2 练习二:防火墙配置 #

bash
# 1. 启用防火墙
sudo ufw enable

# 2. 允许 SSH
sudo ufw allow 2222/tcp

# 3. 允许 HTTP/HTTPS
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

# 4. 查看状态
sudo ufw status verbose

8.3 练习三:审计配置 #

bash
# 1. 安装 auditd
sudo apt install auditd

# 2. 添加审计规则
sudo auditctl -w /etc/passwd -p wa -k passwd_changes

# 3. 查看规则
sudo auditctl -l

# 4. 查看日志
sudo ausearch -k passwd_changes

九、小结 #

本章学习了 Linux 系统安全的核心内容,包括用户安全、文件安全、网络安全和审计日志。

关键要点:

  1. 强密码策略和登录控制是基础
  2. SSH 加固是远程安全的关键
  3. 防火墙是网络安全的第一道防线
  4. SELinux 提供强制访问控制
  5. 审计系统记录所有安全相关事件

下一章预告: 性能调优 - 学习 Linux 系统性能优化技术。

最后更新:2026-03-27