0
回答
利用 Kerberos 5 支持来配置 OpenAFS
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

因为 Kerberos 4 协议中发现了一些漏洞,所以建议全球用户迁移到 Kerberos 5 来进行身份验证。Kaserver 是 Andrew File System 用来处理身份验证请求的一个组件,它是一个基于 Kerberos 4 的应用程序。IBM AFS® 和 OpenAFS(IBM AFS 的外包版,由 OpenAFS 社区维护)的用户亦收到相同的建议并开始使用 Kerberos 5。本文提供了通过使用 Kerberos 5 配置一个 AFS 单元来实现身份验证的分步指导。

概述

我们会对 AFS 和 Kerberos 进行基本介绍,然后会使用 OpenAFS 的稳定版本 1.4.14 在 RedHat Enterprise Linux 6 上配置 AFS 单元。不过,在其他 Linux 发行版和其他 OpenAFS 版本上使用时,这些步骤不应有太大的区别或者没有区别。我们先来配置 Kerberos 5 服务,然后再配置 OpenAFS。

AFS 简介

IBM AFS,即 OpenAFS,是一个基于网络的分布式文件系统,采用的是 “客户端-服务器” 的架构,其中,协作主机将共享其文件系统资源,供本地和广域网内的客户端使用。 OpenAFS 最初由位于宾夕法尼亚州匹兹堡的 Carnegie-Mellon University 的信息技术中心开发。AFS 的主要优势包括:

  • 全局名称空间
  • 位置透明
  • 缓存设施
  • 可伸缩性
  • 安全特性,以及
  • 可靠的通信协议

这些特性使得 AFS 被公认为是分布式文件系统的鼻祖,虽然 AFS 已经开发了很多年。AFS 可以在目前使用的所有主要平台上使用。

从架构上讲,AFS 有两个组件:一个服务器,一个客户端。如下是 AFS 架构的简单描述。

  • 服务器组件(副) — AFS 服务器由一个名为 Basic OverSeer Server (BOS Server) 的超级服务器监视。BOS Server 监视机器上的 AFS 进程健康与否,并且可用来启动、停止、暂停或继续这些进程,或用来更新新的服务器二进制文件。剩下的服务器可分为两类:数据库和文件。
    • 数据库服务器 — 以下服务器属于数据库服务器的范畴:
      • 备份服务器 (buserver) — 负责维护备份数据库,以管理数据库服务器上的所有备份操作。
      • 卷位置服务器 (vlserver) — 负责维护卷位置数据库 (VLDB) 来跟踪有关卷及其在文件服务器上的位置的所有信息。本文稍后将对 AFS 卷进行介绍。 Vlserver 支持卷位置和状态的查询、卷 ID 管理、VLDB 项的创建、删除和修改等这类操作。
      • 保护服务器 (ptserver) — 负责维护保护数据库 (PDB),此数据库建立了用户或组名称与其内部的数值的 AFS 标识符之间的映射。还可用该数据库来创建、破坏、修改和查询所属关系和成员关系。
      • 身份验证服务器 (kaserver) — 负责维护身份验证数据库,以便使用它对用户进行身份验证,并使用身份验证票响应成功通过验证的客户端。
    • 文件服务器
      • 文件服务器 (fileserver) — 负责处理位于 AFS 卷内的文件和目录,为通过身份验证的客户端请求提供访问权。它提供的是平面文件服务。
      • 救援服务器 (salvager) — 尽最大努力恢复位于文件服务器上的 AFS 卷内存储的所有数据。
      • 卷服务器 (volser) — 允许执行与 AFS 卷相关的管理任务,比如创建、重新放置、删除和复制等。
  • 客户端组件 (Venus) — AFS 缓存管理由 AFS 客户端 (afsd) 处理,需要借助一组守护进程的帮助。它既支持本地磁盘缓存,也支持内存中的缓存。

AFS 服务器是一些用户级的应用程序,但 AFS 也具有内核模式,可拦截对 AFS 空间的调用。

AFS 的一些基本概念

由管理上独立的组织管理和操作的一组服务器和客户端机器被称为一个 AFS 单元。在一个 AFS 单元内,至少必须有一个机器在运行数据库服务器和文件服务器进程。其余的机器只运行客户端组件。

AFS 在卷内存储其文件,它使用的是运行 AFS 文件服务器组件的机器上的存储空间。一个 AFS 卷可视为用来保存文件和目录的一个容器。这些卷的设计使得系统管理员可以因为负载均衡等原因,将这些卷从运行文件服务器进程的机器移动到同一 AFS 单元内运行文件服务器进程的另一台机器。在这些 AFS 卷上可以进行一些操作,比如数据复制、清空、备份、恢复等。与卷相关的其他概念还有很多,但这些超出了本文的讨论范围。

运行在 AFS 单元中的不同机器上的数据库服务器进程可以使用 Ubik 协议使其数据库保持同步。可以使用 Ubik 协议跨多个服务器机器来持续复制数据库,比如 VLDB、ADB 和 PDB,以提高它们的可用性,以及共同承担复制站点间的访问负荷。它使用了一种 quorum completion 算法来同步数据库信息。

另一个重要的概念是 AFS 服务器以及 AFS 单元内或跨 AFS 单元的客户端进程使用的通信机制,也称为 Rx。它是一个远端过程调用 (RPC) 机制,为运行在同一台机器、运行在局域网 (LAN) 以及广域网 (WAN) 上的进程间通信提供了高性能、多线程的安全机制。Rx 库很适合用于内核内,还适用于具有类似 API 接口的用户空间应用程序。

Kerberos 简介

Kerberos 是一个网络身份验证协议,由 MIT 开发,它使用共享的对称密钥来建立相互的身份验证。类似的密钥可用来加密和解密消息,这样双方都可以确保与之交互的另一方是正确无误的。

Kerberos 的基本概念

本节定义了本文中使用的一些基本的 Kerberos 概念。接下来,我们将配置一个 Kerberos 领域。一个领域代表的是一个身份验证管理域。它界定了该领域的身份验证服务器或 AS(Kerberos 基础结构的组件)的权威机构,为属于该领域的主体 (principal) 提供身份验证。Kerberos主体是诸如用户、机器或服务这样需要身份验证服务的一些个体。主体与它们所属领域的身份验证服务器共享密钥。

与主体有关的两个重要概念是:密钥和票据。

  • 密钥 — 密钥就一些密码数据,通常使用特定加密算法从用户的密码中获得。对于非用户的主体,密钥是随机生成的。并用一个 Key Version Number (kvno) 来标记密钥。
  • 票据 — 票据是 一些身份些验证信息,客户端需要出示票据才能通过服务器的身份验证,从而获得服务。身份验证服务器使用目标服务器的一个密码密钥将票据提供给客户端。因此,客户端是无法偷看票据内容。

在 Kerberos 基础结构内,有一个密钥分发中心,即 KDC,可以提供票据分发功能。从理论上将,它可提供三种服务:主体数据库维护、身份验证服务器 (AS) 和票据授予服务器 (TGS)。KDC 运行两个重要的守护进程:

  • kadmind
    这是一个管理守护进程,负责管理主体数据库、主体数据库的密钥和策略配置。kadmin.localkadmin 命令允许访问本地机器上或运行 KDC 的远端机器上的功能。
  • krb5kdc
    这是处理身份验证请求的一个意义重大的守护进程。当用户请求获得身份票据时,需要求助于这个守护进程。

Kerberos 5 配置

在继续我们的操作之前,需要确保机器上安装了与 Kerberos 5 相关的二机制文件。以下是一些必须安装的 RPM,以便编译和使用获得 Kerberos 5 支持的 OpenAFS。

  1. krb5-workstation
  2. krb5-server
  3. krb5-libs
  4. krb5-devel

清单 1 显示了安装在我的测试机器上的 RPM。除了上面提到的 PRM 之外,我还安装了其他一些 RPM。此清单给出了对每个 PRM 的简短描述。


清单 1. 与 Kerberos 5 相关的 RPM
				
root@rhel6vm1 ~ # rpm -qa | grep krb5 krb5-workstation-1.8.2-3.el6.i686  <-- Basic Kerberos 5 related programs like kinit etc
krb5-auth-dialog-0.13-3.el6.i686   <-- For getting dialog box for Krb5 Tickets
krb5-appl-servers-1.0.1-1.el6.i686 <-- Kerberized application servers
krb5-server-1.8.2-3.el6.i686  <-- KDC and related programs for Kerberos 5
krb5-libs-1.8.2-3.el6.i686  <-- Shared libraries used by Kerberos 5
krb5-pkinit-openssl-1.8.2-3.el6.i686 <-- PKINIT plugin for Kerberos 5
krb5-appl-clients-1.0.1-1.el6.i686   <-- Kerberized clients for application servers
pam_krb5-2.3.11-1.el6.i686   <-- Pluggable Authentication Module for Kerberos 5
krb5-devel-1.8.2-3.el6.i686 <-- For developing Kerberos 5 based applications
root@rhel6vm1 ~ #

我们将设置一个名为 VMKRB5 的 Kerberos 领域。我们所使用的机器的主机名是 rhel6vm1.in.ibm.com。Kerberos 5 的主配置文件是 /etc/krb5.conf。这个配置文件由多个部分组成,分别用来指定登录选项、某个特定领域的管理服务器和 KDC 服务器的实例信息以及 Kerberos 各选项的值等。

接下来在领域节内提供的是有关 KDC 和 Admin Server for Kerberos 领域 VMKRB5 的信息。这一节中还提供了有关其他领域的信息。 可以在 domain_realm 部分为不同的域指定领域。有关此文件的更多信息,请参看 krb5.conf 的手册页。

清单 2 提供了 /etc/krb5.conf 的示例。您将需要进行以下修改:

  • default_realm value
  • domain_realm value
  • values of kdc, and
  • admin_server

清单 2. /etc/krb5.conf 的示例清单
				
[logging]
 default = FILE:/var/log/krb5libs.log
 kdc = FILE:/var/log/krb5kdc.log
 admin_server = FILE:/var/log/kadmind.log

[libdefaults]
 default_realm = VMKRB5
 dns_lookup_realm = false
 dns_lookup_kdc = false
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true
 allow_weak_crypto = true

[realms]

VMKRB5 = {
  kdc = rhel6vm1.in.ibm.com:88
  admin_server = rhel6vm1.in.ibm.com:749
 }

[domain_realm]
 .in.ibm.com = VMKRB5
 in.ibm.com = VMKRB5

[kdc]
 profile = /var/kerberos/krb5kdc/kdc.conf

[appdefaults]

 pam = {
   debug = false
   ticket_lifetime = 36000
   renew_lifetime = 36000
   forwardable = true
   krb4_convert = false
 }

KDC 服务器的行为由配置文件 /var/kerberos/krb5kdc/kdc.conf 负责。我们将指定 ACL (Access Control List) 文件、受 KDC 支持的加密类型,以及 KDC 所需的其他 Kerberos 领域的选项。在清单 3 中,显示了一个 KDC 的示例配置文件。需要在领域部分根据领域的配置对领域的名称进行适当更改。


清单 3. /var/kerberos/krb5kdc/kdc.conf 的示例清单
				
[kdcdefaults]
 v4_mode = nopreauth
 kdc_tcp_ports = 88

[realms]
VMKRB5 = {
  master_key_type = des-cbc-crc
  acl_file = /var/kerberos/krb5kdc/kadm5.acl
  dict_file = /usr/share/dict/words
  admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab
  supported_enctypes = des-cbc-crc:normal des-cbc-crc:v4 des-cbc-crc:afs3
 }

请注意,KDC 被配置为支持 des-cbc-crc 变体的这些加密类型,因为 des-cbc-crc 非常适用于 OpenAFS。Kerberos 5 还支持其他许多加密类型。有关配置文件 kdc.conf 的更多信息,请参见 kdc.conf 的手册页。

清单 4 是定义了 ACL 的一个示例配置文件。管理员可以根据他们的需要选择是否定义 ACL。下面所示的访问控制列表文件允许具有 admin 实例的所有主体对领域 VMKRB5 进行全面访问。


清单 4. /var/kerberos/krb5kdc/kadm5.acl 的示例清单
				
*/admin@VMKRB5     *

初始化 Kerberos 5 数据库

我们首先要使用 Kerberos Database Maintenance Utility kdb5_util 针对领域 VMKRB5 初始化 Kerberos 5 的数据库。使用 kdb5_util 初始化 Kerberos 数据库如清单 5 所示。


清单 5. 初始化 Kerberos 5 数据库
				
root@rhel6vm1 ~ # kdb5_util create -r VMKRB5 -s Loading random data
Initializing database '/var/kerberos/krb5kdc/principal' for realm 'VMKRB5',
master key name 'K/M@VMKRB5.' You will be prompted for the database Master Password.
    It is important that you NOT FORGET this password. Enter KDC database master key: <vmkrb5>
Re-enter KDC database master key to verify: <vmkrb5>

-s 选项告诉 kdb5_util 创建一个存储文件 (包含一组密钥的文件),以便对自身进行身份验证。如果 /etc/krb5.conf 定义了多个领域,则应该使用选项 -r 来指定将为之创建数据库的那个领域。

启动 Kerberos 5 服务

清单 6 显示了启动 Kerberos 5 服务所需的命令。您可以使用 chkconfig 工具安排此服务在特定的运行级别上运行。


清单 6. 启动 Kerberos 5 服务
				
root@rhel6vm1 ~ # service kadmin start Starting Kerberos 5 Admin Server:                          [  OK  ]
root@rhel6vm1 ~ # service krb5kdc start Starting Kerberos 5 KDC:                                   [  OK  ]

定义基本策略和用户帐号

kadmin.local 命令组 (command suite) 可用在运行 KDC 的机器上。listprincs 子命令是 list_principals 的别名,它会列出数据库内现有的主体。

子命令 add_policyaddpol 允许我们定义策略。在这里,我们定义了名为 admin 和 service 的策略。这些策略制定了密码的最小长度以及类的最少数量(比如字母、数字和特殊符号中的类的数量)。

listpol 列出了已定义好的所有策略。 getpol 提供了有关指定策略的详细信息。

清单 7 显示了这些命令的一些基本用法。


清单 7. 已定义好的策略
root@rhel6vm1 ~ # kadmin.local Authenticating as principal avinesh/admin@VMKRB5 with password.
kadmin.local:  listprincs K/M@VMKRB5 <-- Kerberos Master Key Principal
kadmin/admin@VMKRB5
kadmin/changepw@VMKRB5
kadmin/history@VMKRB5
kadmin/rhel6vm1.in.ibm.com@VMKRB5
krbtgt/VMKRB5@VMKRB5
kadmin.local:  add_policy -minlength 8 -minclasses 3 admin kadmin.local:  addpol -minlength 8 -minclasses 4 service kadmin.local:  listpols admin
service
kadmin.local:  getpol admin Policy: admin
Maximum password life: 0
Minimum password life: 0
Minimum password length: 8
Minimum number of password character classes: 3
Number of old keys kept: 1
Reference count: 0
Maximum password failures before lockout: 0
Password failure count reset interval: 0
Password lockout duration: 0

所有的 kadmin/* 主体,如上述清单中 listprocs 的输出所示,针对的是不同的管理任务。krbtgt/VMKRB5@VMKRB5 是一个 Ticket Granting Ticket 服务的主体。

我们还为领域 VMKRB5 创建了一个名为 root/admin 的主体,它非常符合我们刚才定义的管理策略。我们将通过 kadmin 使用此主体(如清单 8 所示),以满足为此领域内所有机器的管理需求。


清单 8. 添加主体 root/admin
kadmin.local:  addprinc -policy admin root/admin Enter password for principal "root/admin@VMKRB5": <r00t123$>
Re-enter password for principal "root/admin@VMKRB5": <r00t123$>
Principal "root/admin@VMKRB5" created.
kadmin.local:  q

AFS 主体和服务密钥的创建

下面的清单 9 中的代码片段使用了 kadmin 命令套件来创建主体 afs/krb5afs.in.ibm.com、admin 和 avinesh。 Ktadd 为给定 Kerberos Key Table (keytab) 文件内的特定主体添加密钥。我们应该确保在发出 ktadd 命令之前,keytab 文件是不存在的,因为我们只想为 afs/krb5afs.in.ibm.com 生成一个密钥项。Key Version Number (kvno) 2 在这里尤其重要,因为我们需要导入 KeyFile 中的这个将被 AFS 使用的密钥,同时还要指定同一个 kvno。


清单 9. 使用 kadmin 命令套件创建主体
				
root@rhel6vm1 ~ # rm -f /etc/krb5.keytab.afs root@rhel6vm1 ~ # kadmin -p root/admin Authenticating as principal root/admin with password.
Password for root/admin@VMKRB5:
kadmin:  addprinc -policy service -randkey -e des-cbc-crc:normal afs/krb5afs.in.ibm.com Principal "afs/krb5afs.in.ibm.com@VMKRB5" created.
kadmin:  ktadd -e des-cbc-crc:normal -k /etc/krb5.keytab.afs afs/krb5afs.in.ibm.com Entry for principal afs/krb5afs.in.ibm.com with kvno 2, encryption type DES cbc mode with 
CRC-32 added to keytab WRFILE:/etc/krb5.keytab.afs.
kadmin:  addprinc -policy admin admin Enter password for principal "admin@VMKRB5": <admin123$>
Re-enter password for principal "admin@VMKRB5": <admin123$>
Principal "admin@VMKRB5" created.
kadmin:  addprinc -policy admin avinesh Enter password for principal "avinesh@VMKRB5": <avinesh123$>
Re-enter password for principal "avinesh@VMKRB5": <avinesh123$>
Principal "avinesh@VMKRB5" created.
kadmin:  q

klist 读取 keytab 文件并会给出与此文件中所有密钥有关的详细信息。

root@rhel6vm1 ~ # klist -kte /etc/krb5.keytab.afs Keytab name: WRFILE:/etc/krb5.keytab.afs
KVNO Timestamp         Principal
---- ----------------- --------------------------------------------------------
   2 01/26/11 23:14:27 afs/krb5afs.in.ibm.com@VMKRB5 (DES cbc mode with CRC-32)

获取 OpenAFS 源并构建 OpenAFS

我们需要从其网站下载 OpenAFS 源,可以借助从 Linux 机器上下载资料的 wget 工具来下载 OpenAFS 源的压缩的 tar 文件。


清单 10. 下载 OpenAFS Source Stable Release 1.4.14
				
root@rhel6vm1 ~ # wget http://openafs.org/dl/openafs/1.4.14/openafs-1.4.14-src.tar.bz2 --2011-01-17 12:22:29-- http://openafs.org/dl/openafs/1.4.14/openafs-1.4.14-src.tar.bz2
Resolving openafs.org... 128.2.200.90
Connecting to openafs.org|128.2.200.90|:80... connected.
HTTP request sent, awaiting response... 302 Found
Location: http://dl.openafs.org/dl/openafs/1.4.14/openafs-1.4.14-src.tar.bz2 [following]
--2011-01-17 12:22:30-- http://dl.openafs.org/dl/openafs/1.4.14/openafs-1.4.14-src.tar.bz2
Resolving dl.openafs.org... 128.2.201.26
Connecting to dl.openafs.org|128.2.201.26|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 11813993 (11M) [application/x-tar]
Saving to: `openafs-1.4.14-src.tar.bz2'

82% [========================================>         ] 9,709,310   22.4K/s  eta 57s

配置 OpenAFS 源以进行构建

./configure 的输出很值得研究,有助于查看 OpenAFS 可用的配置选项。

下面的清单显示了配置带 Kerberos 5 支持的 OpenAFS 源。make 用于构建目的,make dest 创建了一个包含二进制文件的 Transarc 风格的目录文件结构。


清单 11. 配置具有 Kerberos 5 支持的 OpenAFS 源
				
root@rhel6vm1 openafs-1.4.14 # which krb5-config /usr/bin/krb5-config
root@rhel6vm1 openafs-1.4.14 # ./configure --with-afs-sysname=i386_linux26 
                                --enable-transarc-paths \
                                --with-krb5-conf=/usr/bin/krb5-config root@rhel6vm1 openafs-1.4.14 # make root@rhel6vm1 openafs-1.4.14 # make dest 			

创建 AFS 特定目录

OpenAFS 支持基于磁盘和基于内存的缓存。在将 OpenAFS 客户端配置成进行本地磁盘缓存时,它通常会在标记为 /usr/vice/cache 的目录中存储与缓存相关的数据。建议使用单独的分区来存储缓存的数据。 通常,用户会创建一个分区、建立一个文件系统 (在 Linux 中一般是 ext3)并将文件系统挂载 (mount) 在目录 /usr/vice/cache 下。如果 AFS 管理员选择为此创建不同的目录,则应在 /usr/vice/etc/cacheinfo 文件中进行相同的指定。有关 /usr/vice/etc/cacheinfo 的更多信息,请参阅本文后面的 AFS 客户端磁盘缓存配置 一节中的解释。

运行 AFS File Server 的机器需要至少一个分区或逻辑卷来存储 AFS 卷。所有这样的分区都放置在名为 /vicepxx 的目录下,其中 xx 表示一个或两个小写字母。管理员通常都会使用 /vicepa 至 /vicepz 的分区,然后是 /vicepaa 至 /vicepaz 的分区。如果需要更多的副分区,则会使用 /vicepba 至 /vicepbz 的分区,依此类推。 OpenAFS 允许用户使用常规目录 /vicepxx 来存储 AFS 卷,但它要包含一个名为 AlwaysAttach 的文件。不过,还是建议对 AFS 服务器使用单独的分区,而不是使用常规目录。


清单 12. 创建目录来存储 AFS 二进制文件和配置文件
				
root@rhel6vm1 openafs-1.4.14 # mkdir /afs root@rhel6vm1 openafs-1.4.14 # chmod 777 /afs root@rhel6vm1 openafs-1.4.14 # mkdir -p /usr/vice/etc root@rhel6vm1 openafs-1.4.14 # mkdir -p /usr/afs root@rhel6vm1 openafs-1.4.14 # mkdir -p /usr/afsws 			


清单 13. 复制 OpenAFS 二进制文件
				
root@rhel6vm1 openafs-1.4.14 # cd i386_linux26/dest root@rhel6vm1 dest # cp -rp root.client/usr/vice/etc/* /usr/vice/etc root@rhel6vm1 dest # cp -p  root.client/usr/vice/etc/afs.rc /etc/rc.d/init.d/afs root@rhel6vm1 dest # cp root.client/usr/vice/etc/afs.conf /etc/sysconfig/afs root@rhel6vm1 dest # cp -rp root.server/usr/afs/* /usr/afs root@rhel6vm1 dest # cp -rp bin/ etc/ include/ lib/ /usr/afsws root@rhel6vm1 dest # ln -s /usr/afs/bin/bos /usr/bin/bos 			

配置文件 /etc/sysconfig/afs 有一些选项需要调整后才能运行 AFS 客户端、服务器以及缓存管理器的参数,比如缓存类型(缓存到磁盘上或内存中)以及其他的一些重要变量。如果要同时运行 AFS 客户端和 AFS 服务器,那么文件 /etc/sysconfig/afs 必须将 AFS_CLIENT 和 AFS_SERVER 都设置为 "on"。

AFS 单元的配置

在这里,我们将配置机器 rhel6vm1.in.ibm.com 上一个名为 krb5afs.in.ibm.com 的 AFS 单元。

为了 OpenAFS 安装期间的使用方便,我们将单元名称和机器(它会运行文件服务器)名称分别存储到环境变量 CELLNAME 和 SERVERNAME 中。

root@rhel6vm1 ~ # export CELLNAME=krb5afs.in.ibm.com root@rhel6vm1 ~ # export SERVERNAME=rhel6vm1.in.ibm.com 			

设置 AFS 单元名称

如清单 14 所示,我们在 noauth 模式启动了 bosserver,这样就不必为我们授权。


清单 14. 启动 bosserver
				
root@rhel6vm1 ~ # /usr/afs/bin/bosserver -noauth &
[1] 25631 root@rhel6vm1 ~ #[1]+  Done                    /usr/afs/bin/bosserver -noauth root@rhel6vm1 ~ # /usr/afs/bin/bos setcellname $SERVERNAME $CELLNAME -noauth root@rhel6vm1 ~ # /usr/afs/bin/bos listhosts $SERVERNAME -noauth Cell name is krb5afs.in.ibm.com
    Host 1 is rhel6vm1.in.ibm.com

bos setcellname 允许设置单元名称,bos listhosts 给出了 AFS 单元中服务器机器的信息。

清单 15 中的代码片段显示了 AFS 保护服务器 (ptserver) 以及 AFS 卷位置服务器 (vlserver) 实例的创建。

AFS 服务器配置


清单 15. 创建数据库服务器实例
				
root@rhel6vm1 ~ # /usr/afs/bin/bos create $SERVERNAME ptserver simple \
                               /usr/afs/bin/ptserver -cell $CELLNAME -noauth root@rhel6vm1 ~ # /usr/afs/bin/bos create $SERVERNAME vlserver simple \
                               /usr/afs/bin/vlserver -cell $CELLNAME -noauth 			

添加 AFS 将要使用的密钥

我们将使用 asetkey 命令添加我们之前为 AFS Service 主体 afs/krb5afs.in.ibm.com 在 keytab 文件 /etc/krb5.keytab.afs 内导出的那些密钥,以便 AFS 可以使用它们。请注意,在这里我们仍将 kvno 值指定为 2,正如我们前面所提到的。


清单 16. 使用 asetkey 添加密钥
				
root@rhel6vm1 ~ # /usr/afs/bin/asetkey add 2 /etc/krb5.keytab.afs afs/krb5afs.in.ibm.com root@rhel6vm1 ~ # /usr/afs/bin/bos listkeys $SERVERNAME -cell $CELLNAME key 2 has cksum 4052960223
Keys last changed on Fri Jan 21 12:33:42 2011.
All done.

bos listkeys 显示了存储在文件 /usr/afs/etc/KeyFile 中的 AFS 服务器加密密钥信息。

添加特权用户

清单 17 中的命令定义了一个特权用户,可以为该用户授权,以执行此 AFS 单元的管理工作。有关这些管理用户的信息存储在数据库服务器上的文件 /usr/afs/etc/UserList 中。


清单 17. 定义 AFS 单元中的管理用户
				
root@rhel6vm1 ~ # /usr/afs/bin/bos adduser $SERVERNAME admin \
                                             -cell $CELLNAME -noauth root@rhel6vm1 ~ # /usr/afs/bin/bos adduser $SERVERNAME avinesh \
                                             -cell $CELLNAME -noauth root@rhel6vm1 ~ # /usr/afs/bin/bos listusers -s $SERVERNAME \
                                             -cell $CELLNAME -noauth SUsers are: admin avinesh

bos adduser 将用户 admin 和 avinesh 添加到特权用户列表中。bos listusers 列出了来自 UserList 文件的所有这类用户。

将用户添加到 AFS 保护服务器的数据库中

清单 18 显示了如何使用此 pts 工具的 createuser 选项来创建用户 admin 和 avinesh。我们使用 pts 的 adduser 将这些用户添加到 AFS 系统管理员系统预先定义的组:administrators。


清单 18. 创建 ptserver 数据库中的用户
				
root@rhel6vm1 ~ # /usr/afs/bin/pts createuser -name admin   -noauth User admin has id 1
root@rhel6vm1 ~ # /usr/afs/bin/pts createuser -name avinesh   -noauth User avinesh has id 2
root@rhel6vm1 ~ # /usr/afs/bin/pts adduser admin system:administrators -noauth root@rhel6vm1 ~ # /usr/afs/bin/pts adduser avinesh system:administrators -noauth root@rhel6vm1 ~ # /usr/afs/bin/pts membership admin -noauth Groups admin (id: 1) is a member of:
  system:administrators
root@rhel6vm1 ~ # /usr/afs/bin/pts membership avinesh -noauth Groups avinesh (id: 2) is a member of:
  system:administrators
root@rhel6vm1 ~ # /usr/afs/bin/pts listentries -c $CELLNAME -localauth Name                          ID  Owner Creator
anonymous                  32766   -204    -204
admin                          1   -204   32766
avinesh                        2   -204   32766

membership 选项显示了某个特定用户的会员身份详细信息。 pts listentries 列出了此保护服务器数据库中的所有用户及其 ID。

启动 AFS File Server 进程

清单 19 显示了用来创建和启动文件服务器进程的命令。我们将使用 bos status 命令来验证这些进程是否正在运行。


清单 19. 创建和启动文件服务器进程
				
root@rhel6vm1 ~ # /usr/afs/bin/bos restart $SERVERNAME -all -cell $CELLNAME -noauth root@rhel6vm1 ~ # /usr/afs/bin/bos create $SERVERNAME fs fs \
                                        /usr/afs/bin/fileserver \
                                        /usr/afs/bin/volserver  \
                                        /usr/afs/bin/salvager   \
                                        -cell $CELLNAME -noauth root@rhel6vm1 ~ # /usr/afs/bin/bos status $SERVERNAME fs -long -noauth Instance fs, (type is fs) currently running normally.
    Auxiliary status is: file server running.
    Process last started at Fri Jan 21 10:45:11 2011 (2 proc starts)
    Command 1 is '/usr/afs/bin/fileserver'
    Command 2 is '/usr/afs/bin/volserver'
    Command 3 is '/usr/afs/bin/salvager'

创建 AFS 卷

为给定组织选择一个作为 AFS 文件空间的 root 的卷。按照惯例,这个卷的名称是 root.afs。该组织内的每个客户端都会对 /afs 上的这个 root 卷执行 UNIX mount(),以便在这个点上挂载 整个 AFS 名称空间。

AFS Cache 管理器通常会将 AFS 文件系统的 root 放置在 /afs 下,或是按照配置文件 /usr/vice/etc/cacheinfo 中定义的内容放置它。AFS Cache 管理器会在内部将 root.afs 卷放置到路径 /afs 下。root.afs 卷包含所有单元的 root 卷的挂载点,如该客户端已知的所有单元的数据库中所述,该挂载点位于文件 /usr/vice/etc/CellServDB 中。 如果某个客户端需要访问某个外部单元(即非本地的单元),我们需要提供此文件中这个单元的服务器细节。


清单 20. 使用 vos 创建 AFS 卷
				
root@rhel6vm1 ~ # /usr/afs/bin/vos create -s $SERVERNAME -pa a -name root.cell \
                                                    -maxq 30000 -c $CELLNAME -noauth Volume 536870912 created on partition /vicepa of rhel6vm1.in.ibm.com
root@rhel6vm1 ~ # /usr/afs/bin/vos create -s $SERVERNAME -pa a -name root.afs \
                                                   -maxq 30000 -c $CELLNAME -noauth Volume 536870915 created on partition /vicepa of rhel6vm1.in.ibm.com
root@rhel6vm1 ~ # /usr/afs/bin/vos listvol -s $SERVERNAME -c $CELLNAME -noauth Total number of volumes on server rhel6vm1.in.ibm.com partition /vicepa: 2
root.afs                          536870915 RW          2 K On-line
root.cell                         536870912 RW          2 K On-line

Total volumes onLine 2 ; Total volumes offLine 0 ; Total busy 0

AFS 客户端配置

将 AFS 客户端和服务器配置给特定的单元

默认情况下,安装过程中会创建配置文件 /usr/vice/etc/ThisCell,将它作为 /usr/afs/etc/ThisCell 的象征性链接,并使用我们刚选择的单元名称作为其内容。文件 /usr/vice/etc/ThisCell 包含此 AFS 客户端的本地单元名称,而 /usr/afs/etc/ThisCell 则包含其数据库服务器将在此机器上运行的那些单元的名称。一个机器可以为相同或不同的单元运行 AFS 客户端和 AFS 服务器。如果需要为 AFS 单元运行 AFS 客户端,与此同时,还要为不同的 ASF 单元运行 AFS 服务器, 那么我们需要让 /usr/vice/etc/ThisCell 成为单独的文件,而非象征性的链接,并将所需的单元名称作为内容。

利用清单 21 内所示的命令,我们将此机器配置成可为同一个单元运行 AFS 客户端和 AFS 服务器,不过,我们会让配置文件 /usr/afs/etc/ThisCell 和 /usr/vice/etc/ThisCell 有所区别。


清单 21. 配置此机器的 AFS 客户端和服务器成员关系
				
root@rhel6vm1 ~ # ls -l /usr/vice/etc/ThisCell lrwxrwxrwx. 1 root root 21 Jan 21 10:31 /usr/vice/etc/ThisCell -> /usr/afs/etc/ThisCell
root@rhel6vm1 ~ # cat /usr/afs/etc/ThisCell krb5afs.in.ibm.com
root@rhel6vm1 ~ # rm -f /usr/vice/etc/ThisCell root@rhel6vm1 ~ # cp /usr/afs/etc/ThisCell  /usr/vice/etc/ThisCell root@rhel6vm1 ~ # cat /usr/vice/etc/ThisCell krb5afs.in.ibm.comroot@rhel6vm1 ~ # cat /usr/afs/etc/ThisCell krb5afs.in.ibm.com

对外部 AFS 单元的访问

配置文件 /usr/vice/etc/CellServDB 和 /usr/afs/etc/CellServDB 分别包含了有关 AFS 客户端和 AFS 服务器的数据库服务器信息。/usr/afs/etc/CellServDB 文件包含 AFS 单元的数据库服务器信息,某个特定的机器正在为该单元运行 AFS 服务器。该文件包含关于某个 AFS 单元的信息。而文件 /usr/vice/etc/CellServDB 则包含此 AFS 客户端需要访问的所有 AFS 单元的数据库服务器的详细信息。

同样地,此安装过程中会创建 /usr/vice/etc/CellServDB,将它作为 /usr/afs/etc/CellServDB 的象征链接。接下来,我们会让这两个文件成为独立文件,以防止客户端需要访问其他 AFS 单元。为此,只需将此单元的信息添加到 /usr/vice/etc/CellServDB 文件中即可。


清单 22. 创建 CellServDB 文件
				
root@rhel6vm1 ~ # cat /usr/afs/etc/CellServDB >krb5afs.in.ibm.com     #Krb5 AFS Test Cell
192.168.110.129    #rhel6vm1.in.ibm.com
root@rhel6vm1 ~ # ls -l /usr/vice/etc/CellServDB lrwxrwxrwx 1 root root 23 Jan 21 10:31 /usr/vice/etc/CellServDB -> /usr/afs/etc/CellServDB
root@rhel6vm1 ~ # rm -f /usr/vice/etc/CellServDB root@rhel6vm1 ~ # cp /usr/afs/etc/CellServDB  /usr/vice/etc/CellServDB 			

AFS 客户磁盘缓存配置

可以将 AFS 配置为在本地的磁盘或内存中缓存数据。这可以在 AFS 配置文件 /etc/sysconfig/afs 内指定缓存方式。配置文件 /usr/vice/etc/cacheinfo 包含有关 AFS 文件系统的安置点、AFS 存储数据(在进行磁盘缓存时)的路径以及针对缓存大小使用的块数的信息。如下所示,我们指定的缓存大小为 8,15,000 KB:

root@rhel6vm1 ~ # cat /usr/vice/etc/cacheinfo /afs:/usr/vice/cache:815000

最后的步骤

至此,我们距完成配置仅有一步之遥。我们还需要使用 service afs stop 命令来停止正在运行的 AFS 服务。AFS Cache Manager 将卷 root.afs 放置在 /afs(如 /usr/vice/etc/cacheinfo 文件中所述)下。现在我们来放置之前创建的 root.cell 卷。

按照惯例,接下来的操作是将创建的卷放置在 /afs 下以单元名称命名的目录中。因此,我们需要将 root.cell 卷 放置到 /afs/krb5afs.in.ibm.com。还有一点极为重要,即禁用 AFS 客户端 (afsd) 的 dynroot 选项。为此,我们需要修改 /etc/sysconfig/afs 文件并设置 ENABLE_DYNROOT=off。因为已经有了 dynroot,所有可以使用具有 AFS 单元名称的子目录来填充 /afs 目录,如 /usr/vice/etc/CellServDB 文件中定义的那样。它并不会从文件服务器加载卷 root.afs,而是会直接设法获得 root.cell 卷,并且仅当用户试图访问挂载卷 root.cell 的目录时获得该卷。

我们还需要将领域名称放在文件 /usr/afs/etc/krb.conf 中,因为我们的领域名与 AFS 单元名不同。清单 23 显示了将领域名称放在 /usr/afs/etc/krb.conf 中、启动 AFS 服务、设置 /afs 上的 ACL 以及安置 root.cell 卷的命令。


清单 23. 领域名称的配置
				
root@rhel6vm1 ~ # service afs stop Stopping AFS services.....
Stopping AFS bosserver
root@rhel6vm1 ~ #
root@rhel6vm1 / # echo "VMKRB5" > /usr/afs/etc/krb.conf
root@rhel6vm1 ~ # service afs start Starting AFS services.....
afsd: All AFS daemons started.
root@rhel6vm1 / # /usr/afs/bin/fs setacl /afs system:anyuser rl root@rhel6vm1 / # cd /afs root@rhel6vm1 /afs # /usr/afs/bin/fs mkm krb5afs.in.ibm.com -vol root.cell \
                                                       -c krb5afs.in.ibm.com root@rhel6vm1 /afs # ln -s krb5afs.in.ibm.com krb5afs 			

大功告成!

我们现在就完成了 AFS 以及 Kerberos 5 的配置。完成这些配置后,最好重启机器。重启机器后,即可启动 Kerberos 5 和 AFS 服务。这时,我们可以启用 afsd 的 dynroot 选项,然后再启动 AFS 服务。

在清单 24 中,我们使用 kinit 来获得主体 avinesh 的 Kerberos 5 票据。klist 显示了已缓存的所有 Kerberos 5 票据的列表。


清单 24. 获得 Kerberos 5 票据
				
root@rhel6vm1 ~ # kinit avinesh Password for avinesh@VMKRB5:
root@rhel6vm1 ~ # klist -5f Ticket cache: FILE:/tmp/krb5cc_0
Default principal: avinesh@VMKRB5

Valid starting     Expires            Service principal
01/26/11 23:18:35  01/27/11 23:18:35  krbtgt/VMKRB5@VMKRB5
        renew until 01/26/11 23:18:35, Flags: FRI

可以基于 Kerberos 5 票据、使用 aklog 来设置 AFS 令牌。选项 -d 是可选的,因为它会显示关于 AFS 令牌的工作原理的冗长信息。tokens 显示了由 AFS Cache Manager 保存的 AFS 令牌,如清单 25 所示。当 AFS 客户端试图访问 AFS 空间时,可能需要提供此令牌数据来获得对所请求数据的访问。


清单 25. AFS 令牌
				
		
root@rhel6vm1 ~ # service afs start Starting AFS services.....
afsd: All AFS daemons started.
root@rhel6vm1 ~ #
root@rhel6vm1 ~ # aklog -d Authenticating to cell krb5afs.in.ibm.com (server rhel6vm1.in.ibm.com).
Trying to authenticate to user's realm VMKRB5.
Getting tickets: afs/krb5afs.in.ibm.com@VMKRB5
Using Kerberos V5 ticket natively
About to resolve name avinesh to id in cell krb5afs.in.ibm.com.
Id 2
Set username to AFS ID 2
Setting tokens. AFS ID 2 /  @ VMKRB5
root@rhel6vm1 ~ #
root@rhel6vm1 ~ # tokens Tokens held by the Cache Manager (UID Based Tokens):

User's (AFS ID 1) tokens for afs@krb5afs1.in.ibm.com [Expires Feb  8 07:00]
   --End of list--
root@rhel6vm1 ~ #

结束语

本文介绍了如何通过 OpenAFS 和 Kerberos 5 KDC 的身份验证进入 AFS 的广阔世界。20 多年来,AFS 中的更多特性一直为系统管理员所用。有关 AFS 和 Kerberos 5 的更多信息,请参阅下面的参考资料部分,并获得相关文档的链接。

原文转自 IBM developerWorks

举报
IBMdW
发帖于6年前 0回/750阅
顶部