Brad Gough, AIX 技术工程师, IBM
2008 年 1 月 07 日
加密文件系统(EFS)是 AIX 6 的安全新特性之一。它实现了对单个文件的加密功能,从而提供了对文件系统更加精细地管理。本系列文章将比较详细地向您介绍这个新特性的详细内容,本文是系列文章的第 1 部分,主要介绍 EFS 的基础概念和一些简单的管理操作。本文是摘自 IBM 红皮书《AIX V6 Advanced Security Features Introduction and Configuration》。
EFS 是为使用唯一密钥加密每个文件而设计的。加密信息保存在每个文件的文件扩展属性中。EFS 使用 EA(扩展属性)版本 2。
每个文件在写入磁盘之前都会被加密。在将文件从磁盘读取到内存时对文件解密,因此文件数据能够以明文格式保存在内存中。它的优点是只需解密数据一次。尽管文件数据已经以明文格式保存在内存中,但是当另一个用户需要访问该文件时,在授予其访问该数据之前会验证其安全凭据。如果用户无资格访问该文件,则会拒绝访问。
文件加密不但不排除传统访问权限的角色,而且增加了更高的粒度和灵活性。
EFS 的内部功能也集成到了 fdb(file descriptor block,文件描述符块)中。
为支持加密文件系统中的操作,已对用于文件操作的传统命令(如 mv 或 cp)添加了新标志。
为了在系统上能够创建和使用启用 EFS 的文件系统,需要满足以下几个先决条件:
需要安装 C (CliC) 加密库中的 CryptoLite。
必须启用 RBAC(Role Based Access Control)。
必须显式启用使用 EFS 文件系统的系统。
为了创建和使用 EFS,您必须安装免费提供的、级别为 430.CLiC 的 CLiC 加密文件集,您可以在 V Base 光盘附带的扩展包中找到它。
安装 CLiC 文件集后,得到的输出内容应如示例 1 所示。
示例 1 CLiC 文件集的成功安装摘要
Installation Summary
--------------------
Name Level Part Event Result
-------------------------------------------------------------------------------
clic.rte.lib 4.3.0.0 USR APPLY SUCCESS
clic.rte.kernext 4.3.0.0 USR APPLY SUCCESS
clic.rte.includes 4.3.0.0 USR APPLY SUCCESS
clic.rte.kernext 4.3.0.0 ROOT APPLY SUCCESS
|
为了使系统能够使用加密文件系统,您必须运行 efsenable 命令。
可以按以下方式启用文件系统加密:
- 以有权运行此命令的用户(root 或其他具有 aix.security.efs 授权的组安全成员)身份登录系统。
- 运行 efsenable 命令以激活 EFS。如果未安装 CLiC,则命令会失败,并显示如示例 2 所示的输出错误消息。
- 键入用于保护初始密钥存储库的密码。
示例 2 在不安装 CLiC 的情况下,尝试为系统启用 EFS
# efsenable -a
/usr/lib/drivers/crypto/clickext: A file or directory in the path name does not exist.
无法加载 CLiC 内核扩展。请检查您的安装。
重要说明:如果登录密码和密钥存储库密码相同,则在登录时将自动打开用户密钥存储库,并且用户安全凭据与用户进程关联。对于 root 用户,此功能允许将安全权限与所有系统管理命令无缝集成。
运行 efsenable 命令可完成以下任务:
- 创建 /var/efs 目录。在此目录中,将创建以下目录:
efs_admin 目录,它包含 efs_admin 密钥存储库和一个锁定文件(lock file)。
用户目录:此目录包含用于获取对 /var/efs/users 目录独占访问的锁定文件。对系统上定义的每个用户,创建名称与用户名相同的子目录。每个子目录包含相应的用户密钥存储库和锁定文件。锁定文件用于获取对 /var/efs/users/username 目录的独占访问。安装时,创建的子目录、密钥存储库和锁定文件与运行 efsenable 命令的用户(通常为根用户)对应。
组目录:此目录包含用于获取对 /var/efs/groups 目录独占访问的锁定文件。对系统上定义的每个组,创建名称与组名相同的子目录。每个子目录包含相应的组密钥存储库和锁定文件。锁定文件用于获取对 /var/efs 目录的独占访问。安装时,创建的子目录、密钥存储库和锁定文件与组安全对应。
- 为使用公钥/私钥设置缺省长度。
- 为用于文件加密的 AES 算法设置缺省密钥长度和模式。
- 设置缺省密钥存储库管理模式。
- 设置 EFS 管理密钥的算法。
- 指定用户是否可以更改管理密钥存储库的模式。
- 创建名为 /var/efs/efsenabled 的文件,该文件显示已在系统上启用 EFS。
- 更新 /etc/security/user and /etc/security/group,以包含 EFS 特定的新属性。
- 更新 Config_Rules ODM (Object Data Manager) 数据库。
- 加载 efs 内核扩展。
在示例 3 中,我们介绍如何为系统启用 EFS,具体如下:
- 以 root 用户的身份登录。
- 运行 efsenable 命令。
- 使用 genkex 命令验证在内核中是否已加载 efs 内核扩展。
- 显示创建的文件和目录结构,形式应该和“efsenable命令”中的描述一样。
示例 3 启用文件系统加密
# id
uid=0(root) gid=0(system) groups=2(bin),3(sys),7(security),8(cron),10(audit),11(lp)
# efsenable -a
Enter password to protect your initial keystore:
Enter the same password again:
#
# genkex -d|grep -i crypto
4b44000 37748 4b73000 873c /usr/lib/drivers/crypto/clickext
# ls -al /var/efs
total 8
drwxr-xr-x 5 root system 256 May 09 11:03 .
drwxr-xr-x 29 bin bin 4096 May 09 11:03 ..
drwx------ 2 root system 256 May 09 11:03 efs_admin
-rw-r--r-- 1 root system 0 May 09 11:03 efsenabled
drwx------ 3 root system 256 May 09 11:03 groups
drwx------ 3 root system 256 May 09 11:03 users
# ls -al /var/efs/efs_admin
total 8
drwx------ 2 root system 256 May 09 11:03 .
drwxr-xr-x 5 root system 256 May 09 11:03 ..
-rw------- 1 root system 0 May 09 11:03 .lock
-rw------- 1 root system 1709 May 09 11:03 keystore
# ls -al /var/efs/users
total 0
drwx------ 3 root system 256 May 09 11:03 .
drwxr-xr-x 5 root system 256 May 09 11:03 ..
-rw------- 1 root system 0 May 09 11:03 .lock
drwx------ 2 root system 256 May 09 11:03 root
# ls -al /var/efs/groups
total 0
drwx------ 3 root system 256 May 09 11:03 .
drwxr-xr-x 5 root system 256 May 09 11:03 ..
-rw------- 1 root system 0 May 09 11:03 .lock
drwx------ 2 root system 256 May 09 11:03 security
# ls -al /var/efs/users/root
total 8
drwx------ 2 root system 256 May 09 11:03 .
drwx------ 3 root system 256 May 09 11:03 ..
-rw------- 1 root system 0 May 09 11:03 .lock
-rw------- 1 root system 2128 May 09 11:03 keystore
# ls -al /var/efs/groups/security
total 8
drwx------ 2 root system 256 May 09 11:03 .
drwx------ 3 root system 256 May 09 11:03 ..
-rw------- 1 root system 0 May 09 11:03 .lock
-rw------- 1 root system 2062 May 09 11:03 keystore
|
当需要在已运行此命令的系统上运行 efsenable 命令时,将收到以下消息:
此系统上已启用 EFS。
系统运行过程中,锁定文件用于维护用户和组密钥存储库的完整性。
如果发生修改用户密钥存储库的操作,则会执行以下步骤:
- 锁定 /var/efs/users。
- 锁定 /var/efs/users/user。
- 取消锁定 /var/efs/users 以允许后续访问。
- /var/efs/users/user 继续锁定,直到密钥存储库操作完成。
- 密钥存储库操作发生。
- 取消锁定 /var/efs/users/user。
提示:在 syslog.out 文件中可以找到 EFS 关联操作过程中产生的详细日志消息。
在本部分中,我们将讨论在启用 EFS 的文件系统上可以执行的主要操作。
我们提供了用于创建启用 EFS 的文件系统或将现有的 JFS2 文件系统转换为启用 EFS 的文件系统的接口。
您可以使用 SMIT 菜单创建加密文件系统,如示例 4 所示。创建增强的日志文件系统时,缺省情况下,禁用了以加密方式创建文件系统选项。
示例 4 使用 SMIT 创建加密文件系统
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 [/fs1]
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
+
F1=Help F2=Refresh F3=Cancel
F4=List
F5=Reset F6=Command F7=Edit
F8=Image
F9=Shell F10=Exit Enter=Do
|
您还可以使用命令行接口创建 EFS 文件系统。
以下命令将创建挂载在 /fs2 下的 100 MB 大小的加密文件系统:
crfs -v jfs2 -g rootvg -m /fs2 -a size=100M -a efs=yes
|
您可以使用 lsfs –q 命令验证是否创建了与新建的文件系统对应的节,如示例 5 所示。
示例 5 使用 lsfs 命令显示文件系统的 EFS 属性
# lsfs -q /efs
Name Nodename Mount Pt VFS Size Options Auto Accounting
/dev/fslv00 -- /efs jfs2 212992 rw no no
(lv size: 212992, fs size: 212992, block size: 4096, sparse files: yes,
inline log: no, inline log size: 0, EAformat: v2, Quota: no, DMAPI: no,
VIX: no, EFS: yes, ISNAPSHOT: no)
|
请注意,用于加密文件系统的 EA 格式是版本 2,并且 EFS 属性的值设置为“是”。
您可以使用 SMIT 面板或 chfs 命令为现有 JFS2 文件系统启用加密。您需要将 efs 属性的值设置为“是”。
此操作自动将 EA 格式从版本 1 更改为版本 2。将以前在 EA 版本 1 中存储的数据(如 ACL)转换为在 EA 版本 2 中存储。
在撰写本文时,尚未提供任何 WebSM 接口来创建启用 EFS 的文件系统或将常规 JFS2 文件系统转换为启用 EFS 的文件系统。
重要说明:文件系统 /、/usr、/var 和 /opt 不能启用 EFS。
因为在设计 JFS2 文件系统时,完全集成了 EFS 功能,所以可以在常规 JFS2 文件系统上执行的所有操作也可以在启用 EFS 的文件系统上执行。这操作包括:
- 挂载文件系统
- 卸载文件系统
- 增加文件系统的大小
- 减少文件系统的大小
- 对文件系统进行碎片整理
- 删除文件系统
限制:由于文件安全信息保存在文件元数据中,所以无法通过 NFS 导出 EFS 文件系统,并且无法通过 NFS 本地装入该文件系统。
加密继承这一概念指示文件或目录是否可以从其父目录继承加密的属性和所有加密参数。
最初,刚创建 EFS 文件系统后,还没有立即打开继承。您需要使用 efsmgr 命令相应地激活它。打开继承后,创建的所有文件将继承此属性,并隐式加密该属性。目录本身从不加密;它们仅继承加密。
您可以选择在文件系统级别或在目录级别设置继承。打开继承的效果如下所示:
- 在文件系统上设置继承时,将使用在文件系统创建时指定的密码加密在此文件系统中新建的所有文件。所有新建的目录将继承文件系统密码。
- 在目录上设置继承时,将使用从该目录继承的密码加密在此目录中新建的所有文件。所有新建的子目录将继承父目录密码。
如果同时在文件系统级别和目录级别设置继承,但又设置为在文件系统级别使用一个密码,在目录级别使用另一个密码,则使用目录密码加密文件。
禁用目录或文件系统的继承后,创建的所有新文件将成为明文格式。禁用继承不影响以加密格式创建的文件。它们将保留加密。
在示例 6 中,我们展示了如何以文件系统级别打开继承,及其在目录和文件上的效果,如下所示:
- crfs -v jfs2 -g rootvg -m /efs -a size=100M -a efs=yes 命令可创建加密文件系统。
- 尝试使用 efsmgr -s -E /efs 命令为未挂载的文件系统设置继承失败。
- 挂载 /efs 命令可装入文件系统,并使用 efsmgr -s -E /efs 命令成功设置继承。
- 使用 efskeymgr -o ksh 命令将密钥存储库的内容加载到当前 Shell。
- mkdir 命令可创建 dir1 目录。
- efsmgr -E dir1 命令可以为 dir1 设置继承。
- getea 和 efsmgr -L 命令显示已设置继承。
- file1 已创建,efskeymgr -l file1 命令显示已加密 file1。
- efsmgr -D dir1 命令可以禁用 dir1 的继承。
- efsmgr -L 和 getea 命令显示已禁用继承。
- file2 是以明文格式创建的,如 ls –U 命令所示。
- 可以使用 efsmgr -d 命令单独解密 file1。
- 可以使用 efsmgr -e 命令单独加密 file2。换句话说,可以单独加密或解密文件,而无需考虑其父目录的继承。
- ls -U 命令可显示文件加密标志的新值。
示例 6 在文件系统级别设置和使用继承
# crfs -v jfs2 -g rootvg -m /efs -a size=100M -a efs=yes
File system created successfully.
106288 kilobytes total disk space.
New File System size is 212992
# efsmgr -s -E /efs
/efs:
Error setting EFS attributes: The media is not formatted or the format is not correct.
# mount /efs
# efsmgr -s -E /efs
# efskeymgr -o ksh
root's EFS password:
#mkdir dir1
# efsmgr -E dir1
# getea dir1
EAName: øSYSTEMø_NRE
EAValue:
# efsmgr -L dir1
EFS inheritance is set with algorithm: AES_128_CBC
# cd dir1
# touch file1
# efsmgr -l file1
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 : 569ae24b:c2da3415:6e7e651e:b7d2f29f:1dda5ab9
# efsmgr -D dir1
# efsmgr -L dir1
Error getting EFS attributes: Cannot find the requested security attribute.
# getea dir1
dir1 does not have any extended attributes.
# touch file2
# ls -U file2
-rw-r--r--- 1 root system 0 May 14 13:19 file2
# efsmgr -d file1
# efsmgr -e file2
# ls -U file*
-rw-r--r--- 1 root system 0 May 14 13:22 file1
-rw-r--r--e 1 root system 0 May 14 13:22 file2
|
当需要启用已设置继承的文件系统的加密继承时,将显示以下消息:
# efsmgr -s -E /efs1
/efs1: The EFS attribute is already defined
|
这是系列文章的第 1 部分,我们向您介绍了加密文件系统(EFS)的一些基本概念,以及如何让您的系统启用 EFS。当然,我们还介绍了一些接单的 EFS 的操作,让您对它有一个初步的认识。在后面的文章中,我们会向您陆续介绍一些 EFS 的高级管理知识,希望能对您的工作有所帮助。 |