2026-01-23
最近更新:Linux基础教程 第18课:Linux云计算基础
2026-01-23
2026-01-23
2026-01-23
最近更新:Linux基础教程 第15课:Linux内核和驱动管理
2026-01-21
浏览量:24 次 发布时间:2026-01-18 14:59 作者:明扬工控商城 下载docx
2026-01-23
最近更新:Linux基础教程 第18课:Linux云计算基础
2026-01-23
2026-01-23
2026-01-23
最近更新:Linux基础教程 第15课:Linux内核和驱动管理
2026-01-21
好的,我们继续第十课。今天学习Linux安全基础和权限管理,这是保护系统安全的核心知识。
第一部分:用户和组的安全管理
1.1 安全原则:最小权限原则
最小权限原则:每个用户和程序只能获得完成工作所需的最小权限。
1.2 查看敏感文件权限
bash
# 查看关键系统文件的权限
ls -l /etc/passwd
ls -l /etc/shadow
ls -l /etc/sudoers
ls -l /etc/ssh/sshd_config
# 这些文件应该只有root能修改
# /etc/passwd: 644 (rw-r--r--)
# /etc/shadow: 600 (rw-------)
# /etc/sudoers: 440 (r--r-----)
1.3 检查用户账户安全
bash
# 检查空密码账户
sudo awk -F: '($2 == "") {print $1}' /etc/shadow
# 检查UID为0的用户(除了root不应该有)
sudo awk -F: '($3 == 0) {print $1}' /etc/passwd
# 检查没有密码过期限制的用户
sudo awk -F: '($5 == 99999) {print $1}' /etc/shadow
# 检查可登录的账户
sudo awk -F: '($7 != "/sbin/nologin" && $7 != "/bin/false") {print $1}' /etc/passwd
1.4 密码策略配置
bash
# 安装密码策略工具
sudo apt install libpam-pwquality
# 配置密码策略
sudo vim /etc/pam.d/common-password
# 添加或修改:password requisite pam_pwquality.so retry=3 minlen=12 difok=3
# 编辑pwquality配置
sudo vim /etc/security/pwquality.conf
示例配置:
text
minlen = 12 # 最小长度12位
dcredit = -1 # 至少1个数字
ucredit = -1 # 至少1个大写字母
lcredit = -1 # 至少1个小写字母
ocredit = -1 # 至少1个特殊字符
minclass = 4 # 至少包含4种字符类型
maxrepeat = 3 # 相同字符最多连续3个
1.5 设置账户过期和锁定
bash
# 设置密码过期策略
sudo chage -M 90 username # 90天必须修改密码
sudo chage -W 7 username # 过期前7天提醒
sudo chage -I 30 username # 过期后30天锁定账户
# 查看密码过期信息
sudo chage -l username
# 立即锁定账户
sudo passwd -l username
sudo usermod -L username
# 解锁账户
sudo passwd -u username
sudo usermod -U username
# 设置账户过期时间
sudo usermod -e 2024-12-31 username # 指定日期过期
第二部分:文件系统安全
2.1 文件权限深度理解
bash
# 查看文件的完整权限信息
ls -la file.txt
# 输出:-rwxr-xr-x 1 user group 1024 Jan 1 12:00 file.txt
# 第一个字符:文件类型
# - 普通文件
# d 目录
# l 符号链接
# c 字符设备
# b 块设备
# s socket文件
# p 管道文件
2.2 SUID、SGID和Sticky Bit
SUID(Set User ID):执行时以文件所有者身份运行
bash
# 设置SUID(所有者执行位变成s)
chmod u+s file
chmod 4755 file # 数字设置
# 查看SUID文件(可能有安全风险)
find / -type f -perm -4000 2>/dev/null | head -20
SGID(Set Group ID):目录中新建文件继承目录的组
bash
# 设置SGID(组执行位变成s)
chmod g+s directory
chmod 2755 directory # 数字设置
# 查看SGID文件
find / -type f -perm -2000 2>/dev/null | head -20
Sticky Bit:只有文件所有者能删除自己的文件
bash
# 设置Sticky Bit(其他人执行位变成t)
chmod o+t directory
chmod 1777 directory # 数字设置,如/tmp目录
2.3 特殊权限的安全风险
bash
# 检查危险权限的文件
# 任何人都可写的文件
find / -type f -perm -0002 ! -path "/proc/*" 2>/dev/null | head -20
# SUID/SGID的可执行文件
find / -type f \( -perm -4000 -o -perm -2000 \) 2>/dev/null
# 查找没有所有者的文件
find / -nouser -o -nogroup 2>/dev/null | head -20
# 检查home目录权限
ls -ld /home/*
# 每个用户的家目录应该是700或750
2.4 文件属性扩展(chattr)
bash
# 安装工具
sudo apt install e2fsprogs
# 添加不可删除属性(即使是root)
sudo chattr +i important_file.txt
# 添加只能追加属性(日志文件)
sudo chattr +a /var/log/syslog
# 查看文件属性
lsattr important_file.txt
# 移除属性
sudo chattr -i important_file.txt
# 常用属性:
# a:只能追加,不能删除或修改
# i:不可修改,不可删除,不可重命名
# A:不更新访问时间
# S:同步写入
第三部分:SELinux和AppArmor
3.1 SELinux(安全增强Linux)
bash
# 检查SELinux状态
getenforce
sestatus
# 安装SELinux工具
sudo apt install selinux-utils selinux-basics
# 切换模式
sudo setenforce 0 # 宽容模式(Permissive)
sudo setenforce 1 # 强制模式(Enforcing)
# 永久设置
sudo vim /etc/selinux/config
# 修改:SELINUX=enforcing 或 SELINUX=permissive
# 查看SELinux日志
sudo ausearch -m avc -ts recent
# 查看文件的安全上下文
ls -Z /etc/passwd
ps -Z # 查看进程的安全上下文
3.2 AppArmor(Ubuntu默认)
bash
# 检查AppArmor状态
sudo apparmor_status
# 启用/禁用配置文件
sudo aa-enforce /etc/apparmor.d/usr.sbin.nginx
sudo aa-complain /etc/apparmor.d/usr.sbin.nginx
sudo aa-disable /etc/apparmor.d/usr.sbin.nginx
# 重新加载配置
sudo systemctl reload apparmor
# 查看AppArmor日志
sudo dmesg | grep apparmor
sudo journalctl -u apparmor --since today
3.3 创建简单的AppArmor配置文件
bash
# 1. 创建配置文件
sudo vim /etc/apparmor.d/usr.local.myapp
输入内容:
text
#include <tunables/global>
/usr/local/bin/myapp {
#include <abstractions/base>
# 允许读写自己的日志文件
/var/log/myapp.log rw,
# 允许读取配置文件
/etc/myapp.conf r,
# 允许网络连接
network inet tcp,
# 拒绝其他所有访问
deny /** rwlkx,
}
bash
# 2. 加载配置文件
sudo apparmor_parser -r /etc/apparmor.d/usr.local.myapp
# 3. 设置为enforce模式
sudo aa-enforce /etc/apparmor.d/usr.local.myapp
第四部分:SSH安全加固
4.1 基本SSH安全配置
bash
# 备份原始配置
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup
# 编辑SSH配置
sudo vim /etc/ssh/sshd_config
推荐配置:
bash
# 修改默认端口(避免22端口扫描)
Port 2222
# 禁用root登录
PermitRootLogin no
# 使用密钥认证,禁用密码认证
PasswordAuthentication no
PubkeyAuthentication yes
# 限制登录用户
AllowUsers alice bob charlie
# 或 AllowGroups ssh-users
# 限制登录IP(可选)
AllowUsers alice@192.168.1.* bob@10.0.0.*
# 限制最大尝试次数
MaxAuthTries 3
MaxSessions 5
# 启用空闲超时
ClientAliveInterval 300
ClientAliveCountMax 2
# 禁用不安全的认证方法
ChallengeResponseAuthentication no
UsePAM yes
# 只允许使用安全的协议
Protocol 2
# 禁用端口转发(如不需要)
AllowTcpForwarding no
4.2 SSH密钥管理
bash
# 生成更强的密钥
ssh-keygen -t ed25519 -a 100 -f ~/.ssh/id_ed25519
# 或
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa_strong
# 在authorized_keys中限制密钥使用
vim ~/.ssh/authorized_keys
# 添加限制选项:
# command="限制命令":只能执行特定命令
# from="192.168.1.*":只允许从特定IP连接
# no-port-forwarding:禁用端口转发
# no-X11-forwarding:禁用X11转发
# no-agent-forwarding:禁用代理转发
# 示例:
from="192.168.1.*",command="/usr/bin/backup-script",no-port-forwarding,no-X11-forwarding ssh-ed25519 AAAAC3...
4.3 使用Fail2Ban防止暴力破解
bash
# 安装Fail2Ban
sudo apt install fail2ban
# 复制默认配置
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
# 编辑配置
sudo vim /etc/fail2ban/jail.local
添加配置:
ini
[sshd]
enabled = true
port = ssh,2222 # 修改为你使用的端口
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
findtime = 600
bash
# 启动服务
sudo systemctl start fail2ban
sudo systemctl enable fail2ban
# 查看状态
sudo fail2ban-client status
sudo fail2ban-client status sshd
# 手动解封IP
sudo fail2ban-client set sshd unbanip 192.168.1.100
第五部分:防火墙深度配置
5.1 UFW高级配置
bash
# 默认策略
sudo ufw default deny incoming # 默认拒绝所有入站
sudo ufw default allow outgoing # 默认允许所有出站
# 允许特定IP范围
sudo ufw allow from 192.168.1.0/24 to any port 22
sudo ufw allow from 10.0.0.0/8 to any port 3306
# 限制访问频率
sudo ufw limit 22/tcp # 限制SSH连接尝试
# 允许特定网络接口
sudo ufw allow in on eth0 to any port 80
# 删除规则
sudo ufw status numbered
sudo ufw delete 3 # 删除编号3的规则
# 应用配置
sudo ufw disable # 临时禁用
sudo ufw enable # 启用
sudo ufw reload # 重新加载
5.2 使用iptables(底层防火墙)
bash
# 查看当前规则
sudo iptables -L -n -v
# 保存iptables规则
sudo iptables-save > /etc/iptables.rules
# 恢复规则
sudo iptables-restore < /etc/iptables.rules
# 设置开机加载
sudo vim /etc/rc.local
# 添加:iptables-restore < /etc/iptables.rules
# 常用规则示例:
# 允许已建立的连接
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 允许本地回环
sudo iptables -A INPUT -i lo -j ACCEPT
# 允许SSH(端口2222)
sudo iptables -A INPUT -p tcp --dport 2222 -j ACCEPT
# 允许HTTP/HTTPS
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# 默认策略
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
第六部分:系统审计和监控
6.1 使用auditd审计系统
bash
# 安装auditd
sudo apt install auditd audispd-plugins
# 启动服务
sudo systemctl start auditd
sudo systemctl enable auditd
# 查看审计规则
sudo auditctl -l
# 添加审计规则
sudo auditctl -w /etc/passwd -p wa -k passwd_change
sudo auditctl -w /etc/shadow -p wa -k shadow_change
sudo auditctl -w /etc/sudoers -p wa -k sudoers_change
sudo auditctl -a always,exit -F arch=b64 -S open -S openat -F success=0 -k file_access_fail
# 查看审计日志
sudo ausearch -k passwd_change
sudo ausearch --start today
# 生成报告
sudo aureport
sudo aureport -f # 文件访问报告
sudo aureport -au # 认证报告
6.2 安全扫描工具
bash
# 安装安全扫描工具
sudo apt install lynis chkrootkit rkhunter
# 使用Lynis进行安全审计
sudo lynis audit system
# 检查rootkit
sudo chkrootkit
sudo rkhunter --check
# 安装ClamAV进行病毒扫描
sudo apt install clamav clamav-daemon
sudo freshclam # 更新病毒库
sudo clamscan -r /home # 扫描home目录
6.3 系统完整性检查
bash
# 安装AIDE(高级入侵检测环境)
sudo apt install aide aide-common
# 初始化数据库
sudo aideinit
sudo mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db
# 手动检查
sudo aide --check
# 更新数据库(修改系统后)
sudo aide --update
sudo mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db
# 定时检查
sudo vim /etc/cron.daily/aide-check
aide-check脚本内容:
bash
#!/bin/bash
/usr/bin/aide --check > /var/log/aide/check_$(date +%Y%m%d).log 2>&1
if [ $? -ne 0 ]; then
echo "AIDE检测到文件变更!" | mail -s "AIDE Alert" admin@example.com
fi
第七部分:安全实践和加固
7.1 系统加固检查清单
bash
# 1. 禁用不必要的服务
sudo systemctl list-unit-files --type=service | grep enabled
sudo systemctl disable unnecessary-service
# 2. 移除不必要的软件包
sudo apt list --installed | grep -E '(telnet|rsh|rlogin|ftp|nfs|ypserv)'
sudo apt purge telnetd rsh-server
# 3. 配置内核安全参数
sudo vim /etc/sysctl.conf
添加以下内容:
bash
# 防止SYN洪水攻击
net.ipv4.tcp_syncookies = 1
# 不响应ICMP广播,避免被放大攻击
net.ipv4.icmp_echo_ignore_broadcasts = 1
# 忽略ICMP重定向
net.ipv4.conf.all.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
# 禁止转发源路由数据包
net.ipv4.conf.all.accept_source_route = 0
net.ipv6.conf.all.accept_source_route = 0
# 开启反向路径过滤
net.ipv4.conf.all.rp_filter = 1
# 记录可疑数据包
net.ipv4.conf.all.log_martians = 1
bash
# 应用配置
sudo sysctl -p
7.2 文件和目录安全基线
bash
# 创建安全基线脚本
vim security_baseline.sh
脚本内容:
bash
#!/bin/bash
echo "=== 文件权限安全检查 ==="
# 检查关键文件权限
check_file() {
file="$1"
expected="$2"
actual=$(stat -c "%a" "$file" 2>/dev/null)
if [ "$actual" != "$expected" ]; then
echo "警告: $file 权限为 $actual (应为 $expected)"
fi
}
check_file /etc/passwd "644"
check_file /etc/shadow "600"
check_file /etc/group "644"
check_file /etc/sudoers "440"
echo "=== SUID/SGID文件检查 ==="
find / -type f \( -perm -4000 -o -perm -2000 \) ! -path "/proc/*" 2>/dev/null | head -20
echo "=== 任何人都可写的文件 ==="
find / -type f -perm -0002 ! -path "/proc/*" 2>/dev/null | head -10
echo "=== 检查完成 ==="
7.3 用户活动监控
bash
# 安装监控工具
sudo apt install acct
# 启用进程记账
sudo systemctl enable acct
sudo systemctl start acct
# 查看用户命令历史
sudo lastcomm username
# 查看用户登录记录
last
lastlog
# 实时监控用户活动
sudo watch -n 1 'w; echo; ps auxf'
第八部分:应急响应
8.1 入侵检测步骤
bash
# 1. 检查当前登录用户
w
who
last
# 2. 检查异常进程
ps aux --sort=-%cpu | head -20
ps aux --sort=-%mem | head -20
ps aux | grep -E '(crypt|miner|backdoor|bot)'
# 3. 检查网络连接
sudo netstat -tulnp
sudo ss -tulnp
sudo lsof -i
# 4. 检查定时任务
crontab -l
ls -la /etc/cron*
cat /etc/crontab
# 5. 检查启动项
ls -la /etc/init.d/
ls -la /etc/systemd/system/
# 6. 检查最近修改的文件
find / -type f -mtime -1 ! -path "/proc/*" ! -path "/sys/*" 2>/dev/null | head -20
8.2 安全事件响应流程
隔离系统:断开网络连接
收集证据:保存日志和可疑文件
分析影响:确定受影响的范围
清除威胁:移除恶意软件
恢复系统:从备份恢复或重装
总结经验:改进安全措施
第九部分:练习任务
练习1:SSH安全加固
修改SSH默认端口为2222
禁用root登录
配置密钥认证,禁用密码认证
限制允许登录的用户
配置Fail2Ban保护SSH
练习2:文件权限审计
检查系统中所有SUID/SGID文件
检查任何人都可写的文件
检查关键系统文件的权限
修正不安全的权限设置
练习3:创建安全基线
编写脚本检查系统安全配置
设置定期安全扫描任务
配置日志监控和报警
练习4:应急响应演练
模拟发现可疑进程
执行入侵检查步骤
记录并分析结果
今日总结
今天我们学习了:
用户和组安全:密码策略、账户锁定、权限检查
文件系统安全:特殊权限、文件属性、权限审计
安全模块:SELinux和AppArmor配置
SSH安全:端口修改、密钥认证、防暴力破解
防火墙:UFW和iptables配置
系统审计:auditd、安全扫描、完整性检查
安全实践:系统加固、监控、应急响应
安全重要原则:
最小权限原则
纵深防御(多层防护)
定期审计和更新
及时备份和恢复计划
安全是一个持续的过程,不是一次性的任务。建议定期检查和更新安全配置。
有问题吗?完成练习后,我们可以继续第十一课:性能监控和优化。
将本文的Word文档下载到电脑
推荐度: