了解 EFS

初学者的简单手册

使用加密的文件系统 (EFS)(这是一种新的 AIX® 6.1 安全特性)来保护您的数据,并全面了解 EFS 的配置及其使用。EFS 可以在文件系统级别中采用加密的格式存储文件的内容。如果您是 EFS 的新手,那么本文将是一个很好的起点,以分析 EFS 的必要性、它的特性和最常用的命令。

John A. Anto (antojohn@in.ibm.com), AIX 开发支持专家, IBM

Photo of John AntoAnto John 是印度班加罗尔的 IBM India Software Labs 的一位 AIX 开发支持专家。他从事有关 AIX 安全组件(安全库)、加载模块(LDAP 和 Kerberos),以及新的 AIX 6.1 安全特性 (EFS) 方面的工作。在过去的一年半中,他从事 AIX 安全组件以及开放源代码组件(诸如 OpenSSH 和 OpenSSL)方面的工作。他毕业于 BITS Pilani,并获得了计算机科学工程硕士学位。您可以通过 antojohn@in.ibm.com 与他联系。



2008 年 5 月 08 日

引言

加密的文件系统 (EFS) 是 J2 文件系统级别的加密(通过单独密钥存储库)。EFS 允许文件加密,以便保护保密的数据不会被攻击者以直接访问计算机的方式进行窃取。在操作系统运行时,用户身份验证和访问控制列表可以保护文件不会受到未经授权的访问;然而,如果攻击者获得对计算机的直接访问,那么要绕过控制列表将是很容易的。

一种解决方案是,在计算机的磁盘中存储经过加密的文件。在 EFS 中,每个用户都具有一个相关联的密钥。这些密钥存储在采用密码保护的密钥存储库中,在成功登录之后,会将用户的密钥加载到内核中,并建立与进程凭据的关联。当进程需要打开一个受 EFS 保护的文件时,系统将对凭据进行测试。如果系统找到一个匹配文件保护的密钥,那么这个进程就可以对文件密钥和文件内容进行解密。加密信息保存在每个文件的扩展属性中。EFS 使用了扩展属性版本 2,并且每个文件在写入磁盘之前都要经过加密。在将文件从磁盘读取到内存时对文件解密,因此文件数据能够以明文格式保存在内存中。数据只经过一次解密,这是一个主要的优点。当另一个用户需要访问该文件时,在授予对数据的访问权限之前,将验证其安全凭据,既使这些文件数据已经以明文格式存在于内存中。如果用户无资格访问该文件,则会拒绝访问。文件加密不排除传统访问权限的角色,而是增加了更高的粒度和灵活性。

为了能够在系统中创建并使用启用 EFS 的文件系统,必须满足下面的先决条件:

  • 在 C (CliC) 密码库中安装 CryptoLite。
  • 启用 RBAC。
  • 允许系统使用 EFS 文件系统。

AIX EFS 与市场中其他的可用产品有哪些不同呢?

AIX® EFS 加密是在文件系统级别进行的。每个文件都使用唯一的文件密钥进行保护,并且创建了针对恶意 root 的保护。

常用的命令

efsenable

efsenable 命令用于在系统中激活 EFS 功能。它将创建 EFS 管理密钥存储库、用户密钥存储库和安全组密钥存储库。密钥存储库是包含 EFS 安全信息的密钥库。EFS 管理密钥存储库的访问密钥存储在用户密钥存储库和安全组密钥存储库中。efsenable 命令将创建 /var/efs 目录。在执行这个命令时,将使用新的 EFS 属性来更新 /etc/security/user 和 /etc/security/group 文件。

efskeymgr

efskeymgr 命令专门用于 EFS 所需的所有密钥管理操作。用户密钥存储库的初始密码是用户登录密码。组密钥存储库和 admin 密钥存储库不受密码的保护,而是通过访问密钥来进行保护的。访问密钥存储在属于这个组的所有用户密钥存储库中。

当您打开一个密钥存储库(在登录时或者显式地使用 efskeymgr 命令)时,会将这个密钥存储库中所包含的私有密钥推送到内核中,并建立与进程的关联。如果在密钥存储库中找到了访问密钥,那么还将打开相应的密钥存储库,并且会将这些密钥自动地推送到它们的内核中。

efsmgr

efsmgr 命令专门用于 EFS 内部的文件加密和解密管理。只能在启用 EFS 的 JFS2 文件系统中创建加密的文件。在使用这个命令创建文件的文件系统或者目录中设置了继承。当在一个目录上设置了继承时,在缺省情况下,在这个目录中创建的所有新文件都将经过加密。用于加密文件的密码是继承而来的密码。新的目录同样继承相同的密码。如果在子目录中禁用了继承,那么在这个子目录中创建的新文件将不会经过加密。

在目录或者文件系统中设置或者删除继承,对于现有的文件不会产生任何影响。必须显式地使用 efsmgr 命令加密或者解密文件。

示例场景

让我们假设有这样一个公司的场景,其中包含三个部门,即销售部门、市场部门和财务部门。这三个部门共享同一台 AIX 计算机以存储它们的保密内容。如果没有启用 EFS,那么在这三个部门之间暴露数据的潜在可能性是相当高的。请参见下面的清单 1,以了解如何使这个容易受到威胁的计算机成为一个存储数据的安全位置。

启用 EFS

要在 AIX 中启用 EFS,可以键入下面的内容:

清单 1. 在 AIX 中启用 EFS
# efsenable -a
Enter password to protect your initial keystore:
Enter the same password again:

输入下面的内容,以查看为使用 EFS 而创建的目录:

# cd /var/efs
# ls
efs_admin   efsenabled  groups      users

现在,应该启用所有的 EFS 功能。

您将为这三个部门创建独立的文件系统。EFS 的创建与常用文件系统的创建非常相似。唯一的区别是,您必须启用 EA2 efs = yes 属性。

清单 2 说明了如何通过系统管理工具 (SMIT) 创建加密的文件系统:

清单 2. 通过 SMIT 创建 EFS
                                            Add an Enhanced Journaled File System

Type or select values in entry fields.
Press Enter AFTER making all desired changes.

                                                        [Entry Fields]
  Volume group name                                   rootvg
  SIZE of file system
          Unit Size                                   Megabytes         +
*         Number of units                            [100]              #
* MOUNT POINT                                        [/sales]
  Mount AUTOMATICALLY at system restart?              no                +
  PERMISSIONS                                         read/write        +
  Mount OPTIONS                                      []                 +
  Block Size (bytes)                                  4096              +
  Logical Volume for Log                                                +
  Inline Log size (MBytes)                           []                 #
  Extended Attribute Format                                             +
  ENABLE Quota Management?                            no                +
  Enable EFS?                                         yes               +
  Allow internal snapshots?                           no                +

您还可以通过命令行创建相同的文件系统,如清单 3 所示:

清单 3. 通过命令行创建 EFS
#crfs -v jfs2 -g rootvg -m /sales -a size=100M -a efs=yes
#crfs -v jfs2 -g rootvg -m /marketing -a size=100M -a efs=yes
#crfs -v jfs2 -g rootvg -m /finance -a size=100M -a efs=yes

现在,您已经成功地为这三个部门创建了三个独立的文件系统。

为用户和组创建密钥存储库

为了处理或者维护这些单独的文件系统,您需要创建三个不同的用户,并为它们创建密钥存储库(请参见清单 4)。(在为用户设置密码时,将创建该用户的密钥存储库)。

清单 4. 用户的创建
#mkuser salesman
#passwd salesman

#mkuser marketingman
#passwd marketingman

#mkuser financeman
#passwd financeman

上面的操作将在 /var/efs/users 目录中为这三个用户创建三个独立的密钥存储库(请参见清单 5)。

清单 5. 用户的密钥存储库位置
# pwd
/var/efs/users
# ls
.lock       salesman	marketingman	financeman	root

您还可以为 EFS 的组创建密钥存储库(请参见清单 6)。

清单 6. 组的密钥存储库的创建
#efskeymgr -C finance

# pwd
/var/efs/groups
# ls
.lock     finance   security

为组创建密钥存储库要求该组中至少包含一个用户。

创建 EFS 目录并设置属性

这个部分将介绍如何在 EFS 文件系统中创建加密的文件和目录,并操纵它们的属性。为了创建 EFS 目录,您需要挂载 EFS 文件系统(请参见清单 7)。

清单 7. 创建 EFS 目录
# mount /finance
# cd /finance

#mkdir yearlyreport
# efsmgr -E yearlyreport

# efsmgr -L yearlyreport
EFS inheritance is set with algorithm: AES_128_CBC

现在将 yearlyreport 目录设置为继承。这表示,文件或者目录将从其父目录中继承加密的属性和所有的加密参数。

efsmgr 提供了各种不同的选项,以帮助您设置这个目录使用的密码类型、启用和禁用继承,以及向这个目录的 EFS 访问列表中添加或者删除用户和组。

对单独的文件进行加密

要执行任何与 EFS 相关的活动,您需要加载密钥存储库。如果您尝试在这个加密的目录中创建文件,而不访问它的密钥存储库,那么将导致下面的结果:

# cd yearlyreport
# ls
# touch apr_report
touch: 0652-046 Cannot create apr_report.

当您没有加载密钥存储库以执行 EFS 活动时,将出现这种情况(请参见清单 8)。

清单 8. 向 shell 加载 EFS 密钥存储库
# efskeymgr -o ksh
financeman's EFS password:
# touch apr_report

既然您已经加载了密钥存储库,那么对这个文件所添加的任何信息都将在文件系统级别上进行加密(请参见清单 9)。

清单 9. EFS 中的加密文件
# ls -U apr_report
-rw-r--r--e    1 financeman     system            0 Nov 28 06:14 apr_report

这个文件的“e”表示该文件是经过加密的,并且除了拥有密钥存储库的属主之外,任何用户都不能访问并读取其内容(请参见清单 10)。

清单 10. 列出加密文件的属性
# efsmgr -l apr_report
EFS File information:
 Algorithm: AES_128_CBC
List of keys that can open the file:
 Key #1:
  Algorithm       : RSA_1024
  Who             : uid 0
  Key fingerprint : 4b6c5f5f:63cb8c6f:752b37c3:6bc818e1:7b4961f9

使用 efsmgr 命令所提供的各种不同的标志,您可以更改文件的密码和其他属性。如果您希望创建一个不位于任何加密目录中的文件,那么您需要使用下面的选项以加密这种单独的文件(请参见清单 11):

清单 11. 加密一个单独的文件
#cd /finance
#touch companylist
# ls -U
total 16
-rw-r--r---    1 root     system            8 Nov 28 06:21 companylist
drwxr-xr-x-    2 root     system          256 Nov 28 05:52 lost+found
drwxr-xr-xe    2 root     system          256 Nov 28 06:14 yearlyreport

# efsmgr -c AES_192_ECB -e companylist

# ls -U companylist
-rw-r--r--e    1 root     system            8 Nov 28 06:24 companylist

帮助其他用户访问您的文件

现在您已经看到,每个部门都创建了独立的文件系统,并且都使用密钥存储库来保护它们。如果在该场景中,某个财务部门的人员希望访问销售部门的加密文件,那么您需要为他或者她授予相应的权限以执行这项工作(请参见清单 12清单 13)。

清单 12. 当文件加密时的 vi 输出
#vi sales_report

~
~
~
~
~
~
~
~

"sales_report" Security authentication is denied.
清单 13. 将密钥存储库访问权限传递给另一个用户
# efskeymgr -k user/salesman -s user/financeman

现在,这个命令将“salesman”用户的访问密钥发送给“financeman”用户。如果您尝试编辑 salesman 所拥有的某个文件,那么您可以采用普通的格式读取并且访问其内容,因为您现在拥有创建该文件的用户的密钥存储库(请参见清单 14)。

清单14. 在接收到密钥存储库访问权限之后的 vi 输出
#vi sales_report

Sales report for this financial year
~
~
~
~
~
~
~
~

"sales_report" [Read only] 1 line, 36 characters

授予和撤销对单独文件的访问权限

您还可以为 EFS 中的单个文件设置访问权限,而不是将完整的访问密钥发送给另一个用户。

现在,让我们假设您在 /marketing 文件系统目录中有一个文件,并且您希望允许“salesman”用户和“finance”组对特定的 /marketing/strategy.txt 文件进行访问。为了完成这项任务,您需要仔细研究清单 15清单 16

清单 15. 为用户授予访问权限
# efsmgr -l strategy.txt
EFS File information:
 Algorithm: AES_128_CBC
List of keys that can open the file:
 Key #1:
  Algorithm       : RSA_1024
  Who             : uid 0
  Key fingerprint : 4b6c5f5f:63cb8c6f:752b37c3:6bc818e1:7b4961f9

# efsmgr -a strategy.txt -u salesman

# efsmgr -l strategy.txt
EFS File information:
 Algorithm: AES_128_CBC
List of keys that can open the file:
 Key #1:
  Algorithm       : RSA_1024
  Who             : uid 0
  Key fingerprint : 4b6c5f5f:63cb8c6f:752b37c3:6bc818e1:7b4961f9
 Key #2:
  Algorithm       : RSA_1024
  Who             : uid 204
  Key fingerprint : f91b5a79:53bdd7f1:58987a33:f5701a38:99145b24
清单 16. 为组授予访问权限
# efsmgr -a strategy.txt -g finance

# efsmgr -l strategy.txt
EFS File information:
 Algorithm: AES_128_CBC
List of keys that can open the file:
 Key #1:
  Algorithm       : RSA_1024
  Who             : uid 0
  Key fingerprint : 4b6c5f5f:63cb8c6f:752b37c3:6bc818e1:7b4961f9
 Key #2:
  Algorithm       : RSA_1024
  Who             : uid 204
  Key fingerprint : f91b5a79:53bdd7f1:58987a33:f5701a38:99145b24
 Key #3:
  Algorithm       : RSA_1024
  Who             : gid 201
  Key fingerprint : 8cb65011:2a42e9f0:91f7b712:20e36bb7:5eb0db0a

如果您需要撤销“finance”组的访问权限,那么可以使用带“-r”标志的 efsmgr 命令,如下面的清单 17 中所示。

清单 17. 撤销组的访问权限
# efsmgr -r strategy.txt -g finance

# efsmgr -l strategy.txt
EFS File information:
 Algorithm: AES_128_CBC
List of keys that can open the file:
 Key #1:
  Algorithm       : RSA_1024
  Who             : uid 0
  Key fingerprint : 4b6c5f5f:63cb8c6f:752b37c3:6bc818e1:7b4961f9
 Key #2:
  Algorithm       : RSA_1024
  Who             : uid 204
  Key fingerprint : f91b5a79:53bdd7f1:58987a33:f5701a38:99145b24

EFS 命令标志和选项的完整列表,请参见参考资料部分。

结束语

EFS 是 AIX 6.1 中的一种非常好的特性,它可以帮助您加密并且保护数据。本文向您提供了关于 EFS 的基本信息,这些信息可以帮助您在 AIX 6.1 计算机中启用 EFS。您了解了如何创建加密的文件和目录,以及如何通过各种命令来更改密码和继承。您还研究了详细描述 EFS 配置和使用情况的一个用例场景。

参考资料

学习

获得产品和技术

  • IBM 试用软件:从 developerWorks 可直接下载这些试用软件,您可以利用它们开发您的下一个项目。

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=AIX and UNIX
ArticleID=306946
ArticleTitle=了解 EFS
publish-date=05082008