Linux系统安全基线配置指南与关键步骤详解
Linux系统安全基线是围绕账户、认证、服务和日志的动态校准过程。配置错误可能比不配置更危险。需排查UID为0的非root账户并妥善处理。pam_cracklib so配置中参数含义易误解,如minlen和带负号的credit参数,且配置位置必须正确。关闭SSH的root登录前,需确保普通用户具备密钥登录等条件。设置命令历史时,HISTSIZE与HISTTI
开门见山,直接说核心:Linux系统的安全基线,从来就不是一个可以“一键执行”的加固脚本。它更像是一套围绕账户、认证、服务和日志这四个核心维度,持续进行校准和优化的动态过程。这里有个关键认知:配置错误,有时比完全不配置更危险,尤其是在pam_cracklib.so的参数和sshd_config的逻辑顺序上,稍有不慎就可能把自己锁在门外。

如何检查系统中是否存在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中没有AllowUsers或AllowGroups等配置意外屏蔽了你准备使用的这个普通用户(比如只写了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查看,确认时间戳已经正确显示。需要注意的是,这个设置对已经登录的会话不会立即生效,需要新开一个终端窗口才能看到效果。
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
同类文章
Win11无法启动应用程序?尝试重新安装修复
Windows11应用无法启动多因注册表信息损坏或配置错误,可通过系统设置中的应用修复或重置,使用PowerShell重注册UWP包,清除应用缓存与临时文件,更新运行时依赖组件,并重启WindowsInstaller服务解决,避免直接卸载重装。推荐按序尝试。
电脑提示由于找不到vcruntime140_1.dll报错的详细解决方法
电脑提示缺少vcruntime140_1 dll因系统缺失VisualC++运行库。修复方法:按系统位数安装或修复微软VC++2015-2022运行库;检查杀毒软件隔离区恢复文件;以管理员身份运行sfc scannow和DISM命令修复系统文件。
银河麒麟下C语言编译器的安装与配置方法
在银河麒麟系统上安装C语言编译器,需根据系统架构与网络状态选择方式。在线环境:Debian系执行sudoapt-getinstallbuild-essential,RHEL Anolis系执行sudodnfgroupinstall "DevelopmentTools "。离线环境:从同版本机器下载依赖包,RPM包用sudorpm-ivh* rpm,DEB包用su
银河麒麟系统WPS无法插入公式的解决教程
银河麒麟WPS公式编辑器修复需四步:赋予EqnEdit执行权限,安装libx11-6、libpng12-0依赖,关闭WPS进程后执行sudo kso--register重新注册,政务版还需在控制中心允许OLE调用或导入签名补丁。
麒麟系统设置自动清理缓存文件夹任务指南
麒麟系统支持三种自动清理缓存方案:通过cron与find定制用户级清理、利用systemd-tmpfiles轮转缓存目录、以及借助BleachBitCLI协同清理浏览器与系统缓存,可精准控制清理范围与周期,避免磁盘占满并防止误删关键缓存。
- 热门数据榜
相关攻略
2026-07-09 07:42
2026-07-09 07:42
2026-07-09 07:42
2026-07-09 07:41
2026-07-09 07:41
2026-07-09 07:41
2026-07-09 07:41
2026-07-09 07:41
热门教程
- 游戏攻略
- 安卓教程
- 苹果教程
- 电脑教程

