一、Linux 系统安全基础
1. 用户与权限管理
- 核心原则:
- 最小权限原则:普通用户不使用 root 权限,通过
sudo
分配特定操作权限。 - 用户组隔离:按业务功能划分用户组(如
www-data
、docker
),限制跨组访问。
- 关键操作:
- 禁用闲置账户:
usermod -L <username>
(锁定账户)或删除无用账户:userdel -r <username>
。 - 强密码策略:通过
/etc/pam.d/passwd
配置密码复杂度(如pam_cracklib
模块),强制定期修改密码(chage -M 90 <username>
)。 sudo
配置:编辑/etc/sudoers
,限制用户仅能执行指定命令(如user ALL=(ALL) NOPASSWD: /usr/sbin/service httpd restart
)。
2. 文件系统安全
- 权限控制:
- 重要文件权限示例:
/etc/shadow
(用户密码哈希):权限-rw-------
,仅 root 可读。/etc/sudoers
:权限-rw-r--r--
,需通过visudo
编辑防止语法错误。
- 禁止用户修改关键目录:
chattr +i /etc/passwd
(添加不可变属性,需chattr -i
取消)。
- 文件系统挂载选项:
- 挂载时禁用执行权限:
mount -o noexec /dev/sdb1 /mnt/data
(防止 U 盘恶意文件执行)。 - 启用
nosuid
和nodev
:禁止 SUID 程序和设备文件创建(如/etc/fstab
中设置/home nosuid,nodev
)。
3. 内核安全加固
- 修改
/etc/sysctl.conf
配置:
- 禁止 IP 转发:
net.ipv4.ip_forward = 0
。 - 防范 SYN Flood 破坏:bash
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 4096
- 限制核心转储(Core Dump):
fs.suid_dumpable = 0
(防止敏感数据泄露)。
- 加载安全模块:
- 启用
grsecurity
或PaX
内核补丁(增强内存保护,防范缓冲区溢出)。
二、网络安全防护
1. 防火墙配置
- iptables 基础规则:bash
# 清空默认规则
iptables -F
iptables -X
# 允许本地回环接口
iptables -A INPUT -i lo -j ACCEPT
# 允许已建立的连接回流
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 仅允许SSH(22端口)、HTTP(80)、HTTPS(443)入站
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# 拒绝所有其他入站流量
iptables -P INPUT DROP
# 保存规则(不同发行版命令可能不同,如Debian用iptables-persistent)
service iptables save
- firewalld(CentOS 7 + 推荐):bash
# 添加永久HTTP服务规则
firewall-cmd --permanent --add-service=http
firewall-cmd --reload
2. SELinux 与 AppArmor
- SELinux(Security-Enhanced Linux):
- 模式:
enforcing
(强制模式,拦截违规操作)、permissive
(仅日志记录,不拦截)。 - 查看状态:
sestatus
- 修改文件上下文:
chcon -t httpd_sys_content_t /var/www/html/newfile.txt
(允许 HTTP 服务访问文件)。
- AppArmor(Ubuntu 默认):
- 限制程序行为:
aa-complain /usr/sbin/sshd
(进入警告模式,测试规则)。
3. SSH 安全加固
- 禁止 root 直接登录:编辑
/etc/ssh/sshd_config
,设置PermitRootLogin no
。 - 使用密钥认证:
- 生成密钥对:
ssh-keygen -t rsa -b 4096
- 上传公钥至服务器:
ssh-copy-id user@server
- 禁用密码登录:
PasswordAuthentication no
- 限制登录来源:
AllowUsers user1@192.168.1.*
(仅允许指定 IP 段用户登录)。
三、服务与应用安全
1. Web 服务(如 Apache/Nginx)
- Apache 加固:
- 隐藏版本号:在
httpd.conf
中设置ServerTokens Prod
、ServerSignature Off
。 - 禁用危险模块:
a2dismod autoindex
(关闭目录索引)。
- Nginx 配置示例:nginx
server {
listen 80;
server_name example.com;
return 301 https://$server_name$request_uri; # 强制HTTPS
location / {
deny all; # 默认拒绝所有访问,通过子规则开放特定路径
}
}
2. 数据库服务(如 MySQL/PostgreSQL)
- MySQL 安全措施:
- 禁用远程 root 登录:
UPDATE mysql.user SET Host='localhost' WHERE User='root';
- 启用 SSL 连接:在
my.cnf
中配置require_secure_transport = ON
。
- PostgreSQL 访问控制:编辑
pg_hba.conf
,使用md5
或sCRAM-SHA-256
认证:bash
host all all 127.0.0.1/32 scram-sha-256
3. 软件包管理与bug修复
- 定期更新系统:
- Debian/Ubuntu:
apt update && apt upgrade -y
- RHEL/CentOS:
yum update -y
或dnf update -y
(Fedora)
- bug扫描工具:
yum install yum-plugin-security
(查看可用安全补丁)OpenVAS
或Nessus
扫描系统bug。
四、日志监控与入侵检测
1. 系统日志管理
- 关键日志文件:
- 身份验证日志:
/var/log/auth.log
(记录 SSH 登录、sudo 操作) - 系统服务日志:
/var/log/syslog
(通用系统消息) - Apache/Nginx 日志:
/var/log/apache2/access.log
、/var/log/nginx/error.log
- 集中日志管理:
- 通过
rsyslog
将日志发送至远程服务器:bash
# 在/etc/rsyslog.conf添加
*.* @remote-log-server:514
- 使用 ELK Stack 或
logrotate
进行日志分析和轮转。
2. 入侵检测工具
- OSSEC(开源主机入侵检测系统):
- 监控文件完整性:检测
/etc/passwd
等关键文件修改。 - 实时告警:通过邮件或 API 发送异常行为通知。
- Tripwire:基于文件哈希的完整性检查工具,定期对比文件变化。
- 实时进程监控:bash
ps aux | grep -v grep | awk '{print $11}' | sort -u # 查看异常进程
lsof -i :80 # 查看占用80端口的进程
五、数据安全与加密
1. 磁盘加密
- LUKS(Linux Unified Key Setup):bash
# 加密新分区
cryptsetup luksFormat /dev/sdb1
cryptsetup luksOpen /dev/sdb1 encrypted_data
mkfs.ext4 /dev/mapper/encrypted_data
- 文件级加密:
gpg
加密文件:gpg -c sensitive.txt
(生成加密文件sensitive.txt.gpg
)。ecryptfs
加密用户目录:ecryptfs-setup-private
(自动加密 /home/user 目录)。
2. 传输安全
- 使用
scp
/sftp
替代ftp
/scp
传输文件。 - 配置 VPN(如 OpenVPN)实现安全远程访问:bash
# OpenVPN服务器配置示例
port 1194
proto udp
dev tun
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key
六、安全最佳实践
- 最小化安装:仅安装必要服务,卸载无用软件(如
yum remove httpd
)。 - 禁用不需要的服务:bash
systemctl disable --now telnet.socket # 禁用Telnet服务
systemctl status | grep "enabled" # 检查开机自启服务
- 定期备份:
- 全量备份:
tar -czvf /backup/full_$(date +%F).tar.gz /etc /var/www
- 增量备份:使用
rsync --inplace --backup-dir
。
- 应急响应流程:
- 发现异常进程:使用
kill -9 <PID>
终止,结合netstat -antp
查看连接来源。 - 检查可疑文件:
ls -ltr /tmp
(查看临时目录近期修改文件)、使用rkhunter
扫描 Rootkit。
七、常用 Linux 安全工具列表
类别 |
工具 |
功能描述 |
防火墙 |
iptables/firewalld |
配置网络流量过滤规则 |
入侵检测 |
OSSEC、Tripwire |
监控系统异常和文件篡改 |
bug扫描 |
Lynis、OpenVAS |
检测系统配置缺陷和软件bug |
日志分析 |
Logwatch、GoAccess |
生成日志报告、可视化 Web 访问日志 |
安全审计 |
sudo-audit、auditd |
记录 sudo 操作、系统调用审计 |
加密工具 |
GPG、LUKS |
文件加密、磁盘加密 |
网络监控 |
nmap、tcpdump、iftop |
端口扫描、抓包分析、流量监控 |
八、云环境下的 Linux 安全补充
- 容器安全:
- 使用
Docker Security Scanning
扫描镜像bug。 - 限制容器权限:
docker run --security-opt=no-new-privileges
。
- 云服务商工具:
- AWS:EC2 Instance Metadata Service (IMDSv2) 防窃取元数据。
- 阿里云:开启安全组隔离、使用云盾主机安全。