商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 系统应用 > Linux如何配置系统安全基线_Linux系统安全基线配置要点

Linux如何配置系统安全基线_Linux系统安全基线配置要点

  发布于2026-05-21 阅读(0)

扫一扫,手机访问

开门见山,直接说核心:Linux系统的安全基线,从来就不是一个可以“一键执行”的加固脚本。它更像是一套围绕账户、认证、服务和日志这四个核心维度,持续进行校准和优化的动态过程。这里有个关键认知:配置错误,有时比完全不配置更危险,尤其是在pam_cracklib.so的参数和sshd_config的逻辑顺序上,稍有不慎就可能把自己锁在门外。

Linux如何配置系统安全基线_Linux系统安全基线配置要点

怎么查系统里有没有UID=0的非root用户

这是最基础,但也最容易被忽略的风险点。在Linux的世界里,UID(用户ID)才是权限的“身份证”。只要UID为0,无论这个账户叫admin还是test,它都拥有和root完全等同的至高权限。排查起来其实很简单,一条命令就能现形:

awk -F: '($3 == 0) { print $1 }' /etc/passwd

如果输出结果里除了root还出现了其他用户名,那就必须立刻处理,别抱侥幸心理。通常的应对思路是这样的:

  • 首先确认这个账号是否为业务所必需。说实话,绝大多数情况下都不是。如果不是,最干净利落的做法就是直接删除:userdel -r
  • 如果确实需要保留这个账号(比如某些老旧应用有硬性依赖),那至少要把它的UID改掉:usermod -u 1001 。改完后,记得手动检查一下/etc/passwd文件,确保对应行的UID字段已经更新,同时注意别改乱了其他字段的顺序。
  • 最后,一定要做验证。执行id 确认UID已变更,再试试su - ,确保无法通过它获得root shell。

为什么pam_cracklib.so配错会导致密码设不上

这个模块的配置堪称“陷阱之王”,很多文档照搬过来的参数,实际效果可能南辕北辙。举个例子,minlen=8并不等于“密码至少8位”——在默认规则下,它实际要求的是minlen-1,也就是7位。而dcredit=-1才真正表示“至少包含1个数字”。

最常见的错误就是漏掉了那个负号,写成dcredit=1。这下意思全反了,变成了“最多允许1个数字”,反而让密码策略变得更弱。

对于生产环境,一个兼顾安全与兼容性(适用于RHEL/CentOS 7+及Debian/Ubuntu)的最小可行配置可以参考下面这行:

password requisite pam_cracklib.so \
  retry=3 minlen=13 dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1 difok=3

这里有三个要点需要特别注意:

  • minlen设为13,才能确保实际生效的密码长度不低于12位(因为默认会减1)。
  • 所有credit参数(dcredit, ucredit, lcredit, ocredit)必须带负号,正数的含义是完全相反的。
  • 这行配置必须放在/etc/pam.d/system-auth文件中password [success=1 default=ignore]那一段之前,否则会被直接跳过,等于白配。

PermitRootLogin no之后普通用户连不上怎么办

很多朋友在修改/etc/ssh/sshd_config,将PermitRootLogin设为no并重启sshd服务后,发现自己也被拒之门外了。这通常不是配置本身失败了,而是前置条件没准备好。

在关闭root的SSH登录之前,必须确保以下几点:

  • 至少存在一个可用的普通用户账户。
  • 该用户的~/.ssh/authorized_keys文件中已经放置了你的公钥(优先使用密钥登录,远比密码安全)。
  • 检查/etc/shadow,确认该用户的密码哈希是有效的(不是以*!开头),否则即使PasswordAuthentication yes,你也无法用密码登录。
  • 确认sshd_config中没有AllowUsersAllowGroups等配置意外屏蔽了你准备使用的这个普通用户(比如只写了AllowUsers root)。
  • 重启服务前,务必先用sshd -t命令测试一下配置文件语法,避免因配置错误导致服务直接无法启动。

如果真的不幸被锁在外面,又没有控制台权限怎么办?这时候只能依赖云服务商提供的VNC功能,或者物理服务器的本地控制台(Console)强行登录进去,临时注释掉PermitRootLogin那行,重启sshd服务后再做调整。

历史命令时间戳和最大条数要一起设才有效

只设置HISTSIZE=100000是没用的——因为默认HISTTIMEFORMAT为空,所有命令在history里都会挤在一起,显示同一个时间。反过来,只设置HISTTIMEFORMAT也不行——如果HISTSIZE太小(默认1000条),早期的、带有精确时间的记录很快就会被新命令挤掉。

正确的做法是在/etc/profile文件末尾统一添加以下三行:

HISTSIZE=100000
HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S "
export HISTSIZE HISTTIMEFORMAT

添加后,执行source /etc/profile让配置在当前shell生效,然后随便运行一条命令,再用history | tail -3查看,确认时间戳已经正确显示。需要注意的是,这个设置对已经登录的会话不会立即生效,需要新开一个终端窗口才能看到效果。

本文转载于:https://www.php.cn/faq/2448559.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注