在 Linux KDC 中创建 Vertica 主体和 Keytab
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 文件的用户,以免未经授权的用户委派您的服务器。有关委派(也称为模拟)的详细信息,请参阅 [Technet.Microsoft.com](http://technet.microsoft.com/en-us/library/ms161965(v=sql.105)。创建 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 初始化密钥
-