MIT Kerberos 数据库管理

在本章中,我们将介绍MIT Kerberos 中常见的数据库管理操作命令。

1. MIT Kerberos 数据库管理简介

Kerberos数据库包含所有Realm的Kerberos Principal,其密码以及有关每个主体的其他管理信息。在大多数情况下,可以使用kdb5_util命令来操作Kerberos数据库,并使用kadmin命令更改数据库中的条目。Kadmin命令有命令行界面,可以在其中键入数据库管理命令。

kdb5_util提供了一种创建,删除,加载或存储Kerberos数据库的方法。包含用于管理更新数据库主密钥(Master Key)以及存储密钥副本的命令,以便kadmind和krb5kdc后台进程可以在不使用手动输入的情况下启动使用数据库。

kadmin提供维护Kerberos主体,密码策略和服务密钥表(keytabs)。通常使用Kerberos身份验证作为客户端与kadmind进行交互,但通过kadmin.local命令,可以直接访问本地文件系统上的Kerberos数据库。 

kadmin可以使用服务主体(Service Principal)kadmin / HOST(其中HOST是MIT管理服务器的主机名)或kadmin / admin对管理服务器进行身份验证。如果凭据缓存包含了服务主体,并且指定了-c ccache选项,则可用凭据缓存向KADM5进行身份验证。否则,-p和-k选项用于指定用于进行身份验证的客户端Kerberos主体名称。一旦kadmin确定了主体名称,就会从KDC请求kadmin / admin Kerberos Service Ticket,并使用该服务票据对KADM5进行身份验证。

2. Kadmin 命令

可以使用以下任何选项调用kadmin或kadmin.local:

kadmin [-O|-N] [-r realm] [-p principal] [-q query] [[-c cache_name]|[-k [-t keytab]]|-n] [-w password] [-s admin_server[:port]] [command args...]
kadmin.local [-r realm] [-p principal] [-q query] [-d dbname] [-e enc:salt ...] [-m] [-x db_args] [command args...]

主要Option 如下所示,可以参见 http://web.mit.edu/kerberos/krb5-latest/doc/admin/database.html 了解详细信息:

OPTIONS

-r Realm

使用realm作为默认数据库Realm;

-p Principal

使用principal进行身份验证。 kadmin将按优先顺序将/ admin附加到默认ccache的 Principal;

-k

使用Keytab来解密KDC的消息而不是提示输入密码。 在这种情况下,默认的Principal将是host / hostname。 如没有使用-t选项指定的keytab,则将使用默认Keytab;

-t keytab

使用keytab解密KDC消息, 只能与-k选项一起使用;

3. Principal

Kerberos数据库中的每个条目都包含Kerberos Principal以及与该主体关联的属性和策略。

添加,修改和删除主体

要将主体添加到数据库,使用kadmin add_principal命令;

要修改主体的属性,使用kadmin modify_principal命令;

要删除主体,使用kadmin delete_principal命令;

add_principal

add_principal [options] newprinc

创建 Principal newprinc,提示输入密码。 如未使用-policy选项指定密码策略,则将default的策略分配给 Principal。

执行此命令需要 Add权限。

别名:addprinc,ank

关于 Option的详情,查看 http://web.mit.edu/kerberos/krb5-latest/doc/admin/database.html ;

示例如下:

kadmin: addprinc jennifer
WARNING: no policy specified for "jennifer@ATHENA.MIT.EDU";
defaulting to no policy.
Enter password for principal jennifer@ATHENA.MIT.EDU:
Re-enter password for principal jennifer@ATHENA.MIT.EDU:
Principal "jennifer@ATHENA.MIT.EDU" created.
kadmin:

modify_principal

modify_principal [options] principal

修改指定的Principal,更改指定的字段。 add_principal的选项也适用于此命令,但-randkey,-pw和-e选项除外。 

此命令需要Modify权限。

别名:modprinc

示例如下:

如果要将Ticket Policy与 Principal关联,执行如下命令:

kadmin: modprinc -x tktpolicy=userpolicy david
Principal "david@ATHENA.MIT.EDU" modified.
kadmin:

delete_principal

delete_principal [-force] principal

从数据库中删除指定的主体。 除非给出-force选项,否则此命令会提示Delete 操作。

此命令需要Delete权限。

别名:delprinc

示例如下:

kadmin: delprinc jennifer
Are you sure you want to delete the principal
"jennifer@ATHENA.MIT.EDU"? (yes/no): yes
Principal "jennifer@ATHENA.MIT.EDU" deleted.
Make sure that you have removed this principal from
all ACLs before reusing.
kadmin:

get_principal

get_principal [-terse] principal

获取principal的属性。 使用-terse选项,将字段输出为带引号的制表符分隔的字符串;

此命令需要inquire权限;

别名:getprinc

示例如下:

kadmin: getprinc tlyu/admin
Principal: tlyu/admin@BLEEP.COM
Expiration date: [never]
Last password change: Mon Aug 12 14:16:47 EDT 1996
Password expiration date: [none]
Maximum ticket life: 0 days 10:00:00
Maximum renewable life: 7 days 00:00:00
Last modified: Mon Aug 12 14:16:47 EDT 1996 (bjaspan/admin@BLEEP.COM)
Last successful authentication: [never]
Last failed authentication: [never]
Failed password attempts: 0
Number of keys: 2
Key: vno 1, des-cbc-crc
Key: vno 1, des-cbc-crc:v4
Attributes:
Policy: [none]
kadmin: getprinc -terse systest
systest@BLEEP.COM   3    86400     604800    1
785926535 753241234 785900000
tlyu/admin@BLEEP.COM     786100034 0    0
kadmin:

list_principals

list_principals [expression]

检索全部或部分Principal。 expression可以包含通配符?,*和[],将输出与表达式匹配的所有Principal。 如果未提供expression,则输出所有Principal。 

此命令需要list特权;

别名:listprincs,get_principals,get_princs

示例如下:

kadmin:  listprincs test*
test3@SECURE-TEST.OV.COM
test2@SECURE-TEST.OV.COM
test1@SECURE-TEST.OV.COM
testuser@SECURE-TEST.OV.COM
kadmin:

4. Policy

Policy是一组管理密码的规则。 策略可以指定密码生存期的最小和最大值,密码必须包含的最小字符数和字符类型,如字符数字等,以及数据库中保留的旧密码数量等。

添加,修改和删除Policy

要添加新策略,使用kadmin add_policy命令;

要修改Policy的属性,使用kadmin modify_policy命令;

要删除策略,使用kadmin delete_policy命令;

ADD_POLICY

add_policy [options] policy

将名为policy的密码策略添加到数据库;

此命令需要Add权限。

别名:addpol

示例如下:

kadmin: add_policy -maxlife "2 days" -minlength 5 guests
kadmin:

modify_policy

modify_policy [options] policy

修改名为policy的密码策略。 选项如add_policy所述。

此命令需要modify权限。

别名:modpol

delete_policy

delete_policy [-force] policy

删除名为policy的密码策略。 删除前提示确认。

此命令需要Delete权限。

别名:delpol

示例如下:

kadmin: del_policy guests
Are you sure you want to delete the policy "guests"?
(yes/no): yes
kadmin:

get_policy

get_policy [-terse] policy

显示名为policy的密码策略的值。 使用-terse 选项,将字段输出为由制表符分隔的带引号的字符串。

此命令需要inquire权限。

别名:getpol

示例如下:

kadmin: get_policy admin
Policy: admin
Maximum password life: 180 days 00:00:00
Minimum password life: 00:00:00
Minimum password length: 6
Minimum number of password character classes: 2
Number of old keys kept: 5
Reference count: 17
kadmin: get_policy -terse admin
admin     15552000  0    6    2    5    17
kadmin:

list_policies

list_policies [Expression]

检索所有或一些策略名称。 expression可以包含通配符?,*和[]。 将打印与表达式匹配的所有策略名称。 如果未提供表达式,则打印所有现有策略名称。

此命令需要list特权。

别名:listpols,get_policies,getpols;

示例如下:

kadmin:  listpols
test-pol
dict-only
once-a-min
test-pol-nopw
kadmin:  listpols t*
test-pol
test-pol-nopw
kadmin:

5. Privileges

Kerberos数据库的管理权限存储在文件kadm5.acl中。

Kerberos kadmind守护进程使用访问控制列表(ACL)文件来管理Kerberos数据库的访问权限。 对于Principal的操作,ACL文件控制了哪些主体可以对哪些主体进行何种操作。

Kerberos ACL文件的默认位置是LOCALSTATEDIR / krb5kdc / kadm5.acl,可以在kdc.conf中的acl_file变量指定。

语法:

principal  permissions  [target_principal  [restrictions] ]

示例如下:

*/admin@ATHENA.MIT.EDU    *                               # line 1
joeadmin@ATHENA.MIT.EDU   ADMCIL                          # line 2
joeadmin/*@ATHENA.MIT.EDU i   */root@ATHENA.MIT.EDU       # line 3
*/root@ATHENA.MIT.EDU     ci  *1@ATHENA.MIT.EDU           # line 4
*/root@ATHENA.MIT.EDU     l   *                           # line 5
sms@ATHENA.MIT.EDU        x   * -maxlife 9h -postdateable # line 6

详情请见:http://web.mit.edu/kerberos/krb5-latest/doc/admin/conf_files/kadm5_acl.html#kadm5-acl-5


6. Kerberos数据库上的操作

kdb5_util命令是管理Kerberos数据库的主要命令:

kdb5_util [-r realm] [-d dbname] [-k mkeytype] [-M mkeyname] [-kv mkeyVNO] [-sf stashfilename] [-m] command [command_options]

主要OPTIONS如下所示:

-r realm

指定数据库的Kerberos realm;

-d dbname

指定存储principal数据库的名称; 默认情况下,数据库是kdc.conf中列出的数据库;

-k mkeytype

指定数据库中主密钥 (Master Key)的密钥类型。 默认值由kdc.conf中的master_key_type变量给出;

7. Kerberos数据库转储到文件

如要将Kerberos数据库转储到文件中,可以使用kdb5_util dump命令;

dump [-b7 | -ov | -r13] [-verbose] [-mkey_convert] [-new_mkey_file mkey_file] [-rev] [-recurse] [filename [principalals ...]]

将当前的Kerberos和KADM5数据库转储为ASCII文件。 默认情况下,数据库以当前格式“kdb5_util load_dump version 7”存储。 如果未指定filename,或者是字符串“ – ”,则存储将发送到标准输出。

示例如下:

shell% kdb5_util dump dumpfile
shell%
shell% kbd5_util dump -verbose dumpfile
kadmin/admin@ATHENA.MIT.EDU
krbtgt/ATHENA.MIT.EDU@ATHENA.MIT.EDU
kadmin/history@ATHENA.MIT.EDU
K/M@ATHENA.MIT.EDU
kadmin/changepw@ATHENA.MIT.EDU
shell%

8. 加载Kerberos 数据库

从存储文件加载Kerberos数据库,可以使用kdb5_util load命令;

load [-b7 | -ov | -r13] [-hash] [-verbose] [-update] filename [dbname]

将指定文件中的数据库转储加载到指定的数据库中。 如果没有给出确定转储文件格式的选项,则会自动检测格式并根据需要进行处理。 除非给出-update选项,否则load将创建一个仅包含转储文件中数据的新数据库,从而覆盖任何以前存在的数据库的内容。

示例如下:

shell% kdb5_util load dumpfile principal
shell%
shell% kdb5_util load -update dumpfile principal
shell%

9. 创建Stash 文件

Stash文件允许KDC对数据库后台程序进行身份验证,例如kadmind,krb5kdc和kdb5_util;

要创建存储文件,使用kdb5_util stash命令;

stash [-f keyfile]

将Master Principal的密钥存储在Stash文件中, -f参数可用于覆盖kdc.conf中指定的keyfile文件;

10. 创建和销毁Kerberos数据库

如需要创建新的Kerberos数据库,请使用kdb5_util create命令;

Create [-s]

创建一个新数据库。 如果指定了-s选项,则还会创建stash文件。 如果数据库已存在,则此命令失败。 

如果需要销毁当前的Kerberos数据库,请使用kdb5_util destroy命令:

destroy [-f]

在提示用户确认后,删除数据库;

示例如下:

shell% kdb5_util -r ATHENA.MIT.EDU create -s
Loading random data
Initializing database '/usr/local/var/krb5kdc/principal' for realm 'ATHENA.MIT.EDU',
master key name 'K/M@ATHENA.MIT.EDU'
You will be prompted for the database Master Password.
It is important that you NOT FORGET this password.
Enter KDC database master key:  <= Type the master password.
Re-enter KDC database master key to verify:  <= Type it again.
shell%
shell% kdb5_util -r ATHENA.MIT.EDU destroy
Deleting KDC database stored in '/usr/local/var/krb5kdc/principal', are you sure?
(type 'yes' to confirm)?  <= yes
OK, deleting database '/usr/local/var/krb5kdc/principal'...
** Database '/usr/local/var/krb5kdc/principal' destroyed.
shell%

11. Kerberos LDAP 数据库操作

kdb5_ldap_util是管理Kerberos LDAP数据库的主要工具,它允许管理员管理Realm,Kerberos服务(KDC和 Admin服务器)和 ticket Policy。

kdb5_ldap_util [-D user_dn [-w passwd]] [-H ldapuri] Command [command_options]

OPTIONS

-D user_dn

指定有权限在LDAP服务器上执行操作的用户 的Distinguished Name(DN);

-w passwd

指定user_dn的密码; 不建议使用此选项;

-H ldapuri

指定LDAP服务器的URI。 建议使用ldapi或ldaps协议来连接LDAP服务器;

详细命令选项,请参见:http://web.mit.edu/kerberos/krb5-latest/doc/admin/database.html

12. Cross-Realm 认证

为了使一个Realm中的KDC对不同Realm中的Kerberos用户进行身份验证,它必须与另一个Realm中的KDC共享密钥。在这两个数据库中,两个Realm都必须有krbtgt服务主体 Principal。例如,如果需要在Realm ATHENA.MIT.EDU和EXAMPLE.COM之间进行跨Realm身份验证,则需要添加主体krbtgt/EXAMPLE.COM@ATHENA.MIT.EDU和krbtgt / ATHENA.MIT.EDU@EXAMPLE.COM到两个数据库中。这些主体必须具有相同的密码,密钥版本号和加密类型;需要使用-kvno选项明确设置密钥版本号;

在ATHENA.MIT.EDU和EXAMPLE.COM跨Realm示例中,管理员将在两个域中的KDC上运行以下命令:

shell%: kadmin.local -e "aes256-cts:normal"
kadmin: addprinc -requires_preauth krbtgt/ATHENA.MIT.EDU@EXAMPLE.COM
Enter password for principal krbtgt/ATHENA.MIT.EDU@EXAMPLE.COM:
Re-enter password for principal krbtgt/ATHENA.MIT.EDU@EXAMPLE.COM:
kadmin: addprinc -requires_preauth krbtgt/EXAMPLE.COM@ATHENA.MIT.EDU
Enter password for principal krbtgt/EXAMPLE.COM@ATHENA.MIT.EDU:
Enter password for principal krbtgt/EXAMPLE.COM@ATHENA.MIT.EDU:
kadmin:

MIT Kerberos 数据库管理

发表评论

电子邮件地址不会被公开。 必填项已用*标注

3 × 二 =