linux安全基线不是“一键加固脚本”,而是围绕账户、认证、服务、日志四个维度的持续校准过程;配置错误比不配更危险,尤其在pam_cracklib.so参数和sshd_config逻辑顺序上容易引发登录锁死。

直接说结论:Linux安全基线不是“一键加固脚本”,而是围绕账户、认证、服务、日志四个维度的持续校准过程;配置错误比不配更危险,尤其在pam_cracklib.so参数和sshd_config逻辑顺序上容易引发登录锁死。
怎么查系统里有没有UID=0的非root用户
这是最基础也最容易被忽略的风险点——只要UID为0,就等同于root权限,哪怕用户名叫admin或test。用下面命令快速筛:
awk -F: '($3 == 0) { print $1 }' /etc/passwd
如果输出除了root还有别的用户名,必须立即处理:
- 确认该账号是否业务必需(极大概率不是),如非必要,直接
userdel -r <username></username> - 若确需保留,至少改UID:
usermod -u 1001 <username></username>,再手工修正/etc/passwd中对应行(注意别改错字段顺序) - 改完后执行
id <username></username>验证UID已变更,且su - <username></username>无法获得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
注意三点:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 把
minlen设为13,才能确保实际生效长度≥12(因默认减1) - 所有
credit参数必须带负号,正数含义完全相反 - 这行必须放在
/etc/pam.d/system-auth中password [success=1 default=ignore]那一段之前,否则被跳过
PermitRootLogin no之后普通用户连不上怎么办
改完/etc/ssh/sshd_config并systemctl restart sshd,结果自己也被拒之门外——这不是配置失败,而是缺少前置条件:
- 必须确保至少一个普通用户已存在,且其
~/.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<br>HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S "<br>export HISTSIZE HISTTIMEFORMAT
然后执行source /etc/profile,再运行一条命令,用history | tail -3确认时间戳已生效。注意:此设置对已登录会话不即时生效,新终端才生效。










