Debian 10下执行update-ca-certificates时移除所有证书/符号链接的问题求助
看起来你遇到的这个问题确实挺闹心的——正常的证书更新流程居然把现有证书的符号链接批量移除,还冒出一堆莫名其妙的find: ‘test’: No such file or directory错误,常规的配置检查和重装操作都没解决,那咱们得从一些更隐蔽的地方排查:
检查
update-ca-certificates核心脚本的完整性
这个命令本质是一个shell脚本,路径在/usr/sbin/update-ca-certificates。你可以先直接查看脚本内容:cat /usr/sbin/update-ca-certificates重点找有没有莫名其妙的
find命令调用(尤其是涉及test目录的),正常脚本里绝对不会出现这种无厘头的查找。另外也可以用dpkg验证包文件的完整性,看看这个脚本是不是被篡改过:dpkg -V ca-certificates如果输出里有
/usr/sbin/update-ca-certificates的记录,说明这个文件被修改过,那直接重新覆盖安装包就能解决:apt-get install --reinstall ca-certificates排查
/etc/ca-certificates/update.d/下的钩子脚本
你输出里提到了Running hooks in /etc/ca-certificates/update.d...,这个目录下的所有脚本都会在证书更新流程中被执行,很可能是某个钩子脚本出了问题——比如写错了find命令,或者错误地执行了删除符号链接的操作。
先列出所有钩子脚本:ls -l /etc/ca-certificates/update.d/然后逐个查看脚本内容,重点找有没有涉及
test目录的find调用,或者对/etc/ssl/certs目录的批量删除操作。如果找到异常脚本,可以先临时重命名它(比如加.bak后缀),再重新执行update-ca-certificates试试。检查环境变量的干扰
有时候异常的环境变量会改变命令的行为,比如find命令的默认参数被篡改了。你可以先查看当前环境里有没有和find相关的变量:env | grep -i find如果有奇怪的变量(比如
FIND_OPTS之类的),可以先清空环境变量再执行命令试试:env -i update-ca-certificates如果这样执行就正常了,说明是某个环境变量在搞鬼,找到它并删除即可。
搜索系统中涉及
find.*test的可疑命令
那些find: ‘test’: No such file or directory的错误说明,肯定有某个脚本里执行了find命令并指定了test作为目标目录。你可以用全局搜索快速定位:grep -r "find.*test" /usr/sbin/update-ca-certificates /etc/ca-certificates/ /usr/share/ca-certificates/找到对应的位置后,就能直接定位问题根源。
验证证书目录的权限和完整性
最后再确认一下关键目录的权限是否正常:ls -ld /usr/local/share/ca-certificates /etc/ssl/certs正常情况下这些目录应该是
root:root所有,权限为755。如果权限不对,会导致脚本无法正确读取证书或创建符号链接,进而误判为“孤儿链接”进行删除。
备注:内容来源于stack exchange,提问作者KellyM

