Kerberos 针对设备提供强大的加密身份验证,使客户端和服务器能够以更安全的方式进行通信。从而解决了网络安全问题。
您的系统必须安装和配置一个或多个 Kerberos 密钥分发中心 (KDC)。必须可以从 Vertica 分析型数据库群集中的每个节点访问 KDC。
KDC 必须使用 GSS-API 支持 Kerberos 5。有关详细信息,请参阅 MIT Kerberos 分发页面。
Kerberos 针对设备提供强大的加密身份验证,使客户端和服务器能够以更安全的方式进行通信。从而解决了网络安全问题。
您的系统必须安装和配置一个或多个 Kerberos 密钥分发中心 (KDC)。必须可以从 Vertica 分析型数据库群集中的每个节点访问 KDC。
KDC 必须使用 GSS-API 支持 Kerberos 5。有关详细信息,请参阅 MIT Kerberos 分发页面。
Vertica 使用服务主体进行系统级别的操作。这些主体用于标识 Vertica 服务,并按如下方式使用:
当 Kerberized Vertica 客户端向数据库进行身份验证时,它们会请求访问此服务。
Tuple Mover 等系统进程向 Hadoop 等外部服务进行身份验证时,它们会使用此标识。
按如下所示创建主体和密钥:
启动 Kerberos 5 数据库管理实用程序(kadmin 或 kadmin.local)可在 Linux KDC 中创建 Vertica 主体。
如果要访问远程服务器中的 KDC,请使用 kadmin。如果掌握 Kerberos 管理员密码,则可以在安装了 Kerberos 5 客户端包的任何计算机上使用 kadmin。启动 kadmin 时,实用程序会提示您输入 Kerberos 管理员密码。您可能需要具备客户端的 root 权限才能运行 kadmin。
在以下情况下可以使用 kadmin.local:
KDC 位于您当前已登录的计算机中。
您对该服务器具有 root 权限。
kadmin.local 不需要管理员登录凭据。
有关 kadmin 和 kadmin.local 命令的详细信息,请参阅 kadmin 文档。
在每个节点中,为 Vertica 创建一个服务主体。主机名必须与操作系统提供的值匹配。以下示例为名为 vertica 的节点创建了服务主体 v_vmart_node0001.example.com:
$ sudo /usr/kerberos/sbin/kadmin.local
kadmin.local add_principal vertica/v_vmart_node0001.example.com
为每个主体重复执行一次 ktadd 命令。您可以为每个主体用户创建单独的 Keytab,也可以将它们全部添加到一个 Keytab 文件(例如 krb5.keytab)。如要使用一个文件,请参阅 MIT Kerberos 文档中有关 -glob 选项的文档。
您必须为使用 Kerberos 身份验证的每个 Vertica 分析数据库用户创建一个用户主体。例如:
$ sudo /usr/kerberos/sbin/kadmin.local
kadmin.local add_principal [options] VerticaUser1
将每个 Keytab 文件复制到相应群集节点中的 /etc 文件夹。在所有节点中使用相同的路径和文件名。
在每个节点中,让 Keytab 文件可供正在运行数据库进程的文件所有者(通常是 Linux dbadmin 用户)读取。例如,您可以按照以下方式,将这些文件的所有权更改为 dbadmin:
$ sudo chown dbadmin *.keytab
创建 Keytab 文件之后,可以使用 klist 命令查看存储在文件中的密钥:
$ sudo /usr/kerberos/bin/klist -ke -t
Keytab name: FILE:/etc/krb5.keytab
KVNO Timestamp Principal
---- ------------------- --------------------------------------------------------------------------
4 08/15/2017 7:35:41 vertica/v_vmart_node0001.example.com@EXAMPLE.COM (aes256-cts-hmac-sha1-96)
4 08/15/2017 7:35:41 vertica/v_vmart_node0001.example.com@EXAMPLE.COM (aes128-cts-hmac-sha1-96)
在 Vertica 上运行以下命令,以确保正确设置 Kerberos 参数:
=> select parameter_name, current_value from configuration_parameters where parameter_name like 'Ker%';
parameter_name | current_value
-----------------------+---------------------------------------------------------------------
KerberosHostname | v_vmart_node0001.example.com
KerberosKeytabFile | /etc/krb5.keytab
KerberosRealm | EXAMPLE.COM
KerberosTicketDuration | 0
KerberosServiceName | vertica
(5 rows)
确保所有客户端都使用 gss 身份验证方法。
从 Vertica:
=> CREATE USER bob;
CREATE USER
=> CREATE AUTHENTICATION v_kerberos method 'gss' host '0.0.0.0/0';
CREATE AUTHENTICATION
=> ALTER AUTHENTICATION v_kerberos enable;
ALTER AUTHENTICATION
=> GRANT AUTHENTICATION v_kerberos to bob;
GRANT AUTHENTICATION
从操作系统命令行:
$ kinit bob
$ vsql -U bob -k vertica -K v_vmart_node0001.example.com -h v_vmart_node0001 -c "select client_authentication_name,
authentication_method from sessions;"
client_authentication_name | authentication_method--
----------------------------+-----------------------
v_kerberos | GSS-Kerberos
(1 row)
在 Vertica 上,运行 KERBEROS_CONFIG_CHECK 以验证 Kerberos 配置。KERBEROS_CONFIG_CHECK 验证以下内容:
kinit 和 kb5.conf 文件是否存在。
keytab 文件是否存在且已设置
数据库中设置的 Kerberos 配置参数:
KerberosServiceName
KerberosHostname
KerberosRealm
Vertica 主体
Kerberos 可以读取 Vertica 密钥
Kerberos 可以获得 Vertica 主体的票证
Vertica 可以使用 kinit 初始化密钥
Kerberos 领域中的每个客户端和 Vertica 分析型数据库服务器都必须具有有效且配置相同的 Kerberos 配置 (krb5.conf) 文件。如果没有该文件,客户端不知道如何到达 KDC。
如果使用 Microsoft Active Directory,则无需执行此步骤。请参阅适用于您的平台的 Kerberos 文档,详细了解有关在 Active Directory 上的 Kerberos 配置文件信息。
您至少需要在 krb5.conf 文件中配置以下部分。
libdefaults]—Kerberos 5 库使用的设置realms]—领域专用联系信息和设置domain_realm]—将服务器主机名映射到 Kerberos 领域请参阅 Kerberos 文档,了解有关此配置文件中其它部分的信息。
您必须更新 /etc/krb5.conf 文件以反映您的站点的 Kerberos 配置。在 Kerberos 领域中的所有客户端与服务器当中强制执行一致性的最简单办法,就是从 KDC 复制 /etc/krb5.conf 文件。然后,将该文件放入每个 Vertica 群集节点上的 /etc 目录内。
按照以下步骤通知 Vertica 有关主体名称和 keytab 位置的信息。
有关您在此过程中需要设置的参数的信息,请参阅 Kerberos 参数。
以管理员身份(通常为 dbadmin)登录到数据库。
设置 KerberosKeyTabFile 配置参数,以指向 keytab 文件的位置:
=> ALTER DATABASE DEFAULT SET PARAMETER KerberosKeytabFile = '/etc/krb5.keytab';
在所有节点上,keytab 文件必须在相同位置(在此示例中为 /etc/krb5.keytab)。
设置 Vertica 主体的服务名称;例如,vertica:
=> ALTER DATABASE DEFAULT SET PARAMETER KerberosServiceName = 'vertica';
提供主体的领域部分,例如,EXAMPLE.COM。
=> ALTER DATABASE DEFAULT SET PARAMETER KerberosRealm = 'EXAMPLE.COM'
为了确保所有客户端均使用 gss 身份验证方法,请运行以下语句:
=> CREATE AUTHENTICATION <method_name> METHOD 'gss' HOST '0.0.0.0/0';
=> GRANT AUTHENTICATION <method_name> TO Public;
有关详细信息,请参阅实施客户端身份验证。
Active Directory 存储有关 Windows 域成员的信息,包括用户和主机。
Vertica 使用 Kerberos 协议访问此信息,以便对 Vertica 数据库的 Windows 用户进行身份验证。Kerberos 协议使用主体来识别用户,并使用 keytab 文件来存储他们的加密信息。您需要将 keytab 文件安装到 Vertica 中,使 Vertica 数据库能够以加密方式验证 Windows 用户。
此过程描述:
创建 Vertica 服务主体。
导出这些主体的 keytab 文件
在 Vertica 数据库中安装 keytab 文件。这将允许 Vertica 对 Windows 用户进行身份验证,并授予其访问 Vertica 数据库的权限。
为 Vertica 服务创建一个 Windows 帐户(主体),并为群集中的每个节点/主机创建一个 Vertica 主机。此过程将为在该节点上运行的主机 verticanode01 和服务 vertica 创建 Windows 帐户。
创建这些帐户时,请选择以下选项:
用户无法更改密码
密码永不过期
如果您在 HDFS 上使用受 Kerberos 身份验证保护的外部表,则必须启用“委派 (Delegation)”。为此,请访问 Active Directory 用户和计算机对话框,右键单击 Vertica 服务的 Windows 帐户(主体),然后选择“委派 (Delegation)”。信任此用户以委派给任何服务。
运行以下命令为主机 verticanode01.dc.com 节点/主机创建密钥表:
$ ktpass -out ./host.verticanode01.dc.com.keytab -princ host/verticanode01.dc.com@DC.COM -mapuser verticanode01
-mapop set -pass secret -ptype KRB5_NT_SRV_HST
运行以下命令为 vertica 服务创建 Keytab:
$ ktpass -out ./vertica.verticanode01dc.com.keytab -princ vertica/verticanode01.dc.com@DC.COM -mapuser vertica
-mapop set -pass secret -ptype KRB5_NT_PRINCIPAL
有关 Keytab 文件的详细信息,请参阅 Technet.Microsoft.com
运行以下命令以验证服务主体名称是否正确映射。您必须为群集中的每个节点运行以下命令:
$ setspn -L vertica
Registered ServicePrincipalNamefor CN=vertica,CN=Users,DC=dc,DC=com
vertica/verticanode01.dc.com
$ setspn -L verticanode01
Registered ServicePrincipalNamefor CN=verticanode01,CN=Users,DC=dc,DC=com
host/verticanode01.dc.com
将您刚才创建的密钥表 vertica.verticanode01.dc.com.keytab 和 host.verticanode01.dc.com.keytab 复制到 Linux 主机 verticanode01.dc.com。
将多个 Keytab 文件组合成一个 Keytab:
[release@vertica krbTest]$ /usr/kerberos/sbin/ktutil
ktutil: rkt host.verticanode01.dc.com.keytab
ktutil: rkt vertica.verticanode01.dc.com.keytab
ktutil: list
slot KVNO Principal
---- ---- ---------------------------------------------------------------------
1 3 host/verticanode01.dc.com@DC.COM
2 16 vertica/verticanode01.dc.com@DC.COM
ktutil: wkt verticanode01.dc.com.keytab
ktutil: exit
这将创建一个 Keytab 文件,其中包含用于身份验证的服务器主体。
将新的 Keytab 文件复制到编录目录。例如:
$ cp verticanode01.dc.com.keytab /home/dbadmin/VMart/v_vmart_nodennnn_catalog
测试 Keytab 文件检索票证的能力,确保它可以从 Vertica 节点运行:
$ kinit vertica/verticanode01.dc.com -k -t verticanode01.dc.com.keytab
$ klist
Ticket cache: KFILE:/tmp/krb_ccache_1003
Default principal: vertica/verticanode01.dc.com@DC.COM
Valid starting Expires Service principal
04/08/2017 13:35:25 04/08/2017 23:35:25 krbtgt/DC.COM@DC.COM
renew until 04/15/2017 14:35:25
当票证过期或未自动取回时,您需要手动运行 kinit 命令。请参阅获取 Kerberos 票证并对 Vertica 进行身份验证。
对 Keytab 文件设置正确的权限和所有权:
$ chmod 600 verticanode01.dc.com.keytab
$ chown dbadmin:verticadba verticanode01.dc.com.keytab
使用 ALTER DATABASE 设置以下 Kerberos 参数 通知 Vertica 有关 Kerberos 主体的信息:
KerberosKeytabFile=<CATALOGDIR>/verticanode01.dc.com.keytab
KerberosRealm=DC.COM
KerberosServiceName=vertica
KerberosTicketDuration = 0
KerberosHostname=verticanode01.dc.com
重新启动 Vertica 服务器。
按如下所示测试 Kerberos 设置,确保所有客户端都使用 gss 身份验证方法。
从 Vertica:
=> CREATE USER windowsuser1;
CREATE USER
=> CREATE AUTHENTICATION v_kerberos method 'gss' host '0.0.0.0/0';
CREATE AUTHENTICATION
=> ALTER AUTHENTICATION v_kerberos enable;
ALTER AUTHENTICATION
=> GRANT AUTHENTICATION v_kerberos to windowsuser1;
GRANT AUTHENTICATION
从操作系统命令行:
$ kinit windowsuser1
$ vsql -U windowsuser1 -k vertica -K verticanode01.dc.com -h verticanode01.dc.com -c "select client_authentication_name,
authentication_method from sessions;"
client_authentication_name | authentication_method--
----------------------------+-----------------------
v_kerberos | GSS-Kerberos
(1 row)
运行 KERBEROS_CONFIG_CHECK 以验证 Kerberos 配置。KERBEROS_CONFIG_CHECK 验证以下内容:
kinit 和 kb5.conf 文件是否存在。
keytab 文件是否存在且已设置
数据库中设置的 Kerberos 配置参数:
KerberosServiceName
KerberosHostname
KerberosRealm
Vertica 主体
Kerberos 可以读取 Vertica 密钥
Kerberos 可以获得 Vertica 主体的票证
Vertica 可以使用 kinit 初始化密钥
如果您的机构使用 Kerberos 作为登录过程的一部分,在登录时会自动检索 Kerberos 票证。否则,您需要运行 kinit 来检索 kerberos 票证。
以下示例显示如何使用 kinit 命令检索票证并通过 KDC 对 Vertica 分析型数据库进行身份验证。域名为 EXAMPLE.COM。您必须使用该域名及您的用户名来检索 Kerberos 票证。请参阅指定 KDC 信息并配置领域。
$ kinit
Password for principal_user@EXAMPLE.COM: kpasswd
将会提示您当您创建主体和密钥文件(请参阅 在 Linux KDC 中创建 Vertica 主体和 Keytab)时创建的主体用户名的密码。
Kerberos 票证在预设时间长度内被缓存。请参阅 Kerberos 文档中的票证管理获取有关过期参数设置的更多信息。
过期后,您需要再次运行 kinit 指令来检索另外一张 Kerberos 票证。