JavaScript is required to for searching.
跳过导航链接
退出打印视图
Oracle Solaris 管理:安全服务     Oracle Solaris 11 Information Library (简体中文)
search filter icon
search icon

文档信息

前言

第 1 部分安全性概述

1.  安全性服务(概述)

第 2 部分系统、文件和设备安全性

2.  管理计算机安全性(概述)

3.  控制对系统的访问(任务)

4.  病毒扫描服务(任务)

5.  控制对设备的访问(任务)

6.  使用基本审计报告工具(任务)

7.  控制对文件的访问(任务)

第 3 部分角色、权限配置文件和特权

8.  使用角色和特权(概述)

9.  使用基于角色的访问控制(任务)

10.  Oracle Solaris 中的安全属性(参考)

第 4 部分加密服务

11.  加密框架(概述)

12.  加密框架(任务)

使用加密框架(任务列表)

使用加密框架保护文件(任务)

使用加密框架保护文件(任务列表)

如何使用 dd 命令生成对称密钥

如何使用 pktool 命令生成对称密钥

如何计算文件摘要

如何计算文件的 MAC

如何加密和解密文件

管理加密框架(任务)

管理加密框架(任务列表)

如何列出可用提供者

如何添加软件提供者

如何禁止使用用户级机制

如何禁止使用内核软件提供者

如何列出硬件提供者

如何禁用硬件提供者机制和功能

如何刷新或重新启动所有加密服务

13.  密钥管理框架

第 5 部分验证服务和安全通信

14.  网络服务验证(任务)

15.  使用 PAM

16.  使用 SASL

17.  使用 安全 Shell(任务)

18.  安全 Shell(参考)

第 6 部分Kerberos 服务

19.  Kerberos 服务介绍

20.  规划 Kerberos 服务

21.  配置 Kerberos 服务(任务)

22.  Kerberos 错误消息和故障排除

23.  管理 Kerberos 主体和策略(任务)

24.  使用 Kerberos 应用程序(任务)

25.  Kerberos 服务(参考)

第 7 部分在 Oracle Solaris 中审计

26.  审计(概述)

27.  规划审计

28.  管理审计(任务)

29.  审计(参考)

词汇表

索引

使用加密框架保护文件(任务)

本节介绍如何生成对称密钥、如何创建校验和来检验文件完整性以及如何避免文件遭到窃听。本节中的命令可由一般用户运行。开发者可以编写使用这些命令的脚本。

使用加密框架保护文件(任务列表)

加密框架可帮助您保护文件。以下任务列表列出了用于列出可用算法以及通过加密方式保护文件的过程。

任务
说明
参考
生成对称密钥。
生成随机密钥,以用于用户指定的算法。
生成具有用户指定长度的密钥。或者,可以选择将密钥存储在文件、PKCS #11 密钥库或 NSS 密钥库中。
提供可确保文件完整性的校验和。
检验接收者的文件副本是否与发送的文件完全相同。
使用消息验证代码 (message authentication code, MAC) 保护文件。
向消息接收者确认您是发送者。
对文件加密,然后将加密文件解密。
通过对文件进行加密来保护文件内容。提供加密参数用于解密文件。

如何使用 dd 命令生成对称密钥

加密文件以及生成文件的 MAC 时需要使用密钥。密钥应来源于随机数池。

要创建密钥,有三种选择:

  1. 确定算法所需的密钥长度。
    1. 列出可用算法。
      % encrypt -l
      Algorithm       Keysize:  Min   Max (bits)
      ------------------------------------------
      aes                       128   128
      arcfour                     8   128
      des                        64    64
      3des                      192   192
      
      % mac -l
      Algorithm       Keysize:  Min   Max (bits)
      ------------------------------------------
      des_mac                    64    64
      sha1_hmac                   8   512
      md5_hmac                    8   512
      sha256_hmac                 8   512
      sha384_hmac                 8  1024
      sha512_hmac                 8  1024
    2. 确定要传递到 dd 命令的密钥长度(以字节为单位)。

      将最小最大密钥和最大密钥大小除以 8。最小密钥大小和最大密钥大小不同时,可以使用中间密钥大小。例如,可以将值 8、16 或 64 传递到 sha1_hmacmd5_hmac 函数的 dd 命令。

  2. 生成对称密钥。
    % dd if=/dev/urandom of=keyfile bs=n count=n
    if=file

    输入文件。要生成随机密钥,请使用 /dev/urandom 文件。

    of=keyfile

    保存所生成密钥的输出文件。

    bs=n

    密钥大小(以字节为单位)。要获取字节长度,请将密钥的位长度除以 8。

    count=n

    输入块的计数。n 的值应为 1

  3. 将密钥存储在受保护的目录中。

    密钥文件不应由除用户之外的任何人读取。

    % chmod 400 keyfile

示例 12-1 创建用于 AES 算法的密钥

在下面的示例中,将创建一个用于 AES 算法的密钥。该密钥还将进行存储以供日后解密之用。AES 机制使用 128 位密钥。该密钥在 dd 命令中表示为 16 字节。

% ls -al ~/keyf
drwx------   2 jdoe  staff        512 May 3 11:32 ./
% dd if=/dev/urandom of=$HOME/keyf/05.07.aes16 bs=16 count=1
% chmod 400 ~/keyf/05.07.aes16

示例 12-2 创建用于 DES 算法的密钥

在下面的示例中,将创建一个用于 DES 算法的密钥。该密钥还将进行存储以供日后解密之用。DES 机制使用 64 位密钥。该密钥在 dd 命令中表示为 8 字节。

% dd if=/dev/urandom of=$HOME/keyf/05.07.des8 bs=8 count=1
% chmod 400 ~/keyf/05.07.des8

示例 12-3 创建用于 3DES 算法的密钥

在下面的示例中,将创建一个用于 3DES 算法的密钥。该密钥还将进行存储以供日后解密之用。3DES 机制使用 192 位密钥。该密钥在 dd 命令中表示为 24 字节。

% dd if=/dev/urandom of=$HOME/keyf/05.07.3des.24 bs=24 count=1
% chmod 400 ~/keyf/05.07.3des.24

示例 12-4 创建用于 MD5 算法的密钥

在下面的示例中,将创建一个用于 MD5 算法的密钥。该密钥还将进行存储以供日后解密之用。该密钥在 dd 命令中表示为 64 字节。

% dd if=/dev/urandom of=$HOME/keyf/05.07.mack64 bs=64 count=1
% chmod 400 ~/keyf/05.07.mack64

如何使用 pktool 命令生成对称密钥

某些应用程序要求使用对称密钥对通信进行加密和解密。在此过程中,应创建一个对称密钥并存储它。

  1. 可选如果计划使用密钥库,需要创建一个。
  2. 生成一个随机数以用作对称密钥。

    使用以下方法之一。

    • 生成一个密钥并将其存储于文件中。

      以文件存储的密钥的优点是,您可以从该文件提取密钥以用于应用程序的密钥文件中,如 /etc/inet/secret/ipseckeys 文件或 IPsec。

      % pktool genkey keystore=file outkey=key-fn \ 
      [keytype=generic|specific-symmetric-algorithm] [keylen=size-in-bits] \
      [dir=directory] [print=n]
      keystore

      file 指定密钥存储位置的文件类型。

      outkey=key-fn

      keystore=file 时的文件名。

      keytype=specific-symmetric-algorithm

      无论对称密钥为何种长度,值均为 generic。对于特定算法,指定 aesarcfourdes3des

      keylen=size-in-bits

      密钥的长度(以位为单位)。该数字必须可以被 8 整除。请des3des 指定此值。

      dir=directory

      key-fn 所在的目录路径。缺省情况下,directory 是当前目录。

      print=n

      将密钥显示至终端窗口。缺省情况下,print 的值为 n

    • 生成一个密钥并将其存储于 PKCS #11 密钥库中。

      PKCS #11 密钥库的优点是,您可以按密钥标签检索密钥。此方法适用于加密和解密文件所用的密钥。在使用此方法之前,必须先完成步骤 1

      % pktool genkey label=key-label \ 
      [keytype=generic|specific-symmetric-algorithm] [keylen=size-in-bits] \
      [token=token] [sensitive=n] [extractable=y] [print=n]
      label=key-label

      密钥的用户指定标签。可以从密钥库中按密钥标签检索密钥。

      keytype=specific-symmetric-algorithm

      无论对称密钥为何种长度,值均为 generic。对于特定算法,指定 aesarcfourdes3des

      keylen=size-in-bits

      密钥的长度(以位为单位)。该数字必须可以被 8 整除。请des3des 指定此值。

      token=token

      令牌名称。缺省情况下,令牌是 Sun Software PKCS#11 softtoken

      sensitive=n

      指定密钥的敏感度。当此值为 y 时,不可使用 print=y 参数显示密钥。缺省情况下,sensitive 的值为 n

      extractable=y

      指定可从密钥库提取密钥。指定 n 可阻止提取密钥。

      print=n

      将密钥显示至终端窗口。缺省情况下,print 的值为 n

    • 生成一个密钥并将其存储于 NSS 密钥库中。

      在使用此方法之前,必须先完成步骤 1

      % pktool keystore=nss genkey label=key-label \ 
      [keytype=[keytype=generic|specific-symmetric-algorithm] [keylen=size-in-bits] [token=token] \
      [dir=directory-path] [prefix=database-prefix]
      keystore

      nss 指定密钥存储位置的 NSS 类型。

      label=key-label

      密钥的用户指定标签。可以从密钥库中按密钥标签检索密钥。

      keytype=specific-symmetric-algorithm

      无论对称密钥为何种长度,值均为 generic。对于特定算法,指定 aesarcfourdes3des

      keylen=size-in-bits

      密钥的长度(以位为单位)。该数字必须可以被 8 整除。请des3des 指定此值。

      token=token

      令牌名称。缺省情况下,该令牌为 NSS 内部令牌。

      dir=directory

      NSS 数据库所在的目录路径。缺省情况下,directory 是当前目录。

      prefix=directory

      NSS 数据库的前缀。缺省为无前缀。

      print=n

      将密钥显示至终端窗口。缺省情况下,print 的值为 n

  3. 可选检验密钥是否存在。

    根据密钥的存储位置,使用以下命令之一。

    • 检验 key-fn 文件中的密钥。
      % pktool list keystore=file objtype=key infile=key-fn
      Found n keys.
      Key #1 - keytype:location (keylen)
    • 检验 PKCS #11 或 NSS 密钥库中的密钥。
      $ pktool list objtype=key
      Enter PIN for keystore:
      Found n keys.
      Key #1 - keytype:location (keylen)

示例 12-5 使用 pktool 命令创建对称密钥

在以下示例中,用户首先创建一个 PKCS #11 密钥库,随后为应用程序生成一个较大的对称密钥。最后,用户验证密钥是否位于密钥库中。

# pktool setpin
Create new passphrase:easily-remembered-hard-to-detect-password
Re-enter new passphrase:Retype password
Passphrase changed.
% pktool genkey label=specialappkey keytype=generic keylen=1024
Enter PIN for Sun Software PKCS#11 softtoken  :Type password

% pktool list objtype=key
Enter PIN for Sun Software PKCS#11 softtoken  :Type password

Found 1 keys.
Key #1 - symmetric:  specialappkey (1024 bits)

示例 12-6 使用 pktool 命令创建 DES 密钥

在下面的示例中,将创建一个用于 DES 算法的密钥。该密钥存储在本地文件中以供日后解密之用。该命令使用 400 权限保护文件。创建了密钥后,print=y 选项将在终端窗口显示生成的密钥。

DES 机制使用 64 位密钥。拥有密钥文件的用户将使用 od 命令检索密钥。

% pktool genkey keystore=file outkey=64bit.file1 keytype=des print=y
        Key Value ="a3237b2c0a8ff9b3"
% od -x 64bit.file1
0000000 a323 7b2c 0a8f f9b3

示例 12-7 为 IPsec 安全关联创建对称密钥

在以下示例中,管理员手动为 IPsec SA 创建密钥材料并将其存储在文件中。然后,管理员将密钥复制到 /etc/inet/secret/ipseckeys 文件,并销毁原始文件。

如何计算文件摘要

计算文件摘要时,可以通过比较摘要输出来检查文件是否被篡改。摘要不会修改原始文件。

  1. 列出可用摘要算法。
    % digest -l
    md5
    sha1
    sha256
    sha384
    sha512
  2. 计算文件摘要并保存摘要列表。

    digest 命令提供一种算法。

    % digest -v -a algorithm input-file > digest-listing
    -v

    显示以下格式的输出:

    algorithm (input-file) = digest
    -a algorithm

    用于计算文件摘要的算法。键入步骤 1 的输出中显示的算法。

    input-file

    digest 命令的输入文件。

    digest-listing

    digest 命令的输出文件。

示例 12-8 使用 MD5 机制计算摘要

在下面的示例中,digest 命令使用 MD5 机制计算电子邮件附件的摘要。

% digest -v -a md5 email.attach >> $HOME/digest.emails.05.07
% cat ~/digest.emails.05.07
md5 (email.attach) = 85c0a53d1a5cc71ea34d9ee7b1b28b01

未使用 -v 选项时,摘要保存时不会包含随附信息:

% digest -a md5 email.attach >> $HOME/digest.emails.05.07
% cat ~/digest.emails.05.07
85c0a53d1a5cc71ea34d9ee7b1b28b01

示例 12-9 使用 SHA1 机制计算摘要

在下面的示例中,digest 命令使用 SHA1 机制提供目录列表。结果存放于文件中。

% digest -v -a sha1 docs/* > $HOME/digest.docs.legal.05.07
% more ~/digest.docs.legal.05.07
sha1 (docs/legal1) = 1df50e8ad219e34f0b911e097b7b588e31f9b435
sha1 (docs/legal2) = 68efa5a636291bde8f33e046eb33508c94842c38
sha1 (docs/legal3) = 085d991238d61bd0cfa2946c183be8e32cccf6c9
sha1 (docs/legal4) = f3085eae7e2c8d008816564fdf28027d10e1d983

如何计算文件的 MAC

消息验证代码 (message authentication code, MAC) 可计算文件的摘要并使用密钥进一步保护该摘要。MAC 不会修改原始文件。

  1. 列出可用机制。
    % mac -l
    Algorithm       Keysize:  Min   Max
    -----------------------------------
    des_mac                    64    64
    sha1_hmac                   8   512
    md5_hmac                    8   512
    sha256_hmac                 8   512
    sha384_hmac                 8  1024
    sha512_hmac                 8  1024
  2. 生成长度适当的对称密钥。

    您有两种选择。可以提供生成密钥时所基于的 passphrase(口令短语)。或者,可以直接提供密钥。

    • 如果提供口令短语,则必须存储或记住该口令短语。如果您联机存储口令短语,则只有您才可以读取该口令短语文件。

    • 如果提供密钥,则其大小必须是适用于相应机制的正确大小。有关此过程,请参见如何使用 dd 命令生成对称密钥。您也可以使用 pktool 命令。有关该过程和一些示例,请参见如何使用 pktool 命令生成对称密钥

  3. 创建文件的 MAC。

    mac 命令提供密钥并使用对称密钥算法。

    % mac [-v] -a algorithm [-k keyfile | -K key-label [-T token]] input-file
    -v

    显示以下格式的输出:

    algorithm (input-file) = mac
    -a algorithm

    用于计算 MAC 的算法。键入 mac -l 命令的输出中显示的算法。

    -k keyfile

    包含算法所指定长度的密钥的文件。

    -K key-label

    PKCS #11 密钥库中的密钥标签。

    -T token

    令牌名称。缺省情况下,令牌是 Sun Software PKCS#11 softtoken。只有在使用 -K key-label 选项时才可使用。

    input-file

    MAC 的输入文件。

示例 12-10 使用 DES_MAC 和口令短语计算 MAC

在下面的示例中,将使用 DES_MAC 机制和基于口令短语的密钥对电子邮件附件进行验证。MAC 列表将保存到文件中。如果口令短语存储在某个文件中,则除了该用户之外,其他任何人都不能读取该文件。

% mac -v -a des_mac email.attach
Enter passphrase: <Type passphrase>
des_mac (email.attach) = dd27870a
% echo "des_mac (email.attach) = dd27870a" >> ~/desmac.daily.05.07

示例 12-11 使用 MD5_HMAC 和密钥文件计算 MAC

在下面的示例中,将使用 MD5_HMAC 机制和密钥对电子邮件附件进行验证。MAC 列表将保存到文件中。

% mac -v -a md5_hmac -k $HOME/keyf/05.07.mack64 email.attach
md5_hmac (email.attach) = 02df6eb6c123ff25d78877eb1d55710c
% echo "md5_hmac (email.attach) = 02df6eb6c123ff25d78877eb1d55710c" \
>> ~/mac.daily.05.07

示例 12-12 使用 SHA1_HMAC 和密钥文件计算 MAC

在下面的示例中,将使用 SHA1_HMAC 机制和密钥对目录清单进行验证。结果存放于文件中。

% mac -v -a sha1_hmac \
-k $HOME/keyf/05.07.mack64 docs/* > $HOME/mac.docs.legal.05.07
% more ~/mac.docs.legal.05.07
sha1_hmac (docs/legal1) = 9b31536d3b3c0c6b25d653418db8e765e17fe07a
sha1_hmac (docs/legal2) = 865af61a3002f8a457462a428cdb1a88c1b51ff5
sha1_hmac (docs/legal3) = 076c944cb2528536c9aebd3b9fbe367e07b61dc7
sha1_hmac (docs/legal4) = 7aede27602ef6e4454748cbd3821e0152e45beb4

示例 12-13 使用 SHA1_HMAC 和密钥标签计算 MAC。

在下面的示例中,将使用 SHA1_HMAC 机制和密钥对目录清单进行验证。结果将放置在用户的 PKCS #11 密钥库中。用户最初通过使用 pktool setpin 命令创建了密钥库及其口令。

% mac -a sha1_hmac -K legaldocs0507 docs/*
Enter pin for Sun Software PKCS#11 softtoken:Type password

要从密钥库中检索 MAC,用户应使用详细选项,并提供密钥标签和通过验证的目录名称。

% mac -v -a sha1_hmac -K legaldocs0507 docs/*
Enter pin for Sun Software PKCS#11 softtoken:Type password
sha1_hmac (docs/legal1) = 9b31536d3b3c0c6b25d653418db8e765e17fe07a
sha1_hmac (docs/legal2) = 865af61a3002f8a457462a428cdb1a88c1b51ff5
sha1_hmac (docs/legal3) = 076c944cb2528536c9aebd3b9fbe367e07b61dc7
sha1_hmac (docs/legal4) = 7aede27602ef6e4454748cbd3821e0152e45beb4

如何加密和解密文件

加密文件时,不会删除或更改原始文件。输出文件将被加密。

有关 encrypt 命令的常见错误的解决方案,请参见示例后面的小节。

  1. 创建长度适当的对称密钥。

    您有两种选择。可以提供生成密钥时所基于的 passphrase(口令短语)。或者,可以直接提供密钥。

    • 如果提供口令短语,则必须存储或记住该口令短语。如果您联机存储口令短语,则只有您才可以读取该口令短语文件。

    • 如果提供密钥,则其大小必须是适用于相应机制的正确大小。有关此过程,请参见如何使用 dd 命令生成对称密钥。您也可以使用 pktool 命令。有关该过程和一些示例,请参见如何使用 pktool 命令生成对称密钥

  2. 对文件进行加密。

    提供密钥并使用 encrypt 命令及对称密钥算法参数。

    % encrypt -a algorithm [-v] \
    [-k keyfile | -K key-label [-T token]] [-i input-file] [-o output-file]
    -a algorithm

    用于加密文件的算法。键入 encrypt -l 命令输出中显示的算法。

    -k keyfile

    包含算法所指定长度的密钥的文件。每种算法的密钥长度(以位为单位)在 encrypt -l 命令的输出中列出。

    -K key-label

    PKCS #11 密钥库中的密钥标签。

    -T token

    令牌名称。缺省情况下,令牌是 Sun Software PKCS#11 softtoken。只有在使用 -K key-label 选项时才可使用。

    -i input-file

    要加密的输入文件。该命令不会更改此文件。

    -o output-file

    输出文件,是加密形式的输入文件。

示例 12-14 创建 AES 密钥以加密文件

在以下示例中,用户创建 AES 密钥并将其存储在现有 PKCS #11 密钥库中以用于加密和解密。用户可以验证密钥是否存在,也可以使用密钥,但是无法查看密钥本身。

% pktool genkey label=MyAESkeynumber1 keytype=aes keylen=256
Enter PIN for Sun Software PKCS#11 softtoken  :Type password

% pktool list objtype=key
Enter PIN for Sun Software PKCS#11 softtoken  :<Type password>
Found 1 key
Key #1 - Sun Software PKCS#11 softtoken: MyAESkeynumber1 (256)

要使用密钥来加密文件,用户应通过密钥标签检索密钥。

% encrypt -a aes -K MyAESkeynumber1 -i encryptthisfile -o encryptedthisfile

要解密 encryptedthisfile 文件,用户应通过密钥标签检索密钥。

% decrypt -a aes -K MyAESkeynumber1 -i encryptedthisfile -o sameasencryptthisfile

示例 12-15 使用 AES 和口令短语进行加密和解密

在下面的示例中,将使用 AES 算法来加密文件。密钥基于口令短语生成。如果口令短语存储在某个文件中,则除了该用户之外,其他任何人都不能读取该文件。

% encrypt -a aes -i ticket.to.ride -o ~/enc/e.ticket.to.ride
Enter passphrase: <Type passphrase>
Re-enter passphrase: Type passphrase again

输入文件 ticket.to.ride 仍然以其原始形式存在。

要解密输出文件,用户应使用加密该文件的相同口令短语和加密机制。

% decrypt -a aes -i ~/enc/e.ticket.to.ride -o ~/d.ticket.to.ride
Enter passphrase: <Type passphrase>

示例 12-16 使用 AES 和密钥文件进行加密和解密

在下面的示例中,将使用 AES 算法来加密文件。AES 机制使用 128 位(即 16 字节)密钥。

% encrypt -a aes -k ~/keyf/05.07.aes16 \
-i ticket.to.ride -o ~/enc/e.ticket.to.ride 

输入文件 ticket.to.ride 仍然以其原始形式存在。

要解密输出文件,用户应使用加密文件时所用的密钥和加密机制。

% decrypt -a aes -k ~/keyf/05.07.aes16 \
-i ~/enc/e.ticket.to.ride -o ~/d.ticket.to.ride

示例 12-17 使用 ARCFOUR 和密钥文件进行加密和解密

在下面的示例中,将使用 ARCFOUR 算法来加密文件。ARCFOUR 算法接受 8 位(1 字节)、64 位(8 字节)或 128 位(16 字节)的密钥。

% encrypt -a arcfour -i personal.txt \
-k ~/keyf/05.07.rc4.8 -o ~/enc/e.personal.txt

要解密输出文件,用户应使用加密文件时所用的密钥和加密机制。

% decrypt -a arcfour -i ~/enc/e.personal.txt \
-k ~/keyf/05.07.rc4.8 -o ~/personal.txt

示例 12-18 使用 3DES 和密钥文件进行加密和解密

在下面的示例中,将使用 3DES 算法来加密文件。3DES 算法要求 192 位(24 字节)的密钥。

% encrypt -a 3des -k ~/keyf/05.07.des24 \
-i ~/personal2.txt -o ~/enc/e.personal2.txt

要解密输出文件,用户应使用加密文件时所用的密钥和加密机制。

% decrypt -a 3des -k ~/keyf/05.07.des24 \
-i ~/enc/e.personal2.txt -o ~/personal2.txt

故障排除

以下消息表明,所使用的算法不接受您提供给 encrypt 命令的密钥。

如果传递的密钥不满足算法的要求,您必须提供正确的密钥。