6 为数字保留管理归档

到目前为止,本文档讨论了将 Oracle Hierarchical Storage Manager and StorageTek QFS Software 解决方案作为普通的 UNIX 文件系统进行管理,在这些文件系统中,用户和应用程序会定期创建、修改和删除文件。重点关注磁盘高速缓存,归档主要充当高度集成的备份服务。在本章中,我们将关注重点重新置于用于长期数据保留的作为系统信息库的归档和管理解决方案。以前涵盖的管理原则和技术仍适用。但是,现在,磁盘高速缓存主要用于将文件获取到在获取之后不允许删除或修改的归档中。

确切的要求会有所不同。保留法律规定期间的业务或医疗记录的系统信息库可能需要定期放弃记录。但是,存储科学数据、历史记录、家谱记录、数字音乐、电影或电视节目的归档实际上可能需要永久存储内容。因此,Oracle HSM 通过多种方式支持数字保留:

  • 使用消息摘要(校验和)可以检测文件的损坏、数据破坏和未经授权的修改,以便您可以更正硬件问题并将不可靠的文件替换为归档中其他位置存储的可靠副本。

  • 文件固定性属性与消息摘要一起可确保只有超级用户可以更改已经修复的文件。每当 Oracle HSM 回写或归档固定文件时,它会重新验证与固定性属性一起存储的校验和以证明文件保持未变。

  • Oracle HSM 一次写入多次读取 (Write Once Read Many, WORM) 文件系统可以使文件变为只读并在指定时间段内实施保留。这些文件系统可以配置为超级用户无法更改文件或文件属性(如上面讨论的固定性属性)。

本章首先简要回顾了基本的 Oracle HSM 数据保护措施,这些措施构成了任何长期存储解决方案(为保留配置文件系统)的基础。本章随后介绍了具体解决数据保留的任务:

为保留配置文件系统

每个保留解决方案都以一个可靠的高度冗余文件系统开始。因此请回顾配套《Oracle Hierarchical Storage Manager and StorageTek QFS Software 安装和配置指南》的实现章节(如果尚未这样做)。通过提供冗余服务器、网络连接和存储设备保护对归档的访问权限。通过为每个文件至少配置两个额外的副本(每个副本存储在独立介质上)来保护文件数据。在多数情况下,最好将一个副本归档到磁盘或固态存储设备上,将两个副本归档到磁带介质上。如有可能,请确保通过实现 Oracle HSM 数据完整性验证功能来确保正确写入和读取了磁带块。通过定期生成转储文件和定期备份归档日志来保护文件系统元数据。

使用消息摘要(校验和)

消息摘要(校验和)允许保留人员检验归档文件是否存在可能会指示逐渐恶化、硬件错误、操作员错误的更改,或者是否存在对内容故意进行的未经授权的更改。消息摘要只是文件内容的、已由单向加密散列函数生成的数学汇总。加密散列函数对其输入数据中的更改极其敏感。即使在输入中执行微小的更改也会在输出中生成较大的更改。因此,消息摘要最适合用于检测文件损坏和未经授权的更改。重新计算文件的摘要并将结果值与存储的摘要值进行比较可显示文件是否已更改。

Oracle Hierarchical Storage Manager 文件系统可以使用下面的任何加密散列函数获取、创建、存储和验证消息摘要:

  • SHA1,加密函数的安全散列算法系列的 160 位成员

    安全散列算法在美国联邦信息处理标准 (Federal Information Processing Standard, FIPS) 出版物 180-4 国家标准和技术协会 (2012) 中定义。Oracle HSM 在默认情况下使用 SHA1。

  • SHA256,安全散列算法系列的 256 位成员

  • SHA384,安全散列算法系列的 384 位成员

  • SHA512,安全散列算法系列的 512 位成员

  • MD5,由 Internet 工程任务组 (Internet Engineering Task Force, IETF) 在互联网信息文档和标准 (request for comments, RFC) 1321 中定义的 128 位消息摘要函数

  • 专有的 128 位 Oracle HSM 函数,现在主要用于与早期的 Storage Archive Manager 实现向后兼容。

当文件获取到系统信息库中时,用户可以提供现有的摘要值;或者用户可以让文件系统立即或在首次归档文件时计算摘要值。Oracle HSM 文件系统使用特殊的文件属性将摘要值和文件系统元数据一起存储。在设置属性之后,文件系统会重新计算摘要,并在重新归档相应的文件和(可选)将文件从归档介质回写到磁盘高速缓存时对照存储的值验证摘要。

但是,请注意,Oracle HSM 介质迁移功能将文件复制到新介质,而不重新计算校验和(有关介质迁移的信息,请参见第 8 章 迁移到新存储介质)。如果文件未正确复制,则说明在对文件重新回写和验证之前,将存在检测不到损坏的小风险。使用数据完整性验证 (Data Integrity Validation, DIV) 可将此风险降到最低(请参见《Oracle Hierarchical Storage Manager and StorageTek QFS Software 安装和配置指南》了解详细信息)。

在开始使用消息摘要之前,应当首先确保文件系统主机性能将足够高。有关提供、生成和验证摘要的说明,请参阅以下各部分:

确保文件系统主机性能将足够高

如果您打算充分利用消息摘要,请确保文件系统主机的计算资源足以实现高性能。大多数现代平台都合并了专用的加密硬件,加密硬件可以高效执行专业计算而不占用中央处理器周期。如果可用,请确保充分利用这些功能。

要检查潜在文件系统主机的功能,请执行如下操作:

  1. root 用户身份登录到文件系统主机:

    root@solaris:~# 
    
  2. 确保主机操作系统运行 Solaris 11.1 或更高版本。使用命令 uname -v

    早期版本的操作系统不支持散列函数的硬件加速。在示例中,主机操作系统是 Solaris 11.2:

    root@solaris:~# uname -v
    11.2
    root@solaris:~# 
    
  3. 显示指令集体系结构。在命令提示符处,输入命令 isainfo -v

    root@solaris:~# isainfo -v 
    
  4. 如果 Solaris 11 主机是 Oracle Sun SPARC T3 或更高版本的系统,则 isainfo -v 命令的输出应当列出支持 sha512sha256sha1md5 加密算法的指令集。

    在示例中,Sun SPARC T4-2 主机为 SHA1、SHA2 和 MD5 算法系列提供硬件加速:

    [Sun_SPARC_T4-2]root@solaris:~# isainfo -v 
    64-bit sparcv9 applications
            crc32c cbcond pause mont mpmul sha512 sha256 sha1 md5 camellia kasumi 
            des aes ima hpc vis3 fmaf asi_blk_init vis2 vis popc
    root@solaris:~# 
    
  5. 如果 Solaris 主机是 x86/64 系统,它将支持 SHA-1 硬件加速,但前提是 isainfo -v 命令的输出中包括 ssse3(补充流 SIMD 扩展 3)指令集。

    在示例中,Sun X3-2 主机支持 SHA-1 摘要的硬件加速:

    [Sun_X3-2]root@solaris:~# isainfo -v 
    64-bit amd64 applications
            avx xsave pclmulqdq aes sse4.2 sse4.1 ssse3 popcnt tscp ahf cx16 sse3 
            sse2 sse fxsr mmx cmov amd_sysc cx8 tsc fpu 
    root@solaris:~# 
    

为文件提供消息摘要并启用验证

在对已经具有关联消息摘要的文件进行归档时,请执行如下操作。

  1. root 用户身份登录到文件系统主机:

    root@solaris:~# 
    
  2. 在命令提示符处,输入命令 ssum -a algorithm -h digest -G [-u]filename,其中:

    • -a algorithm 标识在对照所提供的消息摘要验证文件时,文件系统应当使用的加密散列函数。

    • -h digest 标识文件系统应当用来验证文件的消息摘要。

    • -G 指定立即验证。文件系统将 hash 文件属性设置为所提供的消息摘要的值,独立计算该文件的消息摘要,并将结果与所存储的值进行比较。如果所提供的摘要和计算得出的摘要相匹配,则文件系统会为文件设置 validated 属性。它随后会设置 generate 属性,以便在对文件重新归档时重新检查其有效性。

    • -u 设置 use 文件属性(可选)。在对文件回写时,文件系统会重新计算摘要并对照 hash 属性中存储的值验证结果。

    • filename 是文件的路径和名称。

    在示例中,提供了一个 SHA256 摘要,并让文件系统立即为 data10 文件重新计算摘要值并对照所提供的值验证计算结果。在使用命令 sls -D -h data10 检查文件属性时,会发现 generatevalidated 文件属性已经设置,algorithm 属性已经设置为 SHA-256,摘要值已经计算而且已经存储在 hash 属性中:

    root@solaris:~# ssum -h f03ce01b3828...f7459503007e -a sha256 -g data10
    root@solaris:~# sls -D -h data10
    data10:
      mode: -rw-r--r--    links:   1  owner: root        group: root      
      length:     14975  admin id:      0  inode:    90217.1
      project: user.root(1)
      access:      Jul 16 16:14  modification: Jul 16 16:14
      changed:     Jul 16 16:15  attributes:   Jul 16 16:14
      creation:    Jul 16 16:14  residence:    Jul 16 16:14
      checksum: generate validated  algorithm: SHA-256
      hash: f03ce01b3828...f7459503007e
    root@solaris:~# 
    
  3. 必要时,按照通常的方式编辑该文件。

    在示例中,自上次对名为 data10m 的文件进行归档以来,对该文件进行过修改。sls -D -h 命令显示已在两个副本上设置 S(过时)标志,因为这两个副本都未反映最新的更改。使用 Solaris digest 命令检查已修改文件的 SHA-256 摘要时,我们发现该文件的 hash 属性还存储过时摘要值:

    root@solaris:~# sls -D -h data10m
    data10m:
      mode: -rw-r--r--    links:   1  owner: root        group: root
      length:     14983  admin id:      0  inode:    90307.1
      project: user.root(1)
      copy 1: S----- Jul 17 16:47        dd.1    dk diskarchive f221
      copy 2: S----- Jul 20 11:31       a8d.1    li VOL002
      access:      Jul 20 11:32  modification: Jul 20 11:31
      changed:     Jul 17 16:37  attributes:   Jul 17 16:36
      creation:    Jul 17 16:36  residence:    Jul 17 16:36
      checksum: generate  algorithm: SHA-256
      hash: f03ce01b3828...f7459503007e
    root@solaris:~# digest -a sha256 data10m
    56c55bb421cc...71ac2ac0b7b0
    root@solaris:~# 
    
  4. 必要时,可以在重新归档之前更改已修改文件的摘要属性。

    在示例中,将摘要算法从 SHA256 更改为 SHA1,便可立即显示其效果:

    root@solaris:~# ssum -a sha1 -G data10m
    root@solaris:~# sls -D -h data10m
    data10m:
      mode: -rw-r--r--    links:   1  owner: root        group: root      
      length:     14983  admin id:      0  inode:    90307.1
      project: user.root(1)
      release -a;
      copy 1: S----- Jul 20 13:00        e0.1    dk diskarchive f224
      copy 2: S----- Jul 20 13:05       a93.1    li VOL002
      access:      Jul 20 16:39  modification: Jul 20 16:39
      changed:     Jul 17 16:37  attributes:   Jul 17 16:36
      creation:    Jul 17 16:36  residence:    Jul 20 16:29
      checksum: generate validated  algorithm: SHA-1
      hash: 92003525f0f8...53e29d0718c8
    root@solaris:~# 
    
  5. 否则,等待文件系统归档已修改的文件并自动更新与摘要相关的属性。

    在对已修改的文件归档时,文件系统会重新计算摘要值,将新值存储到 hash 属性,并在旧版本文件的所有归档副本上设置 S(过时)标志。在示例中,对 data10m 文件进行了编辑但未更改摘要属性。归档程序已经按照计划在磁盘上创建了一个新的 copy 1,并更新了 hash 属性。未经修改的文件的副本仍保留在磁带上并标记为 S(过时),直到归档程序可以创建 copy 2 为止:

    root@solaris:~# sls -D -h data10m
    data10m:
      mode: -rw-r--r--    links:   1  owner: root        group: root
      length:     14983  admin id:      0  inode:    90307.1
      project: user.root(1)
      copy 1: ------ Jul 17 16:47        dd.1    dk diskarchive f221
      copy 2: S----- Jul 20 11:31       a8d.1    li VOL002
      access:      Jul 20 11:32  modification: Jul 20 11:31
      changed:     Jul 17 16:37  attributes:   Jul 17 16:36
      creation:    Jul 17 16:36  residence:    Jul 17 16:36
      checksum: generate  algorithm: SHA-256
      hash: 56c55bb421cc...71ac2ac0b7b0
    

为文件生成消息摘要并启用验证

要为文件生成摘要并启用验证,请执行如下操作:

  1. root 用户身份登录到文件系统主机:

    root@solaris:~# 
    
  2. 在命令提示符处,输入命令 ssum -a algorithm -g|G [-u] filename,其中:

    • -a algorithm 指定在为文件生成消息摘要时,文件系统将使用的加密散列函数。

    • -g 为文件设置 generate 文件属性。首次对文件归档时,文件系统会计算消息摘要。在对文件重新归档时,文件系统会重新计算摘要并对照所存储的值验证结果。

    • -G 为文件设置 generatevalidate 文件属性。文件系统会立即计算消息摘要并将结果存储在 hash 属性中。在对文件归档时,文件系统会重新计算摘要并对照所存储的值验证结果。

    • -u 设置 use 文件属性(可选)。在对文件回写时,文件系统会重新计算摘要并对照 hash 属性中存储的值验证结果。

    • filename 是文件的路径和名称。

    在示例中,在归档之前,让文件系统使用 SHA256 算法为 data11 文件计算摘要。在使用命令 sls -D -h data10 检查文件属性时,我们发现,对于每个文件,generate 文件属性已经设置,并且 algorithm 属性已经设置为 SHA-256。文件尚未进行归档,因此摘要值尚未计算而且未存储在 hash 属性中:

    root@solaris:~# ssum -a sha256 -g data11
    root@solaris:~# sls -D -h data11
    data11:
      mode: -rw-r--r--    links:   1  owner: root        group: root      
      length:     14975  admin id:      0  inode:    90218.1
      project: user.root(1)
      access:      Jul 16 16:14  modification: Jul 16 16:14
      changed:     Jul 16 16:22  attributes:   Jul 16 16:14
      creation:    Jul 16 16:14  residence:    Jul 16 16:14
      checksum: generate  algorithm: SHA-256
      hash:
    root@solaris:~# 
    
  3. 必要时,按照通常的方式编辑该文件。

    在示例中,自上次对名为 data11m 的文件进行归档以来,对该文件进行过修改。sls -D -h 命令显示已在两个副本上设置 S(过时)标志,因为这两个副本都未反映最新的更改。使用 Solaris digest 命令检查已修改文件的 SHA-256 摘要时,我们发现该文件的 hash 属性还存储过时摘要值:

    root@solaris:~# sls -D -h data11m
    data11m:
      mode: -rw-r--r--    links:   1  owner: root        group: root
      length:     14983  admin id:      0  inode:    90307.1
      project: user.root(1)
      copy 1: S----- Jul 17 16:47        dd.1    dk diskarchive f221
      copy 2: S----- Jul 20 11:31       a8d.1    li VOL002
      access:      Jul 20 11:32  modification: Jul 20 11:31
      changed:     Jul 17 16:37  attributes:   Jul 17 16:36
      creation:    Jul 17 16:36  residence:    Jul 17 16:36
      checksum: generate  algorithm: SHA-256
      hash: f03ce01b3828...f7459503007e
    root@solaris:~# digest -a sha256 data11m
    56c55bb421cc...71ac2ac0b7b0
    root@solaris:~# 
    
  4. 必要时,可以在重新归档之前更改已修改文件的摘要属性。

    在示例中,将摘要算法从 SHA256 更改为 SHA1,便可立即显示其效果:

    root@solaris:~# ssum -a sha1 -G data11m
    root@solaris:~# sls -D -h data11m
    data11m:
      mode: -rw-r--r--    links:   1  owner: root        group: root      
      length:     14983  admin id:      0  inode:    90307.1
      project: user.root(1)
      release -a;
      copy 1: S----- Jul 20 13:00        e0.1    dk diskarchive f224
      copy 2: S----- Jul 20 13:05       a93.1    li VOL002
      access:      Jul 20 16:39  modification: Jul 20 16:39
      changed:     Jul 17 16:37  attributes:   Jul 17 16:36
      creation:    Jul 17 16:36  residence:    Jul 20 16:29
      checksum: generate validated  algorithm: SHA-1
      hash: 92003525f0f8...53e29d0718c8
    root@solaris:~# 
    
  5. 否则,等待文件系统归档已修改的文件并自动更新与摘要相关的属性。

    在对已修改的文件归档时,文件系统会重新计算摘要值,将新值存储到 hash 属性,并在旧版本文件的所有归档副本上设置 S(过时)标志。

    在示例中,对 data11m 文件进行了编辑但未更改摘要属性。归档程序已经按照计划在磁盘上创建了一个新的 copy 1,并更新了 hash 属性。未经修改的文件的副本仍保留在磁带上并标记为 S(过时),直到归档程序可以创建 copy 2 为止:

    root@solaris:~# sls -D -h data11m
    mdata11:
      mode: -rw-r--r--    links:   1  owner: root        group: root
      length:     14983  admin id:      0  inode:    90307.1
      project: user.root(1)
      copy 1: ------ Jul 17 16:47        dd.1    dk diskarchive f221
      copy 2: S----- Jul 20 11:31       a8d.1    li VOL002
      access:      Jul 20 11:32  modification: Jul 20 11:31
      changed:     Jul 17 16:37  attributes:   Jul 17 16:36
      creation:    Jul 17 16:36  residence:    Jul 17 16:36
      checksum: generate  algorithm: SHA-256
      hash: 56c55bb421cc...71ac2ac0b7b0
    

为目录中的每个文件生成消息摘要并启用验证

要为目录中的每个文件以递归方式生成摘要并设置验证属性,请执行如下操作:

  1. root 用户身份登录到文件系统主机:

    root@solaris:~# 
    
  2. 在命令提示符处,输入命令 ssum -a algorithm -g|G [-u] -r directoryname,其中:

    • -a algorithm 指定在生成消息摘要时,文件系统将使用的加密散列函数。

    • -g 为每个文件设置 generate 文件属性。首次对文件归档时,文件系统会为该文件计算消息摘要。在对文件重新归档时,文件系统会重新计算摘要并对照所存储的值验证结果。

    • -G 为每个文件设置 generatevalidate 文件属性。文件系统会立即计算消息摘要并将结果存储在 hash 属性中。在对文件归档时,文件系统会重新计算摘要并对照所存储的值验证结果。

    • -u 设置 use 文件属性(可选)。在对文件回写时,文件系统会重新计算摘要并对照所存储的值验证结果。

    • -r 以递归方式将该命令应用于指定目录中的所有文件。

    • directoryname 是目录的路径和名称。

    在第一个示例中,在归档之前,我们让文件系统使用 SHA256 算法为 datasetA 目录中的文件计算摘要。在使用命令 sls -D -h datasetA 检查文件属性时,我们发现,对于每个文件,generate 文件属性已经设置,并且 algorithm 属性已经设置为 SHA-256。这些文件尚未进行归档,因此摘要值尚未计算而且未存储在 hash 属性中:

    root@solaris:~# ssum -a sha256 -g -r datasetA
    root@solaris:~# sls -D -h datasetA
    datasetA/pdata0:
      mode: -rw-r--r--    links:   1  owner: root        group: root      
      length:     14983  admin id:      0  inode:    90232.1
      project: user.root(1)
      access:      Jul 16 16:47  modification: Jul 16 16:47
      changed:     Jul 16 16:47  attributes:   Jul 16 16:47
      creation:    Jul 16 16:47  residence:    Jul 16 16:47
      checksum: generate  algorithm: SHA-256
      hash: 
    ...
    datasetA/pdata20:
      mode: -rw-r--r--    links:   1  owner: root        group: root      
      length:     14983  admin id:      0  inode:    90234.1
      project: user.root(1)
      access:      Jul 16 16:47  modification: Jul 16 16:47
      changed:     Jul 16 16:47  attributes:   Jul 16 16:47
      creation:    Jul 16 16:47  residence:    Jul 16 16:47
      checksum: generate  algorithm: SHA-256
      hash: 
    ...
    root@solaris:~# 
    

    在第二个示例中,在归档之前,我们让文件系统使用 SHA256 算法为 datasetB 目录中的文件计算摘要。在使用命令 sls -D -h datasetB 检查文件属性时,我们发现 generatevalidated 文件属性已经设置,algorithm 属性已经设置为 SHA-256,摘要值已经计算而且已经存储在 hash 属性中:

    root@solaris:~# ssum -a sha256 -G -r datasetB
    root@solaris:~# sls -D -h datasetB
    datasetB/qdata0:
      mode: -rw-r--r--    links:   1  owner: root        group: root      
      length:     14983  admin id:      0  inode:    90232.1
      project: user.root(1)
      access:      Jul 16 16:47  modification: Jul 16 16:47
      changed:     Jul 16 16:47  attributes:   Jul 16 16:47
      creation:    Jul 16 16:47  residence:    Jul 16 16:47
      checksum: generate validated  algorithm: SHA-256
      hash: 4d2800eb82b3...520341edde95
    ...
    datasetB/qdata12:
      mode: -rw-r--r--    links:   1  owner: root        group: root      
      length:     14983  admin id:      0  inode:    90234.1
      project: user.root(1)
      access:      Jul 16 16:47  modification: Jul 16 16:47
      changed:     Jul 16 16:47  attributes:   Jul 16 16:47
      creation:    Jul 16 16:47  residence:    Jul 16 16:47
      checksum: generate validated  algorithm: SHA-256
      hash: 5b057f1b7b48...88c590d47dec
    ...
    root@solaris:~# 
    

在回写期间验证文件的消息摘要

需要时,可以在将文件回写到磁盘高速缓存以供使用之前验证该文件。执行如下操作:

  1. root 用户身份登录到文件系统主机:

    root@solaris:~# 
    
  2. 在命令提示符处,输入命令 ssum -u [-a algorithm [-h digest] -g|G] filename,其中:

    • -u 通过在回写之前设置 use 文件属性来指定验证。在为某个文件设置 use 属性时,文件系统不会将该文件从归档介质复制到磁盘高速缓存,直到它生成了消息摘要并对照该文件的 hash 属性中存储的值成功验证了结果。

    • -a algorithm-h digest-g|G 是可选参数,这些参数在文件上设置必需的 algorithmhashgenerate 属性(如果以前未设置)。

    • filename 是文件的路径和名称。

    在示例中,已经为 data102 文件启用了验证。正如命令 sls -D -h data102 所示,generatevalidated 文件属性已经设置,algorithm 属性已经设置为 SHA-256,摘要值已经计算而且已经存储在 hash 属性中:

    root@solaris:~# ssum -a sha256 -F data102
    root@solaris:~# sls -D -h data102
    data102:
      mode: -rw-r--r--    links:   1  owner: root        group: root      
      length:     14979  admin id:      0  inode:    90264.1
      project: user.root(1)
      access:      Jul 16 17:34  modification: Jul 16 17:34
      changed:     Jul 16 17:34  attributes:   Jul 16 17:34
      creation:    Jul 16 17:34  residence:    Jul 16 17:34
      checksum: generate validated  algorithm: SHA-256
      hash: baae932ce1cf...93166a2e36b5
    root@solaris:~# 
    

    因此,可以设置 use 属性以确保文件系统在回写该文件之前对其进行验证。命令 sls -D -h data102 显示现在设置了 use 属性:

    root@solaris:~# ssum -u data102
    root@solaris:~# sls -D -h data102
    data102:
      mode: -rw-r--r--    links:   1  owner: root        group: root      
      length:     14979  admin id:      0  inode:    90264.1
      project: user.root(1)
      access:      Jul 16 17:34  modification: Jul 16 17:34
      changed:     Jul 16 17:34  attributes:   Jul 16 17:34
      creation:    Jul 16 17:34  residence:    Jul 16 17:34
      checksum: generate use validated  algorithm: SHA-256
      hash: baae932ce1cf...93166a2e36b5
    root@solaris:~# 
    

在对文件归档之前更改消息摘要和验证属性

如果某个文件尚未设置为不可变而且尚未归档,则可以使用下面的过程更改消息摘要和验证属性。

  1. root 用户身份登录到文件系统主机:

    root@solaris:~# 
    
  2. 必要时,更改摘要算法。在命令提示符处,输入命令 ssum -a newalgorithm filename,其中:

    • -a newalgorithm 指定用来替换以前指定的摘要算法的加密散列函数。

    • filename 是文件的路径和名称。

    在示例中,我们的保留策略需要使用高度抗冲突的 SHA256 函数。但是,正如命令 sls -D -h 所示,我们在设置 data319 文件的摘要属性时无意中指定了 SHA1 算法。由于尚未对该文件归档,因此我们可以成功地将算法更改为 SHA256:

    root@solaris:~# sls -D -h data319
    data319:
      mode: -rw-r--r--    links:   1  owner: root        group: root      
      length:     14983  admin id:      0  inode:    90301.1
      project: user.root(1)
      access:      Jul 17 15:27  modification: Jul 17 15:27
      changed:     Jul 17 15:28  attributes:   Jul 17 15:27
      creation:    Jul 17 15:27  residence:    Jul 17 15:27
      checksum: generate  algorithm: SHA-1
      hash: 
    root@solaris:~# ssum -a sha256 data319
    root@solaris:~# sls -D -h data319
    data319:
      mode: -rw-r--r--    links:   1  owner: root        group: root      
      length:     14983  admin id:      0  inode:    90301.1
      project: user.root(1)
      access:      Jul 17 15:27  modification: Jul 17 15:27
      changed:     Jul 17 15:28  attributes:   Jul 17 15:27
      creation:    Jul 17 15:27  residence:    Jul 17 15:27
      checksum: generate  algorithm: SHA-256
      hash: 
    root@solaris:~# 
    
  3. 必要时,清除摘要属性并恢复默认文件设置。在命令提示符处,输入命令 ssum -d filename,其中:

    • -d 将文件摘要属性重置为其默认值。

    • filename 是文件的路径和名称。

    在示例中,我们并不打算为 data44 文件配置消息摘要和验证。但是,正如命令 sls -D -h 所示,我们无意中进行了配置。由于该文件尚未进行归档,因此我们可以成功地清除 generateuse,这两个属性在归档和回写期间控制消息验证。validatedalgorithmhash 属性中的数据仍保留但不会影响文件系统的行为:

    root@solaris:~# sls -D -h data44
    data44:
      mode: -rw-r--r--    links:   1  owner: root        group: root      
      length:     14983  admin id:      0  inode:    90292.1
      project: user.root(1)
      access:      Jul 17 14:58  modification: Jul 17 14:57
      changed:     Jul 17 14:58  attributes:   Jul 17 14:57
      creation:    Jul 17 14:57  residence:    Jul 17 14:57
      checksum: generate use validated  algorithm: SHA-256
      hash: 3b4b15f8f69c...bae62c7e7568
    root@solaris:~# ssum -d data44
    root@solaris:~# sls -D -h data44
    data44:
      mode: -rw-r--r--    links:   1  owner: root        group: root      
      length:     14983  admin id:      0  inode:    90292.1
      project: user.root(1)
      access:      Jul 17 14:58  modification: Jul 17 14:57
      changed:     Jul 17 14:58  attributes:   Jul 17 14:57
      creation:    Jul 17 14:57  residence:    Jul 17 14:57
      checksum: validated  algorithm: SHA-256
      hash:  3b4b15f8f69c...bae62c7e7568
    root@solaris:~# 
    
  4. 必要时,在对文件归档之前重置任何必需的消息摘要和验证属性。在命令提示符处,输入带有相应选项和文件名的命令 ssum

    在示例中,我们决定在 qndat44 文件上重新启用消息摘要并在归档之前验证摘要。但是,我们不需要在回写之前进行验证。因此,我们恢复 generate 属性但不恢复 use 属性:

    root@solaris:~# ssum -g data44
    root@solaris:~# sls -D -h data44
    data44:
      mode: -rw-r--r--    links:   1  owner: root        group: root      
      length:     14983  admin id:      0  inode:    90292.1
      project: user.root(1)
      access:      Jul 17 14:58  modification: Jul 17 14:57
      changed:     Jul 17 14:58  attributes:   Jul 17 14:57
      creation:    Jul 17 14:57  residence:    Jul 17 14:57
      checksum: generate validated  algorithm: SHA-256
      hash:  3b4b15f8f69c...bae62c7e7568
    root@solaris:~# 
    

将文件设置为不可变

保留要求通常需要使用可确保文件固定性的机制。归档必须既防止发生更改又证明此类更改尚未发生。为了提供固定性,Oracle HSM 归档文件系统将上面讨论的消息摘要和与摘要相关的文件属性与将文件呈现为不可变的额外属性结合使用。在将文件设置为不可变之后,只有具有超级用户授权的用户才能更改文件状态。将不可变性与严格的一次写入多次读取 (Write Once Read Many, WORM) 文件系统结合使用时,即使超级用户也将无法进行更改(有关详细信息,请参见了解 WORM 文件系统)。

您可以按照下面的任一方式将文件设置为不可变:

提供消息摘要并将文件设置为不可变

如果需要确保文件在获取到归档中之后仍保持不变,请执行如下操作。

  1. root 用户身份登录到文件系统主机:

    root@solaris:~# 
    
  2. 在命令提示符处,输入命令 ssum -a algorithm [-h digest] -F filename,其中:

    • -a algorithm 标识在对照所提供的消息摘要验证文件时,文件系统应当使用的加密散列函数。

    • -h digest 标识文件系统应当用来验证文件的消息摘要。

    • -F 指定立即验证和不可变性,并设置 fixitygeneratevalidateduse 文件属性。文件系统立即计算并验证消息摘要。在对文件回写或归档之后,文件系统会重新计算并重新验证消息摘要。

    • filename 是文件的路径和名称。

    在示例中,提供了一个 SHA256 摘要并通知文件系统为 data20 文件重新计算摘要、验证摘要值并将该文件设置为不可变。在使用命令 sls -D -h data10 检查文件属性时,我们会发现,对于每个文件,fixity、generateusevalidated 文件属性已经设置,algorithm 属性已经设置为 SHA-256,摘要值已经计算而且已经存储在 hash 属性中:

    root@solaris:~# ssum -h bfaefde932cf...d450892eda63 -a sha256 -F data20
    root@solaris:~# sls -D -h data20
    data20:
      mode: -rw-r--r--    links:   1  owner: root        group: root      
      length:     14979  admin id:      0  inode:    90264.1
      project: user.root(1)
      access:      Jul 16 17:34  modification: Jul 16 17:34
      changed:     Jul 16 17:34  attributes:   Jul 16 17:34
      creation:    Jul 16 17:34  residence:    Jul 16 17:34
      checksum: fixity generate use validated  algorithm: SHA-256
      hash: bfaefde932cf...d450892eda63
    root@solaris:~# 
    

生成消息摘要并将文件设置为不可变

如果对已经具有关联消息摘要的文件进行归档并且需要确保文件在获取到归档中之后仍保持不变,请执行如下操作。

  1. root 用户身份登录到文件系统主机:

    root@solaris:~# 
    
  2. 在命令提示符处,输入命令 ssum -a algorithm [-h digest] -F filename,其中:

    • -a algorithm 标识用来生成 -h digest 参数中所指定的摘要的加密散列函数。

    • -F 设置 fixitygeneratevalidateduse 文件属性。文件系统立即计算并验证消息摘要。在对文件回写或归档之后,文件系统会重新计算并重新验证消息摘要。

    • filename 是文件的路径和名称。

    在示例中,我们通知文件系统为 data200 文件计算 SHA256 摘要、验证摘要值并将该文件设置为不可变。在使用命令 sls -D -h data10 检查文件属性时,我们会发现,对于每个文件,fixitygeneratevalidateduse 文件属性已经设置,algorithm 属性已经设置为 SHA-256,摘要值已经计算而且已经存储在 hash 属性中:

    root@solaris:~# ssum -a sha256 -F data200
    root@solaris:~# sls -D -h data200
    data200:
      mode: -rw-r--r--    links:   1  owner: root        group: root      
      length:     14979  admin id:      0  inode:    90264.1
      project: user.root(1)
      access:      Jul 16 17:34  modification: Jul 16 17:34
      changed:     Jul 16 17:34  attributes:   Jul 16 17:34
      creation:    Jul 16 17:34  residence:    Jul 16 17:34
      checksum: fixity generate use validated  algorithm: SHA-256
      hash: efde93cc12cf...d496602e36dd
    root@solaris:~# 
    

检查文件摘要和固定性属性

要查看一个或多个文件的消息摘要和固定性属性,请使用 Oracle HSM 目录列出命令 sls。请执行如下操作。

列出消息摘要和验证属性

  1. root 用户身份登录到文件系统主机:

    root@solaris:~# 
    
  2. 在命令提示符处,输入命令 sls -D -h filename,其中:

    • -D 指定文件属性的详细显示内容。

    • -h 在显示内容中包含散列(摘要)值。

    • filename 按路径和名称标识一个或多个文件。

    在示例中,可以查看所显示内容的 checksumhash 字段中列出的 data02 文件的文件摘要属性:

    root@solaris:~# sls -D -h data02
    data02:
      mode: -rw-r--r--    links:   1  owner: root        group: root      
      length:     14975  admin id:      0  inode:    90217.1
      project: user.root(1)
      access:      Jul 16 16:14  modification: Jul 16 16:14
      changed:     Jul 16 16:15  attributes:   Jul 16 16:14
      creation:    Jul 16 16:14  residence:    Jul 16 16:14
      checksum: generate use validated  algorithm: SHA-256
      hash: f03ce01b3828...f7459503007e
    root@solaris:~# 
    
    • hash 属性存储 f03ce01b3828...f7459503007e 文件的消息摘要。

    • algorithm 属性显示 SHA-256 加密散列函数生成了所存储的消息摘要。

    • generate 属性显示文件系统会在对文件归档时,独立地重新计算消息摘要并对照所存储的值验证摘要值。

    • use 属性显示文件系统会在对文件回写时,独立地重新计算消息摘要并对照所存储的值验证摘要值。

    • validated 属性显示在上次检查时,独立计算的消息摘要与 hash 属性中存储的值相匹配。

    • fixity 属性会在文件设置为不可变时显示。

使用 WORM 文件系统

当法律或归档注意事项要求使用一次写入多次读取 (write-once read-many, WORM) 文件系统时,可以在已经配置为支持 WORM 的任何 Oracle HSM 文件系统中创建 WORM 目录。本节的重点是了解 WORM 文件系统以及在处理 WORM 文件和目录时需要执行的特定任务,其中包括:

有关为文件系统启用 WORM 支持的信息,请参见《Oracle Hierarchical Storage Manager and StorageTek QFS Software 安装和配置指南》。

了解 WORM 文件系统

一次写入多次读取 (Write Once Read Many, WORM) 文件系统通过让用户将文件设置为在指定保持期内只读来保护数据。启用 WORM 的 Oracle HSM 文件系统支持默认的和可定制的文件保持期、数据和路径的不可更改性以及 WORM 设置的子目录继承性。

根据文件系统的配置情况,可以使用两种 Oracle HSM WORM 模式中的一种:

  • 标准符合性模式(默认)

  • 仿真模式

在标准 WORM 模式下挂载的文件系统中,用户通过执行命令 chmod 4000 path_name 针对目录启用 WORM 并为文件启动只读保持期,其中 path_name 是文件或目录的路径和名称。这会设置 UNIX setuid执行时设置用户 ID)权限。针对同时具有 execute 权限的文件设置 setuid 权限会面临安全风险,因此,在标准 WORM 模式下,只有非可执行文件才能设置为只读。

在 WORM 仿真模式下挂载的文件系统中,用户通过执行命令 chmod 555 path_name 针对目录启用 WORM 并为文件启动只读保持期,其中 path_name 是可写文件或目录的路径和名称。由于仿真模式不需要 setuid 权限,因此可以将可执行文件设置为只读并为其分配保持期。

标准模式和仿真模式具有严格的 WORM 实施和不太严格的轻量级实施。在触发了对文件或目录的保留之后,严格实施和轻量级实施都不允许更改数据或路径。这两个模式均将默认保持期设置为 43,200 分钟(30 天)。但是,轻量级实施会放松对 root 用户的一些限制。

严格实施不允许任何人在保持期结束之前缩短指定的保持期或者删除文件或目录。严格实施也不允许使用 sammkfs 来删除存放当前保留的文件和目录的卷。因此,严格实施适用于满足最严苛的法律、法规遵从性和保留要求。

轻量级实施允许 root 用户使用 sammkfs 命令缩短保持期、删除文件和目录。这会为防止出现数据意外丢失而提供高级别的防护,并在管理文件系统和存储资源时提供更大的灵活性。但是,允许超级用户进行这种程度的控制的文件系统可能无法满足某些法律和法规遵从性要求。

可以创建到 WORM 文件的硬链接和软链接。只能对启用了 WORM 的目录中的文件创建硬链接。创建硬链接后,该链接与原始文件具有同样的 WORM 特征。也可以创建软链接,但软链接无法使用 WORM 功能。可以对 Oracle HSM 文件系统的任何目录中的 WORM 文件创建软链接。

有关创建和配置 WORM 文件系统的完整信息,请参见客户文档库中的《Oracle Hierarchical Storage Manager and StorageTek QFS Software 安装和配置指南》。

为目录启用 WORM

在为目录启用 WORM 时,会添加针对 WORM 文件的支持,但不会以其他方式更改目录的特征。用户可以继续创建和编辑启用了 WORM 的目录中的文件,并且可以删除启用了 WORM 但不包含 WORM 文件的目录。要为目录启用 WORM,请执行如下操作:

  1. 登录文件系统服务器。

    user@solaris:~# 
    
  2. 查看目录是否启用了 WORM。使用命令 sls -Dd directory,其中 directory 是目录的路径和名称。在该命令的输出中查找属性 worm-capable

    通常,目录会启用 WORM,因为当用户为目录启用 WORM 时,所有当前的和将来的子目录都将继承 WORM 功能(有关该命令的完整信息,请参见 sls 手册页)。在第一个示例中,我们发现,目标目录 /hsm/hsmfs1/records 已启用 WORM:

    user@solaris:~# sls -Dd /hsm/hsmfs1/records/2013/
    /hsm/hsmfs1/records/2013:
      mode: drwxr-xr-x    links:   2  owner: root        group: root      
      length:      4096  admin id:      0  inode:     1048.1
      project: user.root(1)
      access:      Mar  3 12:15  modification: Mar  3 12:15
      changed:     Mar  3 12:15  attributes:   Mar  3 12:15
      creation:    Mar  3 12:15  residence:    Mar  3 12:15
      worm-capable        retention-period: 0y, 30d, 0h, 0m
    

    但在第二个示例中,目标目录 /hsm/hsmfs1/documents 启用 WORM:

    user@solaris:~# sls -Dd /hsm/hsmfs1/documents
    /hsm/hsmfs1/documents
      mode: drwxr-xr-x    links:   2  owner: root        group: root      
      length:      4096  admin id:      0  inode:     1049.1
      project: user.root(1)
      access:      Mar  3 12:28  modification: Mar  3 12:28
      changed:     Mar  3 12:28  attributes:   Mar  3 12:28
      creation:    Mar  3 12:28  residence:    Mar  3 12:28
    
  3. 如果目录未启用 WORM,但挂载文件系统时使用了 worm_capableworm_lite 挂载选项,则可使用 Solaris 命令 chmod 4000 directory-name 启用 WORM 支持,其中,directory-name 是将存放 WORM 文件的目录的路径和名称。

    命令 chmod 4000 为目录设置 setuid执行时设置用户 ID)属性并启用标准 WORM 支持。在示例中,为目录 /hsm/hsmfs1/documents 启用 WORM 并使用 sls -Dd 检查结果。该操作将成功,而且将针对该目录启用 WORM:

    user@solaris:~# chmod 4000 /hsm/hsmfs1/documents
    user@solaris:~# sls -Dd /hsm/hsmfs1/documents
    /hsm/hsmfs1/documents
      mode: drwxr-xr-x    links:   2  owner: root        group: root      
      length:      4096  admin id:      0  inode:     1049.1
      project: user.root(1)
      access:      Mar  3 12:28  modification: Mar  3 12:28
      changed:     Mar  3 12:28  attributes:   Mar  3 12:28
      creation:    Mar  3 12:28  residence:    Mar  3 12:28
      worm-capable        retention-period: 0y, 30d, 0h, 0m
    
  4. 如果目录未启用 WORM,但挂载文件系统时使用了 worm_emulemul_lite 挂载选项,则可使用 Solaris 命令 chmod 555 directory-name 启用 WORM 支持,其中,directory-name 是将存放 WORM 文件的目录的路径和名称。

    命令 chmod 555 会删除目录的写入权限并启用 WORM 仿真支持。在示例中,为目录 /hsm/hsmfs1/documents 启用 WORM 并使用命令 sls -Dd 检查结果。该操作将成功,而且将针对该目录启用 WORM:

    user@solaris:~# chmod 555 /hsm/hsmfs1/documents
    user@solaris:~# sls -Dd /hsm/hsmfs1/documents
    /hsm/hsmfs1/documents
      mode: drwxr-xr-x    links:   2  owner: root        group: root      
      length:      4096  admin id:      0  inode:     1049.1
      project: user.root(1)
      access:      Mar  3 12:28  modification: Mar  3 12:28
      changed:     Mar  3 12:28  attributes:   Mar  3 12:28
      creation:    Mar  3 12:28  residence:    Mar  3 12:28
      worm-capable        retention-period: 0y, 30d, 0h, 0m
    

为文件激活 WORM 保护

如果针对启用了 WORM 的目录中的文件激活 WORM 保护,则在保持期内,文件系统不再允许对文件数据或数据路径进行修改。因此,您必须谨慎使用。要激活 WORM 保护,请执行如下操作:

  1. 登录文件系统服务器。

    user@solaris:~# 
    
  2. 如果文件需要保留的期限与文件系统的默认设置不同,可通过更改文件的访问时间来指定所需的保留时间。使用 Solaris 命令 touch -a -texpiration-date path-name,其中:

    • expiration-date 是一个数字字符串,其中包括四位年、两位月、两位月中日期、两位小时、两位分钟和(可选)两位秒钟。

    • path-name 是文件的路径和名称。

    请注意,Oracle Solaris UNIX 实用程序(如 touch)不能将保持期延长到 2038 年 1 月 18 日下午 10:14 之后。这些实用程序使用带符号的 32 位数字表示自 1970 年 1 月 1 日以来的时间(以秒为单位)。因此,如果需要将文件保留到此截止日期之后,请使用默认保持期。

    在示例中,将文件的保持期设置为在 2019 年 10 月 4 日上午 11:59 之后到期:

    user@solaris:~# touch -a -t201910141159  /hsm/hsmfs1/plans/master.odt
    
  3. 如果挂载文件系统时使用了 worm_capableworm_lite 挂载选项,则可使用 Solaris 命令 chmod 4000 path-name 激活 WORM 保护,其中 path-name 是文件的路径和名称。

    chmod 4000 命令为指定的文件设置 setuid执行时设置用户 ID)属性。为可执行文件设置此属性是不安全的。因此,如果挂载文件系统时使用了 worm_capableworm_lite 挂载选项,将无法为具有 UNIX execute 权限的文件设置 WORM 保护。

    在示例中,为文件 master.odt 激活 WORM 保护。我们使用 sls -D 检查结果,并注意到 retention 属性现在设置为 activeretention-period 设置为四年:

    user@solaris:~# chmod 4000 /hsm/hsmfs1/plans/master.odt
    user@solaris:~# sls -Dd /hsm/hsmfs1/plans/master.odt
    /hsm/hsmfs1/plans/master.odt:
      mode: -r-xr-xr-x    links:   1  owner: root        group: root      
      length:       104  admin id:      0  inode:     1051.1
      project: user.root(1)
      access:      Mar  4 2018  modification: Mar  3 13:14
      changed:     Mar  3 13:16  retention-end: Apr  2 14:16 2014
      creation:    Mar  3 13:16  residence:    Mar  3 13:16
      retention:   active        retention-period: 4y, 0d, 0h, 0m
    
  4. 如果挂载文件系统时使用了 worm_emulworm_lite 挂载选项,则可使用 Solaris 命令 chmod 555 path-name 激活 WORM 保护,其中 path-name 是文件的路径和名称。

    命令 chmod 555 会删除对目录的写入权限。因此,您可以在需要时通过 WORM 保护可执行文件。在该示例中,为文件 master-plan.odt 激活 WORM 保留。我们使用 sls -D 检查结果,并注意到 retention 属性现在设置为 activeretention-period 设置为四年:

    user@solaris:~# chmod 555 /hsm/hsmfs1/plans/master.odt
    user@solaris:~# sls -Dd /hsm/hsmfs1/plans/master.odt
    /hsm/hsmfs1/plans/master.odt:
      mode: -r-xr-xr-x    links:   1  owner: root        group: root      
      length:       104  admin id:      0  inode:     1051.1
      project: user.root(1)
      access:      Mar  4 2018  modification: Mar  3 13:14
      changed:     Mar  3 13:16  retention-end: Apr  2 14:16 2014
      creation:    Mar  3 13:16  residence:    Mar  3 13:16
      retention:   active        retention-period: 4y, 0d, 0h, 0m
    

查找并列出 WORM 文件

要查找并列出符合指定搜索条件的 WORM 文件,请使用 sfind 命令。执行如下操作:

  1. 登录文件系统服务器。

    user@solaris:~# 
    
  2. 要列出受 WORM 保护并在保持期内的文件,请使用命令 sfind starting-directory -ractive,其中 starting-directory 是需要列表进程开始列举的目录的路径和名称。

    user@solaris:~# sfind /hsm/hsmfs1/ -ractive 
    /hsm/hsmfs1/documents/2013/master-plan.odt
    /hsm/hsmfs1/documents/2013/schedule.ods
    /samma1/records/2013/progress/report01.odt
    /samma1/records/2013/progress/report02.odt
    /samma1/records/2013/progress/report03.odt ...
    user@solaris:~# 
    
  3. 要列出保持期已到期的受 WORM 保护的文件,请使用命令 sfind starting-directory -rover,其中 starting-directory 是需要列表进程开始列举的目录的路径和名称。

    user@solaris:~# sfind /hsm/hsmfs1/ -rover 
    /samma1/documents/2007/master-plan.odt
    /samma1/documents/2007/schedule.ods
    user@solaris:~# 
    
  4. 要列出其保持期在指定日期和时间之后将过期的、受 WORM 保护的文件,使用命令 sfind starting-directory -rafter expiration-date,其中:

    • starting-directory 是您希望启动列表进程的目录的路径和名称

    • expiration-date 是一个数字字符串,其中包括四位年、两位月、两位月中日期、两位小时、两位分钟和(可选)两位秒钟。

    在示例中,列出保持期将在 2015 年 1 月 1 日午夜后一分钟到期的所有文件:

    user@solaris:~# sfind /hsm/hsmfs1/ -rafter 201501010001
    /hsm/hsmfs1/documents/2013/master-plan.odt
    user@solaris:~# 
    
  5. 要列出必须在文件系统中至少保留指定时间的受 WORM 保护的文件,请使用命令 sfind starting-directory -rremain time-remaining,其中:

    • starting-directory 是在目录树中开始搜索的位置。

    • time-remaining 是由非负整数与以下时间单位组成的字符串:y(表示年数)、d(表示天数)、h(表示小时数)、m(表示分钟数)。

    在示例中,在目录 /hsm/hsmfs1/ 下查找至少还要保留三年的所有文件:

    user@solaris:~# sfind /hsm/hsmfs1/ -rremain 3y
    /hsm/hsmfs1/documents/2013/master-plan.odt
    user@solaris:~# 
    
  6. 要列出必须在文件系统中保留超过指定时间的受 WORM 保护的文件,请使用命令 sfind starting-directory -rlonger time,其中:

    • starting-directory 是在目录树中开始搜索的位置。

    • time-remaining 是由非负整数与以下时间单位组成的字符串:y(表示年数)、d(表示天数)、h(表示小时数)、m(表示分钟数)。

    在示例中,在目录 /hsm/hsmfs1/ 下查找将保留三年零九十天以上的所有文件:

    user@solaris:~# sfind /hsm/hsmfs1/ -rremain 3y90d
    /hsm/hsmfs1/documents/2013/master-plan.odt
    user@solaris:~# 
    
  7. 要列出必须在文件系统中永久保留的受 WORM 保护的文件,可使用命令 sfind starting-directory -rpermanent

    在示例中,我们发现,在目录 /hsm/hsmfs1/ 下没有要永久保留的文件:

    user@solaris:~# sfind /hsm/hsmfs1/ -rpermanent
    user@solaris:~#