什么是EFS?
通常,AIX上的加密文件系统(EFS)支持使系统上的各个用户可以加密他们的数据,也可以通过密钥保护来访问它们。 用户将能够设置密钥并为EFS分配默认密钥。 这些密钥存储在受密码保护的密钥存储区中,成功登录后,用户的密钥将加载到内核中并与内核进程相关联。
私钥与用户和组相关联。 这些密钥存储在密钥库中,并受密码保护。 用户密钥库包含用户的私钥和用于打开用户组密钥库的密码; 组密钥库包含组的私钥。
当进程在用户登录时或使用特定的EFS用户命令打开密钥库时,此密钥库(和相关密钥库)中包含的密钥将加载到内核中并与进程凭据关联。 稍后,当进程需要打开受EFS保护的文件时,将对这些凭据进行测试。 如果找到与文件保护匹配的密钥,则该过程能够解密文件密钥,从而解密文件内容。
通过EFS LAM(旧)或PAM(新)模块,可以在登录时创建或打开密钥库。 这些模块以及命令(例如chmod)对libefs.a库提供的某些EFS API进行调用。 存在两个用户命令efsmgr和efskeymgr,以向用户和管理员提供对EFS的一些控制。
如何在OpenSSH中设置公钥身份验证
在客户端上创建一个用户,并为此用户生成密钥。 可以使用ssh-keygen命令生成公钥-私钥对。
- 在客户端上,转到/ etc / ssh / ssh_config文件,并将PubkeyAuthentication设置为yes。
# hostname ivy02.in.ibm.com # grep PubkeyAuthentication /etc/ssh/ssh_config PubkeyAuthentication yes
在服务器端,转到/ etc / ssh / sshd_config文件以设置PubkeyAuthentication yes 。
# hostname ivy01.in.ibm.com # grep PubkeyAuthentication /etc/ssh/sshd_config PubkeyAuthentication yes
- 将OpenSSH服务器和客户端配置为在进行公钥身份验证时使用EFS登录。
在客户端,转到/ etc / ssh / ssh_config文件并设置“ AllowPKCS12keystoreAutoOpen yes” 。
# hostname ivy02.in.ibm.com # grep AllowPKCS12keystoreAutoOpen /etc/ssh/ssh_config AllowPKCS12keystoreAutoOpen yes
在服务器端,转到/ etc / ssh / sshd_config文件并设置“ AllowPKCS12keystoreAutoOpen yes”。
# hostname ivy01.in.ibm.com # grep AllowPKCS12keystoreAutoOpen /etc/ssh/sshd_config AllowPKCS12keystoreAutoOpen yes
- 重新启动服务器:
# hostname ivy01.in.ibm.com # stopsrc -s sshd 0513-044 The sshd Subsystem was requested to stop. # startsrc -s sshd 0513-059 The sshd Subsystem has been started. Subsystem PID is 209040.
使用以下创建的用户,使用以下命令生成密钥:
# hostname ivy02.in.ibm.com # mkuser ram # su - ram # $ ssh-keygen -t rsa -b 2048 Generating public/private rsa key pair. Enter file in which to save the key (/home/ram/.ssh/id_rsa): Created directory '/home/ram/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/ram/.ssh/id_rsa. Your public key has been saved in /home/ram/.ssh/id_rsa.pub. The key fingerprint is: 07:5d:0f:20:95:d4:9c:15:8d:77:bd:93:ea:3c:ac:99 ram@ivy02 The key's randomart image is: +--[ RSA 2048]----+ | .o+=ooo+.| | o..+o. =| | . . ..+| | . + | | S . . .| | . . | | + | | o= | | E. . | +-----------------+
ssh-keygen命令提示输入密码短语。 此密码将用于在客户端上加密私钥文件。 即使ssh-keygen命令也会接受空密码,在这种情况下,私钥文件将不会被加密。
将公钥复制到文件〜/ .ssh / authorized_keys中的服务器上。
# hostname ivy01.in.ibm.com # cat id_rsa.pub > /home/laxman/.ssh/authorized_keys # cat /home/laxman/.ssh/authorized_keys ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAqYK16NpoJ1Nq1/ccb1Ftu2fGkOQd2T4H74dlc6Q gskRHG07eOyTqt58yFJO5h7Zr8g1eQLoO9H6CVA7hi7EKwfg7fPpGWUGdpL6Aq8sgwRkhJOYptcz eRujSCi7hyvkT2DhLx7svZOx47pKlPfHFTNPRUjKZ1yPscTs2XWqAdDvPQPV0T14agRFqB81d/gXm 2vfSVUP+PJDoVVub/DMY928FRBd6fYEfFgZybyMOR14kbuQoJFrnoGZACg4maiPi5fKLiXY0Wl+/2 ZFAj+9f/uRLcqAWhKdjhcag96bIk2z0c6faBSBv9lOX6TfNIxkFN8CLoHnQhX9y8vpcOLC
同样,可以将任意数量的客户端用户的公钥复制到服务器用户帐户上的〜/ .ssh / authorized_keys文件中。
AIX EFS配置
必须使用efsenable命令在服务器端启用EFS。 这将创建一个管理员密钥库。 在两种情况下会为用户创建密钥库。
- 每当创建新用户时。
- 将密码分配给用户时或用户登录时。
在系统上创建用户密钥库的路径是/ var / efs / users / <userlogin> / keystore 。
用户密钥库的格式为PKCS#12,其中包含公共和私有对象。 专用对象受用户访问密钥保护。 该用户访问密钥不过是用户定义的密码(登录密码或EFS专用的其他密码)的哈希。
需要创建公钥cookie,并将其插入服务器端的密钥库中。 用户调用efskeymgr命令以插入cookie。 公共密钥cookie是使用用户公共密钥加密的密码。
以下步骤显示了如何为用户创建密钥库并插入公共密钥cookie。
# hostname
ivy01.in.ibm.com
# passwd laxman
laxman's New password:
Enter the new password again:
# ls -l /var/efs/users/laxman
total 8
-rw------- 1 root system 0 Aug 12 15:40 .lock
-rw------- 1 root system 1914 Aug 12 15:40 keystore
# su - laxman
$ cd .ssh
$ ls
authorized_keys id_rsa id_rsa.pub
$ efskeymgr -P authorized_keys
laxman's EFS password:
# ls -l /var/efs/users/laxman
total 8
-rw------- 1 root system 0 Aug 12 15:40 .lock
-rw------- 1 root system 2252 Aug 12 15:42 keystore
完成所有先前的配置设置后,运行ssh以使用公共密钥身份验证登录到远程计算机。
运行以下命令以登录到远程计算机:
# ssh <username>@<hostname>
- 一旦建立连接并且公共密钥身份验证成功,ssh服务器就会检查sshd_config文件中的AllowPKCS12keystoreAutoOpen是否设置为“ yes”。 如果是这样,它将向ssh客户端发送一个数据包。
- ssh客户端在收到此数据包后,会检查客户端是否启用了相同的选项。 即,通过检查ssh_config文件中的AllowPKCS12keystoreAutoOpen是否设置为yes来为ssh客户端配置此功能。 如果启用,客户端将向服务器发送确认,说它也支持此功能。
- 从ssh客户端收到ACK时,sshd会在/ var / efs / user / <用户名> / keystore中打开用户的efs密钥库,并读取公共密钥cookie SSHPub(AK)并将其发送到ssh客户端。
- ssh客户端从服务器接收到SSHPub时,将使用其私钥对其进行解密,然后将accesskey(AK)发送回服务器。 借助AK,sshd将打开用户密钥库的用户私有部分,并调用EFS内核扩展将此打开的密钥库推入内核并将其与用户的登录过程相关联。
验证身份验证和EFS登录
OpenSSH客户端用户ram已全部设置为使用EFS登录的OpenSSH服务器上的用户laxman的公钥身份验证。 使用来自客户端的ssh登录进行验证:
# hostname
ivy02.in.ibm.com
# su - ram
$ ssh -vvv laxman@ivy01.in.ibm.com
*********************************************************************
* *
* *
* Welcome to AIX Version 6.1! *
* *
* *
* Please see the README file in /usr/lpp/bos for information pertinent to *
* this release of the AIX Operating System. *
*
* *
* *
*******************************************************************
$ efskeymgr -V
List of keys loaded in the current process:
Key #0:
Kind ..................... User key
Id (uid / gid) ......... 216
Type ..................... Private key
Algorithm ................ RSA_1024
Validity ................. Key is valid
Fingerprint .............. a1a07c79:e0d57e83:8f148a2c:ac778fab:f813cf11
$hostname
ivy01.in.ibm.com
此设置的应用
该设置可以与DB2 UDB DPF一起使用,可以对其使用OpenSSH公钥认证。 使用EFS对DB2表进行加密。
故障排除
检查是否已执行上面列出的所有配置。 通过在插入之前和之后验证密钥库文件的大小,来检查efskeymgr命令是否正确插入了公共密钥cookie。 对sshd启用调试,并检查是否有任何故障。 另外,使用密码身份验证一次验证帐户登录和efs登录是否成功。
翻译自: https://www.ibm.com/developerworks/aix/library/au-opensshefs.html