Linux 安全加固:操作系统加固、数据库防护与云端安全审计实践
嗯,用户让我总结这篇文章的内容,控制在一百个字以内,而且不需要用“文章内容总结”之类的开头。直接写描述就行。我得先仔细读一下文章,看看主要讲了什么。 文章开头提到Linux系统安全是IT环境的核心,强调合理配置和精细化管理的重要性。然后分两大部分,第一部分是基本安全原则,包括最小权限、最少软件、健壮性、合规性和加密传输。第二部分详细讲操作系统的安全配置,特别是账号和口令管理,包括禁用无用账号、检查空口令和弱口令、UID检查、密码策略、登录失败锁定等等。 所以,总结的时候要涵盖Linux系统安全的重要性,基本原则和具体配置措施。控制在一百字以内的话,需要简洁明了。 可能的结构是:首先说明主题,然后列出关键点。比如,“本文探讨Linux系统安全的重要性及具体措施,涵盖最小权限原则、账号管理、密码策略等关键配置。” 这样既涵盖了主题又点出了主要内容,符合用户的要求。 </think> 本文探讨了Linux系统安全的重要性及具体措施,涵盖最小权限原则、账号管理、密码策略等关键配置。 2025-10-30 03:48:6 Author: www.freebuf.com(查看原文) 阅读量:7 收藏

Linux 系统安全是整个 IT 环境安全的核心环节,唯有通过合理的配置与精细化管理 Linux 服务器,才能最大限度降低应用系统面临的安全风险。本文旨在指导其完成 Linux 操作系统与 MySQL 数据库的安全合规性检查及加固工作,满足操作系统与数据库层面的等保测评、审计合规、年度审查等需求。

一、基本安全原则

所有 Linux 用户与管理员均应遵循以下核心安全原则,为系统安全奠定基础:

  • 最小权限原则:为用户与应用分配 “刚好满足需求” 的最小权限,例如禁止非授权账户拥有 Sudo 权限、禁止 Daemon(守护进程)账号具备登录权限等,避免权限过度分配引发的安全风险。
  • 最少软件原则:减少系统漏洞的最直接方式是不安装非必需软件。在满足业务需求的前提下,以最简模式部署 Linux 服务器,不额外安装冗余软件,从源头缩减攻击面。
  • 健壮性原则:CentOS 等主流 Linux 发行版自带 SELinux(强制访问控制)、Iptables(防火墙)等安全功能,这些工具能有效保障系统安全并具备威胁发现能力,应充分启用并合理配置。
  • 合规性原则:确保所有操作符合安全规范,例如不使用 ftp、telnet 等不安全服务,禁止滥用 root 权限,普通账户需执行 root 权限操作时,统一通过 sudo 命令实现并留存操作记录。
  • 尽可能加密传输:在网络环境中,只要性能与管理条件允许,均应采用加密传输协议(如 SSH、HTTPS、SFTP 等),防止数据在传输过程中被窃取或篡改。

二、操作系统安全配置

(一)账号和口令管理

在类 Unix 系统中,攻击者若获取特定 Shell 访问权限,可能引发严重安全问题。因此需通过严格策略限制账号使用,尤其保护 Root 账号权限不被非法获取。

1. 禁用或删除无用账号

减少系统中无用账号数量,降低被利用的风险,可通过以下命令操作:

userdel -r <用户名>   # 彻底删除不必要的账号(含家目录)
passwd -l <用户名>    # 锁定暂时无需使用的账号,禁止登录
passwd -u <用户名>    # 对需要恢复使用的账号进行解锁

2. 检查空口令账号

空口令账号是重大安全隐患,需定期检查并为其设置密码:

awk -F: '($2 == "") {print}' /etc/shadow    # 检查系统中存在空密码的用户

发现空口令账号后,执行passwd <用户名>命令为其设置符合复杂度要求的密码。

3. 检查弱口令账号

弱口令易被暴力破解,需询问管理员是否存在简单密码配置,例如root/root、test/test、root/root1234等,若存在需立即强制修改。

4. 检查 UID 为 0 的账号

UID 为 0 的用户拥有系统最高特权(与 root 权限等同),需确保仅 root 用户的 UID 为 0:

awk -F: '($3 == "0") {print}' /etc/passwd   # 列出所有UID为0的账号,排查非root特权账号

5. 检查系统服务账号

系统服务账号(UID 通常在 0-500 之间)无需登录权限,需检查是否存在可登录的服务账号:

awk -F: '{print $1 ":" $3 ":" $7}' /etc/passwd  # 查看账号名称、UID及登录Shell

对明确的系统账号,执行以下命令锁定账号并禁用 Shell:

usermod --lock <用户名>          # 锁定账号
usermod -s /sbin/nologin <用户名> # 将登录Shell设为/sbin/nologin,禁止登录

6. 设置密码复杂度及过期策略 [审计项]

采用静态口令认证的设备,需满足 “口令长度至少 8 位、包含数字 / 小写字母 / 大写字母 / 特殊符号中至少 3 类、每 90 天更换 1 次” 的要求。具体配置如下:

推荐密码策略

  • 密码最短长度:8 位
  • 密码复杂度:开启(强制包含多类字符)
  • 最大失败登录次数:3 次
  • 密码有效期:90 天
  • 密码历史:禁止使用近 3 次已用密码
  • 空闲时间自动登出:15 分钟
  • 强制修改初始密码:开启

针对新创建用户(修改 /etc/login.defs)

sed -i '/^PASS_MAX_DAYS/c PASS_MAX_DAYS   90' /etc/login.defs  # 密码最长使用天数
sed -i '/^PASS_MIN_DAYS/c PASS_MIN_DAYS   1' /etc/login.defs   # 密码最短使用天数(避免频繁修改)
sed -i '/^PASS_MIN_LEN/c PASS_MIN_LEN    8' /etc/login.defs    # 密码最小长度
sed -i '/^PASS_WARN_AGE/c PASS_WARN_AGE   7' /etc/login.defs   # 密码到期前7天提醒
cat /etc/login.defs | grep PASS  # 验证配置结果

针对已存在账号(使用 chage 命令)

# 将用户“test”的密码最短使用天数设为7、最长90天,2030年1月1日过期,过期前7天提醒
chage -m 7 -M 90 -E 2030-01-01 -W 7 <用户名>

7. 设置连续登录失败锁定

通过 PAM(可插拔认证模块)配置登录失败锁定规则,防止暴力破解:

CentOS 7 限制 tty 登录(仅本地终端)

vim /etc/pam.d/login
# 在auth行最上方添加以下内容(登录失败3次,锁定5分钟,含root账号)
auth required pam_tally2.so deny=3 lock_time=300 even_deny_root root_unlock_time=300

CentOS 7 限制远程登录(SSH)[审计项]

vim /etc/pam.d/sshd
# 在auth行最上方添加以下内容(规则同上,作用于SSH远程登录)
auth required pam_tally2.so deny=3 unlock_time=300 even_deny_root root_unlock_time=300

查看登录失败次数与解锁账号

pam_tally2 --user root  # 查看root账号的登录失败次数
pam_tally2 -r -u root   # 重置root账号的登录失败次数(解锁)

8. 设置历史密码重用及密码复杂度 [审计项]

禁止使用近期已用密码,并强制密码复杂度,需修改/etc/pam.d/system-auth文件:

cat /etc/pam.d/system-auth | grep password  # 查看当前密码配置

推荐配置

password  requisite  pam_cracklib.so retry=5 difok=3 minlen=8 dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1 dictpath=/usr/share/cracklib/pw_dict
password  sufficient  pam_unix.so md5 shadow nullok try_first_pass use_authtok remember=3
password  required  pam_deny.so

参数解析

  • retry=5:修改密码时允许重试 5 次
  • difok=3:新密码与旧密码需至少 3 个字符不同
  • minlen=8:新密码最小长度为 8 位
  • dcredit=-1:至少包含 1 个数字(负号表示 “最少”,正号表示 “最多”)
  • ucredit=-1:至少包含 1 个大写字母
  • lcredit=-1:至少包含 1 个小写字母
  • ocredit=-1:至少包含 1 个特殊符号
  • dictpath:指定密码字典路径,避免使用字典中的常见密码
  • remember=3:禁止使用最近 3 次已使用的密码

9. 将非登录用户的 Shell 设为 /sbin/nologin [审计项]

系统中部分账号(如 sync、shutdown、halt)仅用于执行特定功能,无需登录权限,需修改其登录 Shell:

sermod -s /sbin/nologin sync
usermod -s /sbin/nologin shutdown
usermod -s /sbin/nologin halt
cat /etc/passwd | egrep "(sync|shutdown|halt)"  # 验证配置结果

10. 设置 Shell 超时登录 [审计项]

若系统仅通过 Shell 登录(无 X Windows 图形界面),需设置空闲超时自动登出(15 分钟 = 900 秒):

# 修改/etc/profile文件,启用并设置TMOUT
sed -i "s/#TMOUT/TMOUT/" /etc/profile
if [ `cat /etc/profile | grep TMOUT | wc -l` -gt 0 ];then 
  sed -i '/^TMOUT/c TMOUT=900' /etc/profile; 
fi
if [ `cat /etc/profile | grep TMOUT | wc -l` -eq 0 ];then 
  echo "TMOUT=900" >> /etc/profile; 
  echo "export TMOUT" >> /etc/profile; 
fi
cat /etc/profile | grep TMOUT  # 验证配置

11. 设置远程 SSH 登录超时

使用 SecureCRT、PuTTY 等 SSH 客户端连接服务器时,需配置 SSH 登录超时(15 分钟):

# 修改/etc/ssh/sshd_config,配置客户端存活检测
sed -i "s/#ClientAliveInterval/ClientAliveInterval/" /etc/ssh/sshd_config
sed -i '/^ClientAliveInterval/c ClientAliveInterval=60' /etc/ssh/sshd_config
cat /etc/ssh/sshd_config | grep ClientAliveInterval || echo "ClientAliveInterval=60" >> /etc/ssh/sshd_config

sed -i "s/#ClientAliveCountMax/ClientAliveCountMax/" /etc/ssh/sshd_config
sed -i '/^ClientAliveCountMax/c ClientAliveCountMax=15' /etc/ssh/sshd_config
cat /etc/ssh/sshd_config | grep ClientAliveCountMax || echo "ClientAliveCountMax=15" >> /etc/ssh/sshd_config

# 验证配置并重启SSH服务
cat /etc/ssh/sshd_config | egrep "(ClientAliveInterval|ClientAliveCountMax)"
systemctl restart sshd.service

参数解释

  • ClientAliveInterval=60:每隔 60 秒向 SSH 客户端发送一次存活信号
  • ClientAliveCountMax=15:若客户端连续 15 次未响应信号,断开连接
  • 实际超时时间 = 60 秒 ×15=900 秒(15 分钟)

12. 限制用户 su

通过修改/etc/pam.d/su文件,限制仅特定用户组可 su 到 root:

cat /etc/pam.d/su | grep required  # 查看当前su权限配置

推荐配置(仅允许 test 组用户 su 到 root)

auth required pam_wheel.so group=test

13. 禁止 root 用户直接登录

为避免 root 账号直接暴露在攻击中,需禁止其直接登录,通过非 root 管理员账号间接提权:

# 1. 创建非root管理员账

文章来源: https://www.freebuf.com/articles/es/454928.html
如有侵权请联系:admin#unsafe.sh