​身份鉴别​​:口令复杂度、登录失败处理、远程访问安全

​访问控制​​:权限最小化、用户权限分离

​安全审计​​:日志审计、行为监控

​入侵防范​​:恶意代码防范、最小服务原则•

​资源控制​​:超时锁定、资源分配限制

1. 账户与口令安全策略

1.1 密码策略配置

修改 /etc/login.defs

# 密码最大有效期
PASS_MAX_DAYS   90
# 密码最小有效期
PASS_MIN_DAYS   1
# 密码最小长度
PASS_MIN_LEN    12
# 密码过期前警告天数
PASS_WARN_AGE   7

1.2 密码复杂度要求

修改 /etc/security/pwquality.conf或 /etc/pam.d/system-auth

# 最小长度
minlen = 12
# 至少包含数字
dcredit = -1
# 至少包含大写字母
ucredit = -1
# 至少包含小写字母
lcredit = -1
# 至少包含特殊字符
ocredit = -1
# 拒绝常见弱密码
dictcheck = 1

1.3 账户锁定策略

修改 /etc/pam.d/system-auth和 /etc/pam.d/password-auth

# 在auth部分添加
auth required pam_tally2.so onerr=fail deny=5 unlock_time=900

# 在account部分添加
account required pam_tally2.so

2. SSH 服务安全加固

2.1 SSH 配置修改 /etc/ssh/sshd_config

# 禁用root直接登录
PermitRootLogin no

# 禁用密码认证,使用密钥登录
PasswordAuthentication no
PubkeyAuthentication yes

# 限制登录用户
AllowUsers admin user1 user2

# 修改默认端口
Port 20222

# 限制登录IP(可选)
AllowGroups ssh-users

# 配置超时时间
ClientAliveInterval 300
ClientAliveCountMax 2

# 禁用空密码
PermitEmptyPasswords no

# 限制最大会话数
MaxSessions 10

# 禁用不安全的算法
KexAlgorithms curve25519-sha256@libssh.org
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com

2.2 重启SSH服务

systemctl restart sshd
ss -tlnp | grep 20222  # 验证新端口

3. 用户与权限管理

3.1 创建管理账户

# 创建管理员账户
useradd -m -s /bin/bash admin
passwd admin  # 设置复杂密码

# 添加sudo权限
usermod -aG wheel admin  # CentOS/RHEL
usermod -aG sudo admin   # Ubuntu/Debian

3.2 权限分离原则

# 检查无密码sudo权限
visudo
# 确保只有必要用户有sudo权限

# 检查SUID/SGID文件
find / -type f -perm /6000 -ls 2>/dev/null
# 移除不必要的SUID/SGID权限
chmod a-s /path/to/file

3.3 禁用无用账户

# 锁定不必要的系统账户
usermod -L games
usermod -L ftp
usermod -L nobody

# 检查可登录用户
awk -F: '($7 != "/sbin/nologin" && $7 != "/bin/false") {print $1}' /etc/passwd

4. 服务与端口管理

4.1 关闭不必要的服务

# 查看运行中的服务
systemctl list-units --type=service --state=running

# 禁用不必要的服务
systemctl stop cups
systemctl disable cups
systemctl stop avahi-daemon
systemctl disable avahi-daemon
systemctl stop postfix
systemctl disable postfix

4.2 防火墙配置

# 启用firewalld
systemctl enable firewalld
systemctl start firewalld

# 开放必要端口
firewall-cmd --permanent --add-port=20222/tcp  # SSH
firewall-cmd --permanent --add-port=80/tcp     # HTTP
firewall-cmd --permanent --add-port=443/tcp    # HTTPS

# 拒绝所有其他入站连接
firewall-cmd --permanent --set-default-zone=drop

# 重载配置
firewall-cmd --reload

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

5. 系统日志与审计

5.1 配置syslog审计

修改 /etc/rsyslog.conf

# 记录认证日志
auth.*;authpriv.* /var/log/secure

# 记录系统重要日志
*.info;mail.none;authpriv.none;cron.none /var/log/messages

# 启用日志轮转
$ModLoad imuxsock
$ModLoad imjournal
$WorkDirectory /var/lib/rsyslog
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$IncludeConfig /etc/rsyslog.d/*.conf

5.2 配置audit审计

安装auditd:

yum install audit -y  # CentOS/RHEL
apt-get install auditd -y  # Ubuntu/Debian

配置 /etc/audit/audit.rules

# 记录用户登录事件
-a always,exit -F arch=b64 -S execve -F path=/bin/login -k user_login

# 记录文件修改事件
-w /etc/passwd -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/gshadow -p wa -k identity
-w /etc/group -p wa -k identity
-w /etc/sudoers -p wa -k identity

# 记录系统调用
-a always,exit -F arch=b64 -S chmod -S fchmod -S fchmodat -k perm_mod
-a always,exit -F arch=b64 -S chown -S fchown -S fchownat -S lchown -k perm_mod

# 记录网络配置变更
-w /etc/hosts -p wa -k network_mod
-w /etc/sysconfig/network -p wa -k network_mod

启动审计服务:

systemctl enable auditd
systemctl start auditd

6. 文件系统安全

6.1 文件权限加固

# 关键目录权限设置
chmod 750 /home/*
chmod 700 /root
chmod 644 /etc/passwd
chmod 600 /etc/shadow
chmod 644 /etc/group
chmod 600 /etc/gshadow

# 配置文件和目录的粘滞位
chmod +t /tmp
chmod +t /var/tmp

# 设置不可修改位(谨慎使用)
chattr +i /etc/passwd
chattr +i /etc/shadow
chattr +i /etc/group
chattr +i /etc/gshadow

6.2 磁盘分区安全

# 查看分区挂载选项
cat /etc/fstab

# 建议的挂载选项
/dev/sda1 / ext4 defaults,nodev,nosuid 1 1
/tmp /tmp tmpfs defaults,nodev,nosuid,noexec 0 0

7. 内核参数安全加固

7.1 修改 /etc/sysctl.conf

# 禁用IP转发
net.ipv4.ip_forward = 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

# 禁用ICMP重定向
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0

# 禁止发送重定向
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0

# 保护SYN洪水攻击
net.ipv4.tcp_syncookies = 1

# 限制核心转储
fs.suid_dumpable = 0

# 禁止访问内核内存
kernel.kptr_restrict = 2

# 随机化内存地址
kernel.randomize_va_space = 2

应用配置:

sysctl -p

8. 恶意代码防范

8.1 安装配置防病毒软件

# 安装ClamAV
yum install epel-release -y
yum install clamav clamav-update -y

# 更新病毒库
freshclam

# 配置定期扫描
echo "0 3 * * * root /usr/bin/clamscan -r / --exclude-dir=/sys --exclude-dir=/proc -l /var/log/clamav/scan.log" >> /etc/crontab

8.2 配置rootkit检测

# 安装rkhunter
yum install rkhunter -y

# 更新数据库
rkhunter --update

# 定期扫描
echo "0 4 * * 0 root /usr/bin/rkhunter --cronjob --report-warnings-only" >> /etc/crontab

9. 资源控制与会话管理

9.1 配置会话超时

修改 /etc/profile和 /etc/bashrc

# 设置会话超时
export TMOUT=900
readonly TMOUT

# 设置历史记录
export HISTSIZE=1000
export HISTFILESIZE=2000
export HISTTIMEFORMAT="%F %T "
export HISTCONTROL=ignoredups

9.2 限制用户资源

修改 /etc/security/limits.conf

# 限制核心文件大小
* hard core 0

# 限制进程数
* soft nproc 1024
* hard nproc 2048

# 限制文件打开数
* soft nofile 65535
* hard nofile 65535

10. 定期安全检查脚本

10.1 创建安全检查脚本

#!/bin/bash
# security-check.sh

echo "=== 二级等保安全检查 ==="
echo "检查时间: $(date)"

echo "1. 检查空密码账户"
awk -F: '($2 == "") {print $1}' /etc/shadow

echo "2. 检查SUID/SGID文件"
find / -type f -perm /6000 -ls 2>/dev/null

echo "3. 检查未授权的setuid程序"
find / -xdev -type f -perm -4000 -print

echo "4. 检查登录用户"
who

echo "5. 检查网络连接"
netstat -tuln

echo "6. 检查进程信息"
ps aux

echo "7. 检查cron任务"
crontab -l

echo "=== 检查完成 ==="

10.2 设置定期执行

# 每天执行安全检查
echo "0 2 * * * root /opt/scripts/security-check.sh >> /var/log/security-check.log" >> /etc/crontab

验证与测试命令

# 检查密码策略
grep "^PASS" /etc/login.defs

# 检查SSH配置
sshd -T | grep -E "(PermitRootLogin|PasswordAuthentication|Port)"

# 检查防火墙状态
firewall-cmd --list-all

# 检查审计日志
ausearch -k identity

# 检查文件权限
ls -la /etc/passwd /etc/shadow

# 检查内核参数
sysctl -a | grep -E "(ip_forward|rp_filter|accept_redirects)"

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐