在本章中,我们将介绍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: