下载修补程序目录出错: "修补程序的哈希值与主机不匹配。放弃。"

Version 2

    问题

    下载修补程序目录出错: "修补程序(名称) 的哈希值与主机不匹配。放弃。"

     

    起因和办法

    为了安全的目的, 每个被漏洞定义引用的修补程序, 都包含了哈希值, 来保证引用文件是可信的.

     

    当下载补丁文件之后, 如果修补程序不符合哈希值的, 补丁修复程序将会放弃这个文件.

     

    这个问题可能由多种原因.

     

    修补程序目录需要更新,本地的目录已经过期了

     

    如果LANDesk修补程序目录在最近被修改过, 那么上次修补程序的下载目录将会出现这个错误.

     

    再次下载下载修补程序. 如果这个错误仍然存在, 试着从一个不同的修补程序目录服务器下载(US West Coast, US East Coast, or Europe)

     

    网络缓存或者环境中使用的其他网络装置, 也会引起修补程序文件被修改, 或者弃用这个版本的文件

     

    在很多环境中, 网络缓存装置是可以正常工作的.  当LANDesk尝试下载文件, 网络装置会拦截这个需求, 或者从缓存中提供一个旧版本的文件. 当这个文件被下载到LANDesk核心服务器, 哈希值的检查将会失败.

     

    这种情况下, 可以将个别的失败的文件可以在网络缓存装置中清除掉, 或者将整个缓存清除掉, 或者将缓存程序设置为允许核心服务器绕开缓存.

     

    手动拷贝文件到修补程序存储路径中, 可以绕过网络缓存装置, 来验证是否是这个原因导致的.

     

    修补定义内容在数据库中是损坏了的

     

    如果修补程序目录是最新下载的, 环境中也没有任何缓存装置, 本地下载的修补文件也被从存储路径中删除掉了, 但是依然存在失败, 下面的SQL语句可以强制修补定义重新下载.

     

    这些语句将LANDesk的修订号改为了"0".  当核心服务器和LANDesk修补定义服务器对比修订号的时候, LANDesk修补定义服务器上的会更高一些, 那么修补定义内容就会从新下载:

     

    UPDATE Vulnerability SET landeskrevision = 0 WHERE vul_id = 'definition name'
    

     

    更多的高级变量:

     

    select * from VULNERABILITY where VUL_ID IN ('<vul_no1>', '<vul_no2>') 
    
    Update VULNERABILITY 
    set REVISION=0 where vul_id in ('<vul_no1>', '<vul_no2>')
    

     

    参数vul_no1和vul_no2可以设置为引起错误的, 需要被重置的定义名称. 你可以创建一个出问题的定义的列表.

     

    例如 vul_no1: MS06-066 或者 MS07-050v2

     

    推荐先运行select语句, 来确认定义存在于数据库中.

     

     

    文件在修补程序定义发布之后会有所改变

     

    如果还是失败, 可能原本的文件本身被修改过, 最好升级LANDesk 的修补程序目录.

     

    可能是供应商改变了目录的文件, 但是仍然用着同样的文件名, LANDesk还没有更新相关的漏洞定义. 供应商可能改变了文件, 但是没有发布相关的信息.

     

    如果是这种情况, 不管核心服务器如何尝试, 这个下载仍然会是失败的. 这将会是一个大局的问题.

     

    如果是这样的, 请联系LANDesk技术支持, 要求修补程序定义做一个更新.  LANDesk 技术人员会从内部帮助确认这个问题.