轻松迁移到带有 Kerberos-5 支持的 OpenAFS

红薯 发布于 2010/05/26 12:41
阅读 520
收藏 2

OpenAFS 是基于客户端/服务器架构的分布式文件系统并提供大量高级功能,比如全局名称空间、高扩展性、数据分布和高安全性。

它能提供存储在多个文件服务器中文件系统的所有文件的集中视图,使得其数据像存储在本地一样方便使用。由于其分布式架构,全局名称空间和功能 丰富的客户端,有大量用户在访问 OpenAFS 。避免非授权用户对数据的访问很有必要。

OpenAFS 是行动快速的开放资源团体。凭借 IBM 开放的资源,该团体为 AFS 产品引入了很多新的功能。 其中最重要的变化就是有关新的 Kerberos-5 部署安全性的提高。 Kerberos 是知名的网络认证协议,通过使用高级加密算法,来提供客户端/服务器应用的安全。 想了解更多细节和配置,参见关于 OpenAFS 和 Kerberos 的项目 Web 站点。

早期的 OpenAFS 使用内置的 Kerberos Authentication Server(KAServer)方式的认证机制, 是 MIT Kerberos-4 认证协议的实现。该协议基于数据加密标准(DES),该标准由于安全问题而不再受到支持。

最近,OpenAFS 增加了 Kerberos-5 支持,这比传统方式更安全。

在传统的 KAServer 方案中,KAS 是服务器端用于认证的进程。 OpenAFS 已经停止了 KAS/KAServer 的开发,并使用 Kerberos-5 进行认证。 因此 OpenAFS 和 IBM AFS 系统管理员有必要了解 Kerberos-5 命令。

不必了解 AFS 每个组件的细节,它可以概括地描述为基于客户端/服务器模式的分布式系统, 服务器端提供不同类型的服务和使用这些服务的客户端。

可依照其所提供的不同服务或其扮演的不同角色,来对服务器分类,包括存储与管理数据、为客户端提供安全数据访问、防止未授权用户访问数据、进 行备份等等。

另一方面,AFS 客户端为已授权使用数据的用户提供数据访问, 由于安全是数据访问最重要的方面,因此更好地管理用户帐户至关重要。

用户访问数据的准备工作通常包括:

  • 创建用户帐户。
  • 设置用户属性和策略。
  • 设置密码。
  • 登录到安全环境(认证)。
  • 访问数据。
  • 登出。

由于此前 OpenAFS 采用内置的 Kerberos-4 认证, 现在改用单独设置的 Kerberos-5 作为安全机制, 因此需要引入很多与上面步骤不同的内容。

本文演示了创建安全用户帐户所需的命令。

命令对比

为了演示这两类命令,我们安装了两个 OpenAFS 单元,一个采用旧有的、基于 KAServer 的认证机制, 另一个采用新的、基于 Kerberos-5 的配置。

现在,我们在实际例子中,查看每个 KAS 命令和相应的 Kerberos-5 KAdmin(Kerberos-5 数据库管理程序)命令。

请注意,具有内置认证机制的 OpenAFS ,使用 KAS 命令组件,而 Kerberos-5 使用 kadmin.local 交互式命令提示符来执行管理级别的命令。 在下面的讨论中, 术语用户(user)用于旧有 KAS 命令,而主体(principal)用于 Kerberos-5 相关的命令。

为认证数据库增加新的主体

旧有 OpenAFS KAS 命令组件使用如下命令向数据库增加用户。


清单 1. 向数据库增加用户

				
Usage:
kas create
-name <name of user>
[-initial_password <initial password>]
[-admin_username <admin principal to use for authentication>]
[-password_for_admin <admin password>]
[-cell <cell name>]
[-servers <explicit list of authentication servers>+]
[-noauth]
[-help]

Example:

# kas create –name vrishali -admin_username admin
-password_for_admin admin -cell scooby.in.ibm.com
initial_password:
Verifying, please re-enter initial_password:

 

要在 Kerberos-5 数据库中创建主体,可使用 kadmin.local 命令组件的 add_principal 命令 。


清单 2. 在数据库中增加主体

				
Usage:
kadmin.local: addprinc
usage: add_principal [options] principal
options are:
[-x db_princ_args]*
[-expire expdate]
[-pwexpire pwexpdate]
[-maxlife maxtixlife]
[-kvno kvno]
[-policy policy]
[-clearpolicy]
[-randkey]
[-pw password]
[-maxrenewlife maxrenewlife]
[-e keysaltlist]
[{+|-}attribute]
attributes are:
allow_postdated
allow_forwardable
allow_tgs_req
allow_renewable
allow_proxiable
allow_dup_skey
allow_tix
requires_preauth
requires_hwauth
needchange
allow_svr
password_changing_service

Example:

# kadmin.local
Authenticating as principal admin1/admin@OPENAFS.IN.IBM.COM with password.
kadmin.local: addprinc vrishali@OPENAFS.IN.IBM.COM
Enter password for principal "vrishali@OPENAFS.IN.IBM.COM":
Re-enter password for principal "vrishali@OPENAFS.IN.IBM.COM":
Principal "vrishali@OPENAFS.IN.IBM.COM" created.

 

除以上内容外,下面是用于向保护数据库增加用户/主体的通用命令集。


清单 3. 向 AFS 保护数据库增加主体

				
Example:
# pts createuser -name vrishali -cell <cell name>

Add the admin user to the administrator group:

#pts adduser vrishali system:administrators -cell <cell name>

 

请注意这两个 pts 命令对于有或没有 Kerberos-5 支持的客户端是通用的, 并且两者都需要超级用户的权限才能执行。

修改主体的属性

OpenAFS KAS 命令组件使用 kas setfields 命令来设置用户的属性, 比如用户帐户的过期日期、票证的最长有效期、用户密码的过期时间等等。


清单 4. 修改用户帐户的属性

				
Usage:
#kas setfields -name <name of user>
[-flags <hex flag value or flag name expression>]
[-expiration <date of account expiration>]
[-lifetime <maximum ticket lifetime>]
[-pwexpires <number days password is valid ([0..254])>]
[-reuse <permit password reuse (yes/no)>]
[-attempts <maximum successive failed login tries ([0..254])>]
[-locktime <failure penalty [hh:mm or minutes]>]
[-admin_username <admin principal to use for authentication>]
[-password_for_admin <admin password>]
[-cell <cell name>]
[-servers <explicit list of authentication servers>+] [-noauth] [-help]

Example:

kas setfields -name vrishali -flags ADMIN -expiration "7/7/2009 12:00"
-lifetime "12:00" -pwexpires 12 -admin_username admin
-password_for_admin admin -c scooby

 

带有 Kerberos-5 支持的 OpenAFS 使用 modify_principal 命令来修改主体的属性。

不是上面指出的所有属性命令都与 kas setfields 所给出的 modify_principal 命令的选项相匹配。对于主要字段,比如帐户过期时间、最长票证有效期和密码过期时间,它们在两个命令中是匹配的。


清单 5. 在带有 Kerberos-5 支持的 OpenAFS 中修改主体属性

				
Usage:
modify_principal [options] principal
options are:
[-x db_princ_args]*
[-expire expdate]
[-pwexpire pwexpdate]
[-maxlife maxtixlife]
[-kvno kvno]
[-policy policy]
[-clearpolicy]
[-maxrenewlife maxrenewlife]
[{+|-}attribute]
attributes are:
allow_postdated
allow_forwardable
allow_tgs_req
allow_renewable
allow_proxiable
allow_dup_skey
allow_tix requires_preauth
requires_hwauth
needchange
allow_svr
password_changing_service

Example:

#kadmin.local: modify_principal -expire "6/6/2009 12:01am EST"
-pwexpire "6/7/2009 12:01am EST" -maxlife "12:00" user1
Principal "user1@OPENAFS.IN.IBM.COM" modified.

 

删除数据库中的用户

OpenAFS KAS 命令组件使用简单的 kas delete 命令来删除数据库中的用户。


清单 6. 删除数据库中的用户

				
Usage:
kas delete
-name <name of user>
[-admin_username <admin principal to use for authentication>]
[-password_for_admin <admin password>]
[-cell <cell name>]
[-servers <explicit list of authentication servers>+]
Example:
# kas delete –name vrishali –admin_username admin –password_for_admin admin
-cell scooby

 

带有 Kerberos-5 支持的 OpenAFS 使用 delete_principal 或者 delprinc 命令来删除数据库中的主体。


清单 7. 删除数据库中的主体

				
Usage:
delete_principal [-force] principal
Example:
kadmin.local: delprinc vrishali

 

利用管理员凭据来改变用户密码

OpenAFS KAS 命令组件使用简单的 kas setpassword 命令。该命令需要将管理员的用户名和密码作为参数,利用管理员凭据来改变用户密码。


清单 8. 删除数据库中的主体

				
Usage:
kas setpassword -name <name of user>
[-new_password <new password>]
[-kvno <key version number>]
[-admin_username <admin principal to use for authentication>]
[-password_for_admin <admin password>]
[-cell <cell name>]
[-servers <explicit list of authentication servers>+]
Example:
# kas setp -name vrishali -admin_username admin
-password_for_admin admin –cell scooby.in.ibm.com
new_password:
Verifying, please re-enter new_password:

 

要利用用户凭据来改变用户密码, OpenAFS KAS 命令组件使用另一个叫做 kpasswd 的命令。这允许用户利用自己的凭据来改变密码。

带有 Kerberos-5 支持的 OpenAFS 支持使用 cpw 或者 change_password 命令。 这不需要将管理员的用户名和密码作为参数。需要该用户已经具有管理员或用户的凭据(其密码将被改变)。


清单 9. 改变用户密码

				
Usage:
change_password
[-randkey]
[-keepold]
[-e keysaltlist]
[-pw password]
principal
Example:
#kadmin.local: change_password vrishali
Enter password for principal "vrishali":
Re-enter password for principal "vrishali":
Password for "vrishali@OPENAFS.IN.IBM.COM" changed.

 

为密钥文件增加密钥

带有 Kerberos-5 支持的 OpenAFS 将密钥存储在 /usr/afs/etc/KeyFile。 我们需要使用 BOS 命令组件中的 bos addkey 命令。


清单 10. 在数据库中增加密钥

				
Usage:
#bos addkey -server <machine name> [-key <key>]
-kvno <key version number> [-cell <cell name>]

 

带有 Kerberos-5 支持的 OpenAFS 需要两个命令来完成此操作:一个用于为 Kerberos KeyTab 文件增加密钥,另一个用于为 OpenAFS KeyFile 文件增加密钥。


清单 11. 为主体增加密钥

				
Usage:
ktadd
[-k[eytab] keytab] [-q]
[-e keysaltlist]
[principal | -glob princ-exp] [...]

and another command

asetkey add
<kvno>
<keyfile>
<princ>

Example:

Add key to Kerberos KeyTab file.

kadmin.local: ktadd -k /var/krb5kdc/kadm5.keytab vrishali
Entry for principal vrishali/admin with kvno 2,
encryption type Triple DES cbc mode with HMAC/sha1 added
to keytab WRFILE:/var/krb5kdc/kadm5.keytab.
Entry for principal vrishali/admin with kvno 2,
encryption type DES cbc mode with CRC-32 added
to keytab WRFILE:/var/krb5kdc/kadm5.keytab.

Add key to AFS's KeyFile

# asetkey add 2 /var/krb5kdc/kadm5.keytab vrishali/admin

 

移除密钥

OpenAFS BOS 命令组件使用 bos removekey 命令。


清单 12. 删除用户密钥

				
Usage:
#bos removekey
-server <machine name>
-kvno <key version number>+
[-cell <cell name>]

 

带有 Kerberos-5 支持 OpenAFS 支持使用 ktremoveasetkey delete 命令来分别从 KeyTab 和 KeyFile 中移除密钥。


清单 13. 从 Kerberos KeyTab 和 OpenAFS KeyFile 中移除密钥

				
Usage:
Remove a key from the Kerberos KeyTab file.

ktremove
[-k[eytab] keytab] [-q]
principal
[kvno|"all"|"old"]

Remove a key from AFS's KeyFile.

asetkey delete
<kvno>

 

检索 OpenAFS 用户列表

OpenAFS KAS 命令组件采用 kas list 命令来打印数据库中的所有用户。


清单 14. 打印 OpenAFS 用户列表

				
Example:
# kas list -admin_username admin -password_for_admin admin -cell scooby
AuthServer.Admin
krbtgt.SCOOBY.IN.IBM.COM
afs
admin
user1
vrishali

 

带有 Kerberos-5 支持的 OpenAFS 使用 listprincs 来列出 KDC 的所有主体。


清单 15. 打印已注册到 KDC 的主体列表

				
Example:
kadmin.local: listprincs
K/M@OPENAFS.IN.IBM.COM
admin/admin@OPENAFS.IN.IBM.COM
admin/openafs.in.ibm.com@OPENAFS.IN.IBM.COM
admin1@OPENAFS.IN.IBM.COM
afs/openafs.in.ibm.com@OPENAFS.IN.IBM.COM
afsadmin/admin@OPENAFS.IN.IBM.COM
afsadmin@OPENAFS.IN.IBM.COM
kadmin/admin@OPENAFS.IN.IBM.COM
kadmin/bunny.in.ibm.com@OPENAFS.IN.IBM.COM
vrishali/admin@OPENAFS.IN.IBM.COM

 

检索有关用户属性的所有信息

OpenAFS KAS 命令组件使用 kas examine 命令来打印有关用户属性的所有信息。


清单 16. 打印用户信息

				
Usage:
kas examine
-name <name of user>
[-showkey]
[-admin_username <admin principal to use for authentication>]
[-password_for_admin <admin password>]
[-cell <cell name>]
[-servers <explicit list of authentication servers>+]
Example:
#kas examine –name vrishali –admin_username admin
–password_for_admin admin -cell scooby.in.ibm.com

User data for vrishali
key (0) cksum is 508903870, last cpw: Mon May 4 05:58:32 2009
password will never expire.
An unlimited number of unsuccessful authentications is permitted.
entry never expires. Max ticket lifetime 25.00 hours.
last mod on Mon May 4 05:58:32 2009 by admin
permit password reuse

 

带有 Kerberos-5 支持 OpenAFS 利用 get_principal 命令打印用户帐户的所有信息。


清单 17. 打印主体信息

				
Usage:
get_principal [-terse] principal

Example:

kadmin.local: get_principal vrishali/admin
Principal: vrishali/admin@OPENAFS.IN.IBM.COM
Expiration date: [never]
Last password change: Wed Apr 29 12:45:57 IST 2009
Password expiration date: [none]
Maximum ticket life: 1 day 00:00:00
Maximum renewable life: 0 days 00:00:00
Last modified: Wed Apr 29 12:45:57 IST 2009
(admin1/admin@OPENAFS.IN.IBM.COM)
Last successful authentication: [never]
Last failed authentication: [never]
Failed password attempts: 0
Number of keys: 2
Key: vno 3, Triple DES cbc mode with HMAC/sha1, no salt
Key: vno 3, DES cbc mode with CRC-32, no salt
Attributes:
Policy: [none]

 

利用 OpenAFS 来验证用户

带有旧有 KAServer 的 OpenAFS 需要使用 klog 命令,来对自己进行 KAServer 验证。 这是一个针对 KAServer 进行用户认证并给出令牌的 OpenAFS 命令,用户可用其进行认证。


清单 18. 登入 OpenAFS 单元

				
Usage:
klog <username> [password] <cellname>

If a password is not given, the user is presented with a password prompt.

Example:

#klog vrishali –cell scooby.in.ibm.com
Password:

 

带有 Kerberos-5 支持的 OpenAFS 需要两步来登入 AFS 单元。 先从 Kerberos 中获取票证,然后从 AFS 中获取令牌。


清单 19. 登入 KDC 和 OpenAFS

				
Usage:
To get a Ticket Granting Ticket from Kerberos:

kinit <username>/<instance>@<Realm name>

If no realm name given, it will authenticate to default realm.

Use the klist command to list the tickets the user has obtained
from Kerberos.

To get tokens for AFS Cell using above ticket, use the aklog command:

aklog <cellname> -k <kerberos realm name>

If no arguments are given, command authenticates the default user with default realm.

Use the tokens command to list OpenAFS tokens a user has obtained.

Example:

# kinit vrishali/admin
# aklog

# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: vrishali/admin@OPENAFS.IN.IBM.COM

Valid starting Expires Service principal
04/29/09 12:46:10 04/30/09 12:46:10 krbtgt/OPENAFS.IN.IBM.COM@OPENAFS.IN.IBM.COM
04/29/09 12:46:17 04/30/09 12:46:10 afs/openafs.in.ibm.com@OPENAFS.IN.IBM.COM


Kerberos 4 ticket cache: /tmp/tkt0
klist: You have no tickets cached

# tokens

Tokens held by the Cache Manager:

Tokens for afs@openafs.in.ibm.com [Expires Apr 30 12:46]
--End of list—

 

带有 KAServer 设置的 OpenAFS 需要 unlog 命令来登出单元。Kerberos-5 需要两步来登出 AFS 单元。先利用 unlog 命令登出 AFS 单元,然后利用 kdestroy 命令登出 Kerberos。


清单 20. 从 Kerberos 和 OpenAFS 中登出

				
Usage:
To logout from Kerberos:

kdestroy

To logout from AFS Cell:

unlog [-cell <cell name>+]

Example:

# kdestroy
# unlog

# klist
klist: No credentials cache found (ticket cache FILE:/tmp/krb5cc_0)


Kerberos 4 ticket cache: /tmp/tkt0
klist: You have no tickets cached

# tokens

Tokens held by the Cache Manager:

--End of list--

 

为主体添加策略

KAServer 没有定义策略。带有 Kerberos-5 支持的 OpenAFS 可为其主体应用策略。 这些策略用于定义可添加给任何主体的策略集。


清单 21. 添加策略

				
Usage:
add_policy [options] policy
options are:
[-maxlife time]
[-minlife time]
[-minlength length]
[-minclasses number]
[-history number]

 

利用这些策略可定义密码的最长/最短有效期、密码最短长度、密码中最少的字符类型和为主体保留的旧密钥数量。

如果没有以上 Kerberos 策略,策略 -minlife 的功能与 KAServer 的 -minhour 配置参数相同。 它设置了不能多次更改密码的时间范围。


清单 22. 密码的最短有效期

Usage:
Usage:
kaserver [-minhours <n>]

KAS 和 KAdmin 子命令的参考表

表 1 对比了 KAS 与 KAdmin 的子命令。这给管理员一个所有新命令的清楚展示。


表 1. 对比 KAS 与 KAdmin 子命令

操作 AFS KAS 子命令 Kerberos-5 KAdmin 子命令
创建新用户 create -name <name of user> add_principal <name of principal>
删除现有用户 delete -name <name of user> delete_principal <name of principal>
变更密码 setpassword -name <name of user> change_password <name of principal>
列出数据库中的用户 list list_principals
显示用户属性 examine -name <name of user> get_principal <name of principal>
删除票证 forgettickets N/A
列出缓存的票证 listtickets N/A
变更用户属性 setfields -name <name of user> modify_principal <name of principal>
解锁锁定用户 unlock -name <name of user> N/A
锁定数据库 N/A lock
数据库解锁 N/A unlock
将字符串转换为密钥 stringtoken N/A

管理用户属性参考表

表 2 列出用户属性管理命令。


表 2. 用户属性管理命令

属性 AFS 命令 Kerberos-5 命令
帐户过期日期 kas setfields -expiration <date> modprinc –expire <date>
密码过期天数 kas setfields –pwexpires <days> modprinc - pwexpire <date>
最长票证有效期 kas setfields –lifetime <time> modprinc –maxlife <time>
密码重用许可 kas setfields –reuse <yes/no>
*If enabled, default password history is 20*
add_policy –history <n>
允许最多连续失败尝试次数 kas setfields –attempts <n> N/A
为用户赋予管理员特权 kas setfields –flags ADMIN addprinc <username>/admin
最短密码长度 N/A add_policy -minlength
登录失败锁定时间 kas setfields –locktime <time> N/A
帐户解锁 kas unlock –name <name of user> N/A
密码最短有效期 kaserver –minhour <n>
*If set, it is applicable to all the users*
add_policy –minlife <time>
*It can be applied to any, or all the users*
记录的旧密码数量 Kaserver –reuse <n>
*This option is only available with IBM AFS, not with OpenAFS*
add_policy –history <n>

其他命令的参考表

表 3 列示了更多命令。


表 3. 更多 AFS/Kerberos-5 命令

操作 AFS 命令 Kerberos-5 命令
向 KeyFile 增加密钥 bos addkey ktadd
    asetkey add
删除现有密钥 bos removekey ktremove
    asetkey delete
登入单元 klog kinit
    aklog
展示令牌 tokens klist
    tokens
登出单元 unlog unlog
    kdestroy
数据维护工具 kadb_check kdb5_util
KeyFile 维护工具 N/A ktutil
加载中
返回顶部
顶部