Brad Gough, AIX 技术工程师, IBM
2008 年 1 月 28 日
加密文件系统(EFS)是 AIX 6 的安全新特性之一。它实现了对单个文件的加密功能,从而提供了对文件系统更加精细地管理。本系列文章将比较详细地向您介绍这个新特性的详细内容,本文是系列文章的第 2 部分,主要以实际操作的来向您展示加密文件系统在文件级别的一些功能。本文是摘自 IBM 红皮书《AIX V6 Advanced Security Features Introduction and Configuration》。
每个文件都使用 AES 算法进行了加密。AES 使用在创建该文件时随机生成的一个唯一的对称加密密钥。AES 所需的其他参数,如模式和密钥长度,都是从文件所在的目录或者文件系统继承而来的。
在将文件数据写入到磁盘的时候,对其进行加密;而从磁盘读取这些数据的时候,对其进行解密。
用于文件加密的对称密钥是由创建文件的用户的公共密钥来进行加密的,并且将其存储于文件的扩展属性中。这表示文件加密的元数据。如果为一个用户或者组授予该文件的访问权限,那么将使用这个用户或者组的公共密钥对文件对称密钥进行加密,并将其添加到该文件的扩展属性中。对于可授权访问该文件的用户或者组的数目来说,几乎没有任何限制。
只有拥有与这些公共密钥相匹配的私有密钥的那些用户,才能够获得对数据的访问权限。
当您创建一个加密文件时,将使用该文件属主的公共密钥对文件的对称加密密钥进行加密,并将其写入到该文件的加密元数据中。如果 umask 值允许组访问,那么将使用组的公共密钥对文件的对称加密密钥的另一个副本进行加密,并将其添加到该文件的加密元数据中。
在示例 1 中,显示了缺省文件访问密钥的创建,以及 umask 值对它的影响方式。我们进行下面的操作:
- user2 是 group1 的成员。
- umask 值是 022。
- 创建 file1。因为 file1 可以由 user2 和 group1 进行读访问,所以会将该文件的对称加密密钥的两个副本(其中一个副本使用 user2 的公共密钥进行加密,另一个副本使用 group1 的公共密钥进行加密)添加到该文件的加密元数据中。
- 更改 umask 值,使得 group1 的成员不再具有访问权限。
- 创建 file2。因为现在只有 user2 可以访问 file2,所以对该文件的对称加密密钥的唯一副本使用 user2 的公共密钥进行加密,并且将其添加到该文件的加密元数据中。
示例 1 缺省文件访问密钥和 umask
$ id uid=205(user2) gid=203(group1)
$ umask
022
$ touch file1
$ ls -aU file1
-rw-r--r--e 1 user2 group1 0 May 15 14:52 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 205
Key fingerprint :f9d25800:dae0c93b:7695424c:6c617cd6:53b3a7aa
Key #2:
Algorithm :RSA_1024
Who :gid 203
Key fingerprint :4a73c007:bb0e6b35:abe672c6:cdaf2964:5dd69586
$ umask 077
$ touch file2
$ ls -aU file2
-rw-------e 1 user2 group1 0 May 15 14:53 file2
$ efsmgr -l file2
EFS File information:
Algorithm:AES_128_CBC
List of keys that can open the file:
Key #1:
Algorithm :RSA_1024
Who :uid 205
Key fingerprint :f9d25800:dae0c93b:7695424c:6c617cd6:53b3a7aa
|
有几个命令可用于显示文件的安全信息、命名的扩展属性信息和加密信息。
在示例 2 中,我们使用下面的几个命令,以查找有关文件加密的信息:
- ls -U 命令显示文件的安全信息。文件权限末尾处所显示的 e 表示该文件是经过加密的。
- getea 命令显示命名的扩展安全属性,该信息显示这个文件是经过加密的。您可以看到 EA 中包含每个文件的加密元数据。
- efsmgr -l 命令显示用于对文件进行加密的密码算法、算法模式和密钥的长度。它还显示可以访问该文件的密钥的指纹,以及拥有这些密钥的用户/组的 uid/gid。
示例 2 列出了关于文件加密的信息
# ls -U file
-rw-r--r--e 1 root system 0 May 09 19:36 file
# getea file
EAName:øSYSTEMø_NRE
EAValue:
# efsmgr -l file
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 :5363bd50:0ed7631d:08a93ee5:efdbde20:54f1028c
Key #2:
Algorithm :RSA_1024
Who :gid 202
Key fingerprint :19f16934:20a54e8e:d59aea33:111a37bf:06261785
|
在这个部分中,我们将研究文件加密对文件大小、索引节点和磁盘块所造成的影响。我们使用一个名为 /efs 的、支持 EFS 的文件系统。我们执行下面的操作,如示例 3 中所示。
- ls -iU file 命令显示一个名为 file 的小型加密文件,该文件长度为 5 个字节,并且对应于索引节点 8。
- istat 8 /dev/fslv00 命令显示一个指向块 2f 的指针。
- du file 命令报告使用 16 个块来存储这个文件。
- efsmgr -d file 命令对文件进行解密。
- ls -iU file 命令显示该文件已经经过加密,并且其大小没有改变。为该文件分配了一个新的索引节点,即索引节点 5。
- istat 5 /dev/fslv00 命令现在显示一个指向块 2c 的指针。
- du file 命令报告现在使用 8 个块来存储这个文件。
示例 3 加密对文件的影响
# ls -iU file
8 -rw-r--r--e 1 root system 5 May 01 01:36 file
# istat 8 /dev/fslv00
Inode 8 on device 10/10 File
Protection:rw-r--r--
Owner:0(root) Group:0(system)
Link count:1 Length 5 bytes
Last updated:Tue May 1 01:36:23 MST 2007
Last modified:Tue May 1 01:36:23 MST 2007
Last accessed:Tue May 1 01:36:37 MST 2007
Block pointers (hexadecimal):
2f
# du file
16 file
# efsmgr -d file
# ls -iU file
5 -rw-r--r--- 1 root system 5 May 01 01:41 file
# istat 5 /dev/fslv00
Inode 5 on device 10/10 File
Protection:rw-r--r--
Owner:0(root) Group:0(system)
Link count:1 Length 5 bytes
Last updated:Tue May 1 01:41:38 MST 2007
Last modified:Tue May 1 01:41:38 MST 2007
Last accessed:Tue May 1 01:41:38 MST 2007
Block pointers (hexadecimal):
2c
# du file
8 file
#
|
在某些场景中,您应该考虑这些行为。
例如,如果在您所运行的商业 Web 服务器的缓存中存放了大量的小型文件,并且这些文件中的数据需要通过加密来进行保护,那么您需要密切地监视可用的存储空间。
另一种情况是,某个环境中需要进行大量的文件加密/解密操作,并且每个文件所对应的索引节点编号对于其他应用程序来说是非常重要的。如果您使用索引节点编号来备份您的文件,那么请特别留意。
因为加密和解密的过程将更改分配给文件的索引节点编号,并且还会修改最后一次更新索引节点的时间、文件修改时间以及文件引用。
在这个部分中,我们将研究文件加密对文件所对应的磁盘块所造成的影响。我们使用一个名为 /efs 的、支持 EFS 的文件系统。我们执行下面的操作,如示例 4 中所示。
- 我们创建一个明文的文件,以便可以很容易地在 /efs 加密文件系统中查看其中的内容。该文件所对应的索引节点是 19。
- 我们观察索引节点 19 所包含的信息,发现该文件使用的块的编号为 3d。
- 我们使用 fsdb 以查看块 3d 的内容,并注意到数据以明文格式存储于磁盘中。
- 我们使用 efsmgr 命令对该文件进行加密,并观察到新的索引节点(即索引节点 4)已与该文件建立了关联。
- 我们查看索引节点 19 所包含的信息,发现该文件所使用的块的编号为 2d。
- 我们使用 fsdb 以查看块 2d 的内容,发现数据以加密的格式存储于磁盘中。
示例 4 检查加密文件的磁盘块
root@nimrod:/efs# ls -ailU
total 24
2 drwxrwxrwxe 3 root system 256 May 08 16:49 ./
2 drwxr-xr-x- 24 root system 4096 May 08 14:37 ../
19 -rw-r--r--- 1 root system 144 May 08 16:36 file
3 drwxr-xr-x- 2 root system 256 May 07 11:27
lost+found/
root@nimrod:/efs# cat file
111111111111111
222222222222222
333333333333333
444444444444444
555555555555555
666666666666666
777777777777777
888888888888888
999999999999999
root@nimrod:/efs# istat 19 /dev/fslv01
Inode 19 on device 10/12 File
Protection:rw-r--r--
Owner:0(root) Group:0(system)
Link count:1 Length 144 bytes
Last updated:Tue May 8 16:36:34 CDT 2007
Last modified:Tue May 8 16:36:34 CDT 2007
Last accessed:Tue May 8 16:51:44 CDT 2007
Block pointers (hexadecimal):
3d root@nimrod:/efs# fsdb /dev/fslv01
Filesystem /dev/fslv01 is mounted.Modification is not permitted.
File System:/dev/fslv01
File System Size:212576 (512 byte blocks)
Aggregate Block Size: 4096
Allocation Group Size:8192 (aggregate blocks)
> display 0x3d
Block:61 Real Address 0x3d000
00000000: 31313131 31313131 31313131 3131310A |111111111111111.|
00000010: 32323232 32323232 32323232 3232320A |222222222222222.|
00000020: 33333333 33333333 33333333 3333330A |333333333333333.|
00000030: 34343434 34343434 34343434 3434340A |444444444444444.|
00000040: 35353535 35353535 35353535 3535350A |555555555555555.|
00000050: 36363636 36363636 36363636 3636360A |666666666666666.|
00000060: 37373737 37373737 37373737 3737370A |777777777777777.|
00000070: 38383838 38383838 38383838 3838380A |888888888888888.|
00000080: 39393939 39393939 39393939 3939390A |999999999999999.|
00000090: 00000000 00000000 00000000 00000000 |................|
000000a0: 00000000 00000000 00000000 00000000 |................|
000000b0: 00000000 00000000 00000000 00000000 |................|
000000c0: 00000000 00000000 00000000 00000000 |................|
000000d0: 00000000 00000000 00000000 00000000 |................|
000000e0: 00000000 00000000 00000000 00000000 |................|
000000f0: 00000000 00000000 00000000 00000000 |................|
-hit enter for more-
... lines skipped......................................................
root@nimrod:/efs# efsmgr -e file root@nimrod:/efs# ls -ialU
total 32
2 drwxrwxrwxe 3 root system 256 May 08 17:02 ./
2 drwxr-xr-x- 24 root system 4096 May 08 14:37 ../
4 -rw-r--r--e 1 root system 144 May 08 17:02 file
3 drwxr-xr-x- 2 root system 256 May 07 11:27
lost+found/
root@nimrod:/efs# istat 4 /dev/fslv01
Inode 4 on device 10/12 File
Protection:rw-r--r--
Owner:0(root) Group:0(system)
Link count:1 Length 144 bytes
Last updated:Tue May 8 17:02:49 CDT 2007
Last modified:Tue May 8 17:02:49 CDT 2007
Last accessed:Tue May 8 17:02:49 CDT 2007
Block pointers (hexadecimal):
2d root@nimrod:/efs# fsdb /dev/fslv01
Filesystem /dev/fslv01 is mounted.Modification is not permitted.
File System:/dev/fslv01
File System Size:212576 (512 byte blocks)
Aggregate Block Size: 4096
Allocation Group Size:8192 (aggregate blocks)
> display 0x2d
Block:45 Real Address 0x2d000
00000000: 484AC9D2 C83AE1AB EB598765 A1434DCC |HJ...:...Y.e.CM.|
00000010: 631ABD5A F41D5081 C88B154F 4776DD7B |c..Z..P....OGv.{|
00000020: 9ED051A5 9E4AD8C4 A1405607 2681ECE7 |..Q..J...@V.&...|
00000030: F736D795 32D183CF 1C30CD86 EB9009A2 |.6..2....0......|
00000040: 7A3D3142 3BFC6196 86490E10 4203FD52 |z=1B;.a..I..B..R|
00000050: 57F4E7A7 66C5A9CD E9E5CD71 8B64C368 |W...f......q.d.h|
00000060: 391963FA F2ED5A07 0A1BDEEF 20E9E8A4 |9.c...Z..... .。。|
00000070: 85F888EF 32E95FCF 4BF03826 D62393C1 |....2._.K.8&.#..|
00000080: DD138A6E 4E70FD23 EF691605 ACCCDB01 |...nNp.#.i......|
00000090: AD59A23A F0D9E3E6 F32575EF 5DD8EF15 |.Y.:.....%u.]...|
000000a0:0DA37573 0DFC54CE 505983F0 86648058 |..us..T.PY...d.X|
000000b0:DDF4EB20 F6A3C1DD 1A1FC8BD CFDFA163 |..............c|
000000c0:989EE442 5A82B98A 2AE34A77 0FE41338 |...BZ...*.Jw...8|
000000d0:5E7C14DC D5C56B9E 093CC234 B9AF879E |^|....k..<.4....|
000000e0:19638EBB A13C4154 5AE06F68 62B62326 |.c... |
|
|
在这个部分中,我们将介绍如何对一个经过加密的文件进行解密。我们使用一个名为 /efs 的、支持 EFS 的文件系统。我们执行下面的操作,如示例 5 中所示。
- efsmgr -l 命令显示文件的加密信息。
- 使用 efsmgr -d 命令对文件进行解密。
- ls 命令显示该文件不再是经过加密的文件。
- getea 命令显示该文件没有任何扩展的属性,并且因此没有加密元数据。
- efsmgr -l 命令显示一个错误,因为它无法获得安全属性。
示例 5 对经过加密的文件进行解密
# efsmgr -l file
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 :5131afb9:95232d08:ae5c499d:dd9941fe:90163a89
# efsmgr -d file
# ls -U file
-rw-r--r--- 1 root system 21 Apr 24 06:18 file
# getea file file does not have any extended attributes.
# efsmgr -l file
Error getting EFS attributes:Cannot find the requested security attribute.
|
即使您是某个文件的属主,您也必须拥有能够对文件进行解密的私有密钥,如示例 6 中所示。在没有访问密钥的情况下,任何对文件进行解密的尝试都将失败。
示例 6 为了对文件进行解密,必须将私有密钥加载到进程中
# id uid=0(root) gid=0(system)
groups=2(bin),3(sys),7(security),8(cron),10(audit),11(lp)
# ls -U file
-rw-r--r--e 1 root system 21 Apr 24 06:29 file
# efskeymgr -V
There is no key loaded in the current process.
# cat file cat:0652-050 Cannot open file.
# efskeymgr -o ksh root's EFS password:
# efskeymgr -d file
# ls -U file
-rw-r--r--- 1 root system 21 Apr 24 06:29 file
|
在这个部分中,我们将介绍如何对一个经过加密的文件进行加密。我们使用一个名为 /efs 的、支持 EFS 的文件系统。我们进行下面的操作(如示例 7 中所示):
- ls -U 命令显示该文件不再是经过加密的文件。
- efsmgr -e 命令对文件进行加密。
- efsmgr -l 命令显示文件的加密信息。
示例 7 对文件进行加密
# ls -U file
-rw-r--r--- 1 root system 21 Apr 24 06:18 file
# efsmgr -e file
# efsmgr -l file
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 :5131afb9:95232d08:ae5c499d:dd9941fe:90163a89
|
即使您是某个文件的属主,您也必须拥有能够对文件进行加密的私有密钥,如示例 8 中所示。在没有访问密钥的情况下,任何对文件进行加密的尝试都将失败。
示例8 为了对文件进行加密,必须将私有密钥加载到进程中
# efskeymgr -V
There is no key loaded in the current process.
# ls -U ffff
-rw-r--r--- 1 root system 0 Apr 25 00:09 ffff
# efsmgr -e ffff
./.efs.9Xqi7a:Cannot find the requested security attribute.
# efskeymgr -o ksh root's EFS password:
#efsmgr -e ffff
# efsmgr -l ffff
EFS File information:
Algorithm:AES_256_CBC
List of keys that can open the file:
Key #1:
Algorithm :RSA_1024
Who :uid 0
Key fingerprint :5131afb9:95232d08:ae5c499d:dd9941fe:90163a89
|
在示例 9 中,我们介绍了如何更改加密密钥的长度,以及经过加密的文件的 AES 模式。我们使用一个名为 /efs 的、支持 EFS 的文件系统。初始密钥长度是 128,初始模式是 CBC。生成一个长度为 256 的新密钥,并且在 ECB 模式中对文件进行加密。
示例9 更改文件加密的算法
# efsmgr -l file
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 :5363bd50:0ed7631d:08a93ee5:efdbde20:54f1028c
# efsmgr -t file -c AES_256_ECB
# efsmgr -l file
EFS File information:
Algorithm:AES_256_ECB
List of keys that can open the file:
Key #1:
Algorithm :RSA_1024
Who :uid 0
Key fingerprint :5363bd50:0ed7631d:08a93ee5:efdbde20:54f1028c
|
注意:如果您更改了密钥参数或者密钥,那么将为该文件分配一个不同的索引节点。
了解在控制文件访问方面,传统的 AIX 文件权限如何与文件加密进行交互,这一点非常重要。这两种机制相互并不重叠。它们相互协作,以提供对文件访问的更细粒度的控制。
当您尝试使用一个经过加密的文件时,首先将检查自主访问控制(Discretionary Access Control,DAC)和访问控制列表(Access Control List,ACL)以查找文件访问权限。只有在这些级别中授予了访问权限的情况下,才能继续进行密钥验证。
在示例10 中,显示了如何首先检查传统的文件访问权限。在我们的场景中,进行下面的操作:
- 以 user1 用户的身份进行登录。user1 的 uid 为 210。
- ls 命令显示该文件由 user1 所拥有。staff 组中的用户不具有读写访问权限。
- efsmgr -l 命令显示可以访问该文件的密钥的签名。一个密钥属于 uid 为 210 的用户 (user1),另一个密钥属于 uid 为 211 的用户 (user2)。
- user2 登录,并且 efsmgr -V 命令证明他或者她拥有访问密钥。
- 尽管 user2 具有密钥,但是 cat 命令还是会失败,因为 user2 不能读取该文件(他或者她没有读访问权限)。
- user1 登录,并使用 chmod 命令,为 staff 组的所有用户授予读访问权限。
- cat 命令成功地完成,因为 user2 现在同时具有读访问权限和密钥。
- user2 尝试使用 echo 命令向该文件中追加一些文本,这个尝试会失败,因为他或者她没有写访问权限。
- user1 登录,并使用 chmod 命令为 staff 组的所有用户授予写访问权限。
- 现在,user2 可以成功地向该文件中追加文本,因为他或者她现在同时具有写访问权限和密钥。
示例 10 文件访问权限和文件安全并不重叠
$ id uid=210(user1) gid=1(staff)
$ ls -U file
-rwx------e 1 user1 staff 38 Apr 26 07:44 file
$ efsmgr -l file
EFS File information:
Algorithm:AES_256_CBC
List of keys that can open the file:
Key #1:
Algorithm :RSA_1024
Who :uid 210
Key fingerprint :3cf44e44:2544568e:9377638d:adce70ca:5fd1c54d
Key #2:
Algorithm :RSA_1024
Who :uid 211
Key fingerprint :a9e9087f:82a41b75:a258f918:8de0c180:38028ac2
$ id uid=211(user2) gid=1(staff)
$ efskeymgr -V
List of keys loaded in the current process:
Key #0:
Kind .....................User key
Id (uid / gid) ......... 211
Type .....................Private key
Algorithm ................RSA_1024
Validity .................Key is valid
Fingerprint ..............
a9e9087f:82a41b75:a258f918:8de0c180:38028ac2
$ cat /home/user1/file cat:0652-050 Cannot open /home/user1/file.
$ id uid=210(user1) gid=1(staff)
$ chmod g+r file
$ id uid=211(user2) gid=1(staff)
$ cat /home/user1/file
If you can see this message it is ok
$ echo "Another message in the file " >> /home/user1/file
The file access permissions do not allow the specified action.
ksh:/home/user1/file:0403-005 Cannot create the specified file.
$ id uid=210(user1) gid=1(staff)
$ chmod g+w file
$ id uid=211(user2) gid=1(staff)
$ echo "Another message in the file " >> /home/user1/file
$ cat /home/user1/file
If you can see this message it is ok
Another message in the file
$
|
当您使用 chmod 命令为某个组授予对文件的访问权限时,如果该组的公共访问密钥已经包含于文件加密元数据中,那么它将进行自动地添加。当您删除所有的组文件权限时,将从文件加密元数据中删除公共组密钥,如示例 11 中所示:
- 对于该文件,不存在任何组权限。
- 根据 efsmgr -l 命令的显示,只有 user2 拥有该文件的访问密钥。
- 使用 chmod 命令,为 group1 的成员授予写访问权限。
- efsmgr -l 命令显示,使用 group1 的公共密钥对文件的对称加密密钥的另一个副本进行加密,并将其添加到文件加密元数据中。
- 使用 chmod 命令删除 group1 成员的写访问权限。
- efsmgr -l 命令显示,对于使用组公共密钥对文件的对称加密密钥进行加密的副本,已经从文件加密元数据中删除。
示例 11 组访问权限和组访问密钥
$ ls -U file
-rw-------e 1 user2 group1 0 May 15 15:32 file
$ efsmgr -l file
EFS File information:
Algorithm:AES_128_CBC
List of keys that can open the file:
Key #1:
Algorithm :RSA_1024
Who :uid 205
Key fingerprint :f9d25800:dae0c93b:7695424c:6c617cd6:53b3a7aa
$ chmod g+w file
$ efsmgr -l file
EFS File information:
Algorithm:AES_128_CBC
List of keys that can open the file:
Key #1:
Algorithm :RSA_1024
Who :uid 205
Key fingerprint :f9d25800:dae0c93b:7695424c:6c617cd6:53b3a7aa
Key #2:
Algorithm :RSA_1024
Who :gid 203
Key fingerprint :4a73c007:bb0e6b35:abe672c6:cdaf2964:5dd69586
$ chmod g-w file
$ ls -U file
-rw-------e 1 user2 group1 0 May 15 15:32 file
$ efsmgr -l file
EFS File information:
Algorithm:AES_128_CBC
List of keys that can open the file:
Key #1:
Algorithm :RSA_1024
Who :uid 205
Key fingerprint :f9d25800:dae0c93b:7695424c:6c617cd6:53b3a7aa
|
|
|
在这个部分中,我们将研究文件所有权和加密文件元数据之间的交互。我们使用一个名为 /efs 的、支持 EFS 的文件系统,名为 user2 和 user3 的两个用户都可以访问 /efs 文件系统,并且还有一个名为 file 的测试文件,该文件在初始情况下由 user2 所拥有。我们在 root admin 模式中运行该场景,并进行下面的操作(如示例 12 中所示):
- 以 user2 用户的身份进行登录。user2 的 uid 为 204。
- ls 命令显示该文件经过加密,并且由 user2 所拥有。
- efsmgr -l file 显示可以访问该文件的密钥的签名。该密钥属于 uid 为 204 的用户 (user2)。
- efskeymgr -V 命令显示,user2 拥有访问密钥,并且可以成功地使用 cat 命令读取该文件。
- root 用户登录,并使用 chown 命令更改文件的所有权。
- ls 命令显示,已经更改了该文件的所有权。
- efsmgr -l 命令显示可以访问该文件的新密钥的签名。该密钥属于 uid 为 205 的用户。已经从文件加密元数据中删除了属于 user2 的密钥。
- user3 登录。他或者她的 uid 为 205。
- efsmgr -V 命令证明,user3 拥有对该文件的访问密钥。
- 可以成功地使用 cat 命令读取该文件。
- user2 不再具有对文件的访问权限,并且尝试使用 cat 命令读取该文件将会失败。
示例12 更改文件的所有权
$ id uid=204(user2) gid=1(staff)
$ ls -U file
-rw-r--r--e 1 user2 staff 23 May 10 10:13 file
$ efsmgr -l file
EFS File information:
Algorithm:AES_128_CBC
List of keys that can open the file:
Key #1:
Algorithm :RSA_1024
Who :uid 204
Key fingerprint :366da13e:e40d8c52:0d0492ce:3b8797b6:6f5f9bf2
$ efskeymgr -V
List of keys loaded in the current process:
Key #0:
Kind .....................User key
Id (uid / gid) ......... 204
Type .....................Private key
Algorithm ................RSA_1024
Validity .................Key is valid
Fingerprint ..............
366da13e:e40d8c52:0d0492ce:3b8797b6:6f5f9bf2
$ cat file data in encrypted file
# id uid=0(root) gid=0(system)
groups=2(bin),3(sys),7(security),8(cron),10(audit),11(
lp)
# chown user3:staff file
# ls -U file
-rw-r--r--e 1 user3 staff 23 May 10 10:13 file
# efsmgr -l file
EFS File information:
Algorithm:AES_128_CBC
List of keys that can open the file:
Key #1:
Algorithm :RSA_1024
Who :uid 205
Key fingerprint :30412121:e5a7b90d:dba7dd19:2c45b1e0:c331c09f
$ id uid=205(user3) gid=1(staff)
$ efskeymgr -V
List of keys loaded in the current process:
Key #0:
Kind .....................User key
Id (uid / gid) ......... 205
Type .....................Private key
Algorithm ................RSA_1024
Validity .................Key is valid
Fingerprint ..............
30412121:e5a7b90d:dba7dd19:2c45b1e0:c331c09f
$ cat file data in encrypted file
$ id uid=204(user2) gid=1(staff)
$ cat file cat:0652-050 Cannot open file.
|
如果您在更改文件所有权时也更改了组,那么会将使用新组的公共密钥进行加密的对称文件密钥添加到文件的加密元数据中,如示例 13 中所示。
示例 13 更改文件的所有权
# ls -U file
-rw-r--r--e 1 user1 group1 5 May 13 15:03 file
# efsmgr -l file
EFS File information:
Algorithm:AES_128_CBC
List of keys that can open the file:
Key #1:
Algorithm :RSA_1024
Who :uid 210
Key fingerprint :ea2d177c:7776d3a2:c840b44b:1c2b1ccf:c875d55d
Key #2:
Algorithm :RSA_1024
Who :gid 204
Key fingerprint :53cd3824:7c9d508e:b825a253:f3209fcf:76f1766f
# chown user2:group2 file
# ls -U file
-rw-r--r--e 1 user2 group2 5 May 13 15:03 file
# efsmgr -l file
EFS File information:
Algorithm:AES_128_CBC
List of keys that can open the file:
Key #1:
Algorithm :RSA_1024
Who :uid 211
Key fingerprint :52dccf67:22ab2bc9:4caa4ec8:7ceb8675:972c1404
Key #2:
Algorithm :RSA_1024
Who :gid 205
Key fingerprint :61e6538d:343c8313:df807f20:ab02451e:734309ca
|
在这个部分中,我们将说明并介绍如何为用户和组成员授予对文件的访问权限。
在为用户/组授予对某个文件的访问权限时,将使用用户/组的公共密钥为用于对文件进行加密的对称密钥副本进行加密,并将其添加到文件加密元数据中。
我们使用下面的场景:一个名为 /efs 的、支持 EFS 的文件系统,名为 user1、user2 和 user3 的三个用户可以访问 /efs 文件系统,
还有一个名为 file 的测试文件,该文件由 user2 所拥有。user1 是 group1 的成员。
我们在 root admin 模式中运行我们的场景,并执行下面示例 14 中所示的操作:
- 以 user2 用户的身份登录。user2 的 uid 为 204。
- ls 命令显示该文件是经过加密的,并且由 user2 所拥有。了解在 root admin 模式中,只有 root 和该文件的属主可以向其他用户授予访问权限,这一点是很重要的。
- efsmgr -l 命令显示可以访问该文件的密钥的签名。只有一个密钥属于 uid 为 204 的用户 (user2)。
- efskeymgr -V 命令显示,user2 拥有授予该文件访问权限所需的访问密钥。
- user2 使用 efsmgr 命令为 user3 授予对该文件的访问权限。
- efsmgr -l 命令显示可以访问该文件的密钥的签名。所添加的新密钥属于 uid 为 205 的用户 (user3)。
- user2 使用 efsmgr 命令为 group1 授予对该文件的访问权限。
- efsmgr -l 命令显示可以访问该文件的密钥的签名。所添加的新密钥属于 gid 为 202 的组 (group1)。对文件加密元数据进行了更新。
- user3 登录。他或者她的 uid 为 203。
- efsmgr -V 命令显示,user3 拥有一个用户访问密钥,并且它与授权对该文件进行访问的其中一个密钥相匹配。
- 可以成功地使用 cat 命令读取该文件。
- user1 登录。他或者她的 uid 为 205。
- efsmgr -V 命令显示,user1 拥有一个组 (group1) 访问密钥,并且它与授权对该文件进行访问的其中一个密钥相匹配。
- 可以成功地使用 cat 命令读取该文件。
- user1 恶意地尝试使用 efsmgr 命令为 user5 授予访问该文件的权限,而该操作失败。换句话说,对于由文件属主授予文件访问权限的某个用户,他不能进一步将访问权限授予第三方。
示例14 为用户和组授予文件的访问权限
$ id uid=204(user2) gid=1(staff)
$ ls -U file
-rw-r--r--e 1 user2 staff 23 May 10 10:55 file
$ efsmgr -l file
EFS File information:
Algorithm:AES_128_CBC
List of keys that can open the file:
Key #1:
Algorithm :RSA_1024
Who :uid 204
Key fingerprint :366da13e:e40d8c52:0d0492ce:3b8797b6:6f5f9bf2
$ efskeymgr -V
List of keys loaded in the current process:
Key #0:
Kind .....................User key
Id (uid / gid) ......... 204
Type .....................Private key
Algorithm ................RSA_1024
Validity .................Key is valid
Fingerprint ..............
366da13e:e40d8c52:0d0492ce:3b8797b6:6f5f9bf2
$ efsmgr -a file -u user3
$ efsmgr -l file
EFS File information:
Algorithm:AES_128_CBC
List of keys that can open the file:
Key #1:
Algorithm :RSA_1024
Who :uid 204
Key fingerprint :366da13e:e40d8c52:0d0492ce:3b8797b6:6f5f9bf2
Key #2:
Algorithm :RSA_1024
Who :uid 205
Key fingerprint :30412121:e5a7b90d:dba7dd19:2c45b1e0:c331c09f
$ efsmgr -a file -g group1
$ efsmgr -l file
EFS File information:
Algorithm:AES_128_CBC
List of keys that can open the file:
Key #1:
Algorithm :RSA_1024
Who :uid 204
Key fingerprint :366da13e:e40d8c52:0d0492ce:3b8797b6:6f5f9bf2
Key #2:
Algorithm :RSA_1024
Who :uid 205
Key fingerprint :30412121:e5a7b90d:dba7dd19:2c45b1e0:c331c09f
Key #3:
Algorithm :RSA_1024
Who :gid 202
Key fingerprint :19f16934:20a54e8e:d59aea33:111a37bf:06261785
$ id uid=205(user3) gid=1(staff)
$ efskeymgr -V
List of keys loaded in the current process:
Key #0:
Kind .....................User key
Id (uid / gid) ......... 205
Type .....................Private key
Algorithm ................RSA_1024
Validity .................Key is valid
Fingerprint ..............
30412121:e5a7b90d:dba7dd19:2c45b1e0:c331c09f
$ cat file data in encrypted file
$ id uid=203(user1) gid=1(staff) groups=202(group1)
$ efskeymgr -V
List of keys loaded in the current process:
Key #0:
Kind .....................User key
Id (uid / gid) ......... 203
Type .....................Private key
Algorithm ................RSA_1024
Validity .................Key is valid
Fingerprint ..............
eb1aab3e:39c3191c:15cb36d6:57bb2a7c:b3c6d356
Key #1:
Kind .....................Group key
Id (uid / gid) ......... 202
Type .....................Private key
Algorithm ................RSA_1024
Validity .................Key is valid
Fingerprint ..............
19f16934:20a54e8e:d59aea33:111a37bf:06261785
$ cat file data in encrypted file
$ efsmgr -a file -u user5
file:The file access permissions do not allow the specified action.
Cannot open or lock the file. | 注意:如果尝试为系统中定义的用户/组授予访问权限,但不创建密钥存储库,那么这个操作仍将失败,因为没有任何公共密钥可以对文件的对称加密密钥进行加密、并且添加到文件加密元数据中。任何尝试都将显示与下面内容类似的错误消息: $efsmgr -a file -u user5 Unable to get public key from user “user5” (skipped):(Keystore does not exist) user5:The system call does not exist on this system.
在这个部分中,我们将说明并介绍如何撤销用户对文件的访问权限。
在撤销用户/组对文件的访问权限时,将从文件加密元数据中删除使用用户/组的公共密钥进行过加密的对称密钥的现有副本(该副本用于对文件进行加密)。
我们使用下面的场景:一个名为 /efs 的、支持 EFS 的文件系统,名为 user1、user2 和 user3 的三个用户可以访问 /efs 文件系统,还有一个名为 file 的测试文件,该文件由 user2 所拥有。user1 是 group1 的成员。
为 user1 和 group1 授予了对该文件的访问权限。我们在 root admin 模式中运行我们的场景,并执行下面的示例 15 中所示的操作:
- 以 user2 用户的身份登录。user2 的 uid 为 204。
- ls 命令显示该文件是经过加密的,并且由 user2 所拥有。
- efsmgr -l 命令显示可以访问该文件的密钥的签名。可以访问该文件的密钥一共有三个:一个密钥属于 uid 为 204 的用户 (user2),一个密钥属于 uid 为 205 的用户 (user3),一个密钥属于 gid 为 202 的组 (group1)。
- user3 登录,并且尝试使用 efsmgr 命令以撤销 group1 对该文件的访问权限,该操作失败。换句话说,对于由文件属主授予文件访问权限的某个用户,他不能进一步撤销第三方的访问权限。
- efskeymgr -V 命令显示,user2 拥有撤销该文件访问权限所需的密钥。
- user2 使用 efsmgr 命令撤消 user3 对该文件的访问权限。
- efsmgr -l 命令显示仍然可以访问该文件的密钥的签名。对文件加密元数据进行了更新,并且删除了属于 uid 为 205 的用户 (user3) 的密钥。
- user3 登录,但是不再能够访问该文件,并且 cat 命令失败。
- user2 使用 efsmgr 命令撤销 group1 对文件的访问权限。
- efsmgr -l 命令显示仍然可以访问该文件的密钥的签名。对文件加密元数据进行了更新,并且删除了属于 gid 为 202 的用户 (group1) 的密钥。
- user1 不再能够访问该文件,并且 cat 命令失败。
- user2 尝试撤销他或者她自己的访问权限,该操作失败。换句话说,您不能撤销自己的访问权限。
示例 15 撤销用户和组对文件的访问权限
$efsmgr -a file -u user5
Unable to get public key from user “user5” (skipped):(Keystore does not exist)
user5:The system call does not exist on this system.
$ id uid=204(user2) gid=1(staff)
$ ls -U file
-rw-r--r--e 1 user2 staff 23 May 10 10:55 file
$ efsmgr -l file
EFS File information:
Algorithm:AES_128_CBC
List of keys that can open the file:
Key #1:
Algorithm :RSA_1024
Who :uid 204
Key fingerprint :366da13e:e40d8c52:0d0492ce:3b8797b6:6f5f9bf2
Key #2:
Algorithm :RSA_1024
Who :uid 205
Key fingerprint :30412121:e5a7b90d:dba7dd19:2c45b1e0:c331c09f
Key #3:
Algorithm :RSA_1024
Who :gid 202
Key fingerprint :19f16934:20a54e8e:d59aea33:111a37bf:06261785
$ id uid=205(user3) gid=1(staff)
$ efsmgr -r file -g group1
file:The file access permissions do not allow the specified action.
Cannot open or lock the file.
$ id uid=204(user2) gid=1(staff)
$ efskeymgr -V
List of keys loaded in the current process:
Key #0:
Kind .....................User key
Id (uid / gid) ......... 204
Type .....................Private key
Algorithm ................RSA_1024
Validity .................Key is valid
Fingerprint ..............
366da13e:e40d8c52:0d0492ce:3b8797b6:6f5f9bf2
$ efsmgr -r file -u user3
$ efsmgr -l file
EFS File information:
Algorithm:AES_128_CBC
List of keys that can open the file:
Key #1:
Algorithm :RSA_1024
Who :uid 204
Key fingerprint :366da13e:e40d8c52:0d0492ce:3b8797b6:6f5f9bf2
Key #2:
Algorithm :RSA_1024
Who :gid 202
Key fingerprint :19f16934:20a54e8e:d59aea33:111a37bf:06261785
$ id uid=205(user3) gid=1(staff)
$ cat file cat:0652-050 Cannot open file.
$ efsmgr -r file -g group1
$ efsmgr -l file
EFS File information:
Algorithm:AES_128_CBC
List of keys that can open the file:
Key #1:
Algorithm :RSA_1024
Who :uid 204
Key fingerprint :366da13e:e40d8c52:0d0492ce:3b8797b6:6f5f9bf2
$ id uid=203(user1) gid=1(staff) groups=202(group1)
$ cat file cat:0652-050 Cannot open file.
$ efsmgr -r file -u user2
Error editing file EFS access list:A system call received a parameter that is not valid.
|
注意:如果尝试为系统中定义的用户/组撤销访问权限,但不存在密钥存储库,那么这个操作将会成功,因为在进行这个操作期间,将从该文件的加密元数据中删除该文件的、使用用户/组公共密钥进行加密的对称加密密钥。
在示例16 中说明了下面的内容:
- ls 命令显示该文件是经过加密的,并且由 user2 所拥有。
- efsmgr -l 命令显示可以访问该文件的密钥的签名。可以访问该文件的密钥一共有三个:一个密钥属于 uid 为 204 的用户 (user2),一个密钥属于 uid 为 205 的用户 (user3),一个密钥属于 gid 为 202 的组 (group1)。
- user2 为 root 授予该文件的访问权限。
- root 登录,并且 root 撤销 user3、group1 和 user2 对该文件的访问权限,尽管该文件由 user2 所拥有。换句话说,当在 root admin 模式中运行时,root 对文件访问仍然具有完全控制权限。
- efsmgr -l 显示仍然可以访问该文件的密钥的签名。对文件加密元数据进行了更新,并且能够访问该文件的唯一的密钥属于 uid 为 0 的用户 (root)。
- 尽管 user2 是该文件的属主,但是 user2 不再能够访问该文件,并且 cat 命令失败。
- user2 不能为 user3 授予对该文件的访问权限。
- user2 不能撤销 root 对该文件的访问权限。
示例 16 在 root admin 模式中授权/删除访问权限
$ ls -U file
-rw-r--r--e 1 user2 staff 9 May 10 15:01 file
$ efsmgr -l file
EFS File information:
Algorithm:AES_128_CBC
List of keys that can open the file:
Key #1:
Algorithm :RSA_1024
Who :uid 204
Key fingerprint :366da13e:e40d8c52:0d0492ce:3b8797b6:6f5f9bf2
Key #2:
Algorithm :RSA_1024
Who :uid 205
Key fingerprint :30412121:e5a7b90d:dba7dd19:2c45b1e0:c331c09f
Key #3:
Algorithm :RSA_1024
Who :gid 202
Key fingerprint :19f16934:20a54e8e:d59aea33:111a37bf:06261785
$ efsmgr -a file -u root
# id uid=0(root) gid=0(system)
groups=2(bin),3(sys),7(security),8(cron),10(audit),11(lp)
# efsmgr -r file -u user3
# efsmgr -r file -g group1
# efsmgr -r file -u user2
# efsmgr -l file
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 :5363bd50:0ed7631d:08a93ee5:efdbde20:54f1028c
$ id uid=204(user2) gid=1(staff)
$ cat file cat:0652-050 Cannot open file.
$ efsmgr -a file -u user3
file:Security authentication is denied.
Cannot open or lock the file.
$ efsmgr -r file -u root file:Security authentication is denied.
Cannot open or lock the file.
|
|
|
这是系列文章的第 2 部分,本部分通过 10 几个操作示例来向您展示了加密文件系统在文件级安全保护上的功能以及使用的场景。 |