Começamos com uma introdução básica a AFS e Kerberos. Depois, configuraremos uma célula AFS usando a versão estável de OpenAFS 1.4.14 em RedHat Enterprise Linux 6. As etapas, porém, devem funcionar com pouca ou nenhuma diferença em outras distribuições de Linux e em outras versões de OpenAFS. Primeiro, configuraremos os serviços de Kerberos 5 e, em seguida, o OpenAFS.
O IBM AFS, ou OpenAFS, é um sistema de arquivos distribuído e baseado em rede em arquitetura cliente-servidor na qual hosts que cooperam compartilham seus recursos de sistema de arquivos a serem usados por clientes em redes local e de longa distância. Ele foi desenvolvido originalmente no Information Technology Center da Universidade Carnegie-Mellon, em Pittsburgh, Pensilvânia. Os principais pontos fortes do AFS são:
- Namespace global
- Transparência de local
- Recurso de armazenamento em cache
- Escalabilidade
- Recursos de segurança e
- Protocolo de comunicação robusto
Esses recursos permitem que o AFS seja conhecido como o avô dos sistemas de arquivos distribuídos, mesmo depois de tantos anos de desenvolvimento. O AFS está disponível em todas as principais plataformas em uso hoje.
Arquitetonicamente, o AFS tem dois componentes: um servidor e um cliente. A seguir, uma breve descrição da arquitetura do AFS.
- Componente servidor (Vice) —Os servidores AFS são monitorados por um superservidor chamado de Basic OverSeer Server (BOS Server). Ele monitora o funcionamento dos processos AFS na máquina e pode ser utilizado para iniciar, parar, suspender ou continuar esses processos, ou para atualizar novos binários de servidor. O restante dos servidores se divide em duas categorias, a saber, de banco de dados e de arquivos.
- Servidores de banco de dados — Os seguintes servidores pertencem à categoria de servidores de banco de dados:
- Servidor de backup (buserver) — Mantém o banco de dados de backup para administrar todas as operações de backup nos servidores de banco de dados.
- Servidor de local de volume (vlserver) — Mantém o banco de dados de local do volume (VLDB) para acompanhar todas as informações sobre os volumes e sua localização em um servidor de arquivos. O volume AFS é explicado abaixo. Vlserver suporta operações como consultas de local e status do volume, gerenciamento de ID de volume, criação, exclusão e modificação de entradas de VLDB.
- Servidor de proteção (ptserver) — Mantém o banco de dados de proteção (PDB) que faz o mapeamento entre o nome do usuário ou do grupo e seus identificadores numéricos internos de AFS. Também é usado para criar, destruir, modificar e consultar a propriedade e associação.
- Servidor de autenticação (kaserver) — Mantém o banco de dados de autenticação que usa para autenticar os usuários e responde com êxito a clientes com chamados de autenticação.
- Servidores de arquivos
- Servidor de arquivos (fileserver) — Manipula arquivos e diretórios que residem em volumes AFS, fornecendo acesso a uma solicitação do cliente devidamente autenticada. Fornece serviço de arquivo simples.
- Servidor de salvamento (salvager) — Fornece o melhor esforço para recuperar dados armazenados em volumes AFS em um servidor de arquivos.
- Servidor de volume (volser) — Permite a execução de tarefas administrativas relacionadas a volumes AFS, como criação, relocação, exclusão, replicação, etc.
- Componente cliente (Venus) — O gerenciamento de cache AFS é cuidado por um cliente AFS (afsd), com a ajuda de um conjunto de daemons. Ele suporta armazenamento em cache em disco local e também na memória.
Os servidores AFS são aplicativos de nível de usuário, mas o AFS tem um módulo do kernel que intercepta as chamadas ao espaço AFS.
Um conjunto de máquinas de servidor e cliente gerenciado e administrado por uma entidade administrativamente independente é chamado de uma célula AFS. Em uma célula AFS, pelo menos uma das máquinas deve estar executando processos do servidor de banco de dados e do servidor de arquivos. O restante das máquinas pode executar apenas o componente cliente.
O AFS armazena seus arquivos em volumes que usam espaço de armazenamento em máquinas que executam o componente de servidor de arquivos do AFS. Um volume AFS pode ser considerado um contêiner que guarda arquivos e diretórios. Esses volumes são projetados para que os administradores do sistema possam mover esses volumes para balanceamento de carga, etc., de uma máquina que executa o processo de servidor de arquivos para outra que executa o processo de servidor de arquivos, dentro da mesma célula AFS. Há um conjunto de operações que podem ser realizadas nesses volumes AFS, como replicação, dump de dados, backup, restauração, etc. Existem muitos outros conceitos relacionados a volumes que estão fora do escopo deste artigo.
Os processos de servidor de banco de dados executados em máquinas diferentes em uma célula AFS usam o protocolo Ubik para manter seus bancos de dados em sincronia. O protocolo Ubik ajuda a replicar bancos de dados, como VLDB, ADB e PDB, de forma consistente entre várias máquinas de servidor para melhorar sua disponibilidade e compartilhar as cargas de acesso entre os sites de replicação. Ele usa um algoritmo de complementação de quorum para sincronizar as informações dos bancos de dados.
Outro conceito importante é o mecanismo de comunicação usado por um servidor AFS, bem como por processos do cliente dentro ou entre células AFS, que é chamado de Rx. É um mecanismo de Chamada de Procedimento Remoto (RPC) que fornece um mecanismo de alto desempenho, multiencadeado e seguro para comunicação entre processos executados na mesma máquina, em uma rede local (LAN), bem como em uma rede de longa distância (WAN). A biblioteca Rx foi devidamente projetada para ser usada no kernel, bem como em aplicativos de espaço do usuário com interfaces de API semelhantes.
O Kerberos é um protocolo de autenticação de rede, desenvolvido no MIT, que utiliza uma chave simétrica compartilhada para estabelecer autenticação mútua. Chaves criptográficas similares podem ser usadas para criptografar e decriptografar as mensagens, portanto, ambos os lados têm garantia de que estão interagindo com o lado correto.
Esta seção define os conceitos básicos de Kerberos utilizados neste artigo. A seguir, configuraremos uma região do Kerberos. Uma região representa um domínio administrativo de autenticação. Ela liga a autoridade de um servidor de autenticação ou AS (um componente da infraestrutura do Kerberos) dessa região para fornecer autenticação aos principais que pertencem à região. Os principais de Kerberos são entidades, como usuários, máquinas ou serviços, que precisam de serviço de autenticação. Os principais compartilham sua chave criptográfica com o servidor de autenticação da região a que pertencem.
Dois conceitos importantes relacionados a um principal são as chaves e os chamados.
- Chave — Uma chave são os dados de criptografia normalmente derivados de uma senha de usuário que usa algoritmos de criptografia específicos. Para principais que não são usuários, uma chave é gerada aleatoriamente. Um Número de Versão de Chave (kvno) é usado para marcar as chaves.
- Chamado — Um chamado constitui em dados de autenticação que um cliente apresenta para se autenticar em um servidor para um serviço. Um chamado é fornecido por um servidor de autenticação ao cliente usando uma chave criptográfica do servidor pretendido. Portanto, um cliente é incapaz de adivinhar o conteúdo do chamado.
Em uma infraestrutura do Kerberos, temos algo chamado de centro de distribuição de chaves, ou KDC, que fornece a funcionalidade de distribuição de chamados. Logicamente, ele fornece três serviços: manutenção de banco de dados de principais, servidor de autenticação (AS) e servidor de concessão de chamado (TGS). O KDC executa dois daemons importantes:
kadmind
Esse é um daemon administrativo que gerencia um banco de dados de principais, suas chaves secretas e as configurações de política.kadmin.localekadminsão comandos que permitem o acesso a essa funcionalidade em máquinas locais ou em máquinas remotas que executam o KDC, respectivamente.krb5kdc
Esse é um daemon significativo que lida com as solicitações de autenticação. Quando um usuário solicita um chamado de autenticação, ele vem para esse daemon.
Antes de continuar, precisamos nos certificar de que os binários relacionados ao Kerberos 5 estão instalados na máquina. A seguir, os RPMs que devem ser instalados para a compilação e o uso de OpenAFS com suporte a Kerberos 5.
- krb5-workstation
- krb5-server
- krb5-libs
- krb5-devel
A Listagem 1 mostra os RPMs instalados na minha máquina de teste. Ela tem RPMs adicionais instalados além dos mencionados acima. A listagem também mostra uma breve descrição de cada um.
Listagem 1. RPMs relacionados a Kerberos 5
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 ~ # |
Vamos configurar uma região do Kerberos chamada VMKRB5. O nome de host da máquina que estamos usando é rhel6vm1.in.ibm.com. O principal arquivo de configuração do Kerberos 5 é /etc/krb5.conf. Esse arquivo de configuração é composto de seções para especificar opções de log, servidor de administração e informações instância de servidor KDC para determinada região, e valores de opções para Kerberos, etc.
A seguir, são fornecidas as informações sobre o KDC e o servidor de administração para a região VMKRB5 do Kerberos, na seção de região. As informações sobre outras regiões podem ser especificadas na mesma seção. São especificadas regiões para domínios diferentes na seção domain_realm. Para obter mais informações sobre esse arquivo, consulte as páginas de manual de krb5.conf.
A Listagem 2 fornece uma amostra de /etc/krb5.conf. Será preciso modificar:
- valor de default_realm
- valor de domain_realm
- valores de kdc e
- admin_server
da sua região do Kerberos.
Listagem 2. Amostra de listagem de /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
}
|
O comportamento do servidor KDC é regido pelo arquivo de configuração /var/kerberos/krb5kdc/kdc.conf. Especificaremos o arquivo ACL (Access Control List), os tipos de criptografia suportados pelo KDC, etc., entre outras opções de regiões do Kerberos necessárias para o KDC. Na Listagem 3, é mostrado um arquivo de configuração de amostra do KDC. O nome da região precisa ser mudado adequadamente na seção de regiões de acordo com sua configuração.
Listagem 3. Amostra de listagem de /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
}
|
Note que o KDC é configurado para suportar tipos de criptografia que são variantes de des-cbc-crc, visto que este funciona bem com OpenAFS. O Kerberos 5 também suporta muitos outros tipos de criptografia. Para obter mais informações sobre o arquivo de configuração kdc.conf, consulte as páginas de manual de kdc.conf.
A Listagem 4 é um arquivo de configuração de amostra que define ACLs. Os administradores podem decidir definir ACLs de acordo com seus requisitos. O arquivo da lista de controle de acesso abaixo permite que todos os principais com instância de administração para nossa região VMKRB5 em todos os acessos
Listagem 4. Amostra de listagem de /var/kerberos/krb5kdc/kadm5.acl
*/admin@VMKRB5 * |
Inicializando o banco de dados de Kerberos 5
Primeiro, inicializaremos o banco de dados do Kerberos 5 para a região VMKRB5 usando o Kerberos Database Maintenance Utility kdb5_util. A inicialização do banco de dados de Kerberos usando o kdb5_util é mostrada na Listagem 5.
Listagem 5. Inicializando o banco de dados do 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 |
A opção -s diz ao kdb5_util para criar um arquivo stash (um arquivo que contém um conjunto de chaves secretas) para se autenticar. Se houver várias regiões definidas em /etc/krb5.conf, deve-se usar a opção -r para especificar a região na qual vai ser criado o banco de dados.
Iniciando os serviços do Kerberos 5
A Listagem 6 mostra os comandos para iniciar os serviços do Kerberos 5. Pode-se usar a ferramenta chkconfig para programar esse serviço para execução em níveis de execução específicos.
Listagem 6. Iniciando os serviços de Kerberos 5
root@rhel6vm1 ~ # service kadmin start Starting Kerberos 5 Admin Server: [ OK ] root@rhel6vm1 ~ # service krb5kdc start Starting Kerberos 5 KDC: [ OK ] |
Definindo políticas básicas e contas de usuário
kadmin.local é um conjunto de comandos que pode ser usado em máquinas que executam o KDC. listprincs é um subcomando que é um alias para list_principals que lista os principais existentes no banco de dados.
O subcomando add_policy ou addpol nos permite definir políticas. Aqui, definimos políticas chamadas admin e service. Essas políticas indicam o comprimento mínimo da senha e o número mínimo de classes (como em caracteres alfabéticos, numerais e caracteres especiais, etc).
listpol lista todas as políticas definidas.
getpol fornece informações detalhadas sobre a política especificada.
A Listagem 7 mostra o uso básico desses comandos.
Listagem 7. Políticas definidas
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 |
Todos os principais kadmin/*, como mostrado na listagem acima, como saída de listprocs, servem para várias tarefas de administração. krbtgt/VMKRB5@VMKRB5 é um principal para o Serviço de Concessão de Chamados.
Também estamos criando um principal chamado root/admin para nossa região VMKRB5, que atende à política de administração que acabamos de definir. Usaremos esse principal com kadmin, como mostrado na Listagem 8, para necessidades administrativas a partir de qualquer máquina na região.
Listagem 8. Incluindo o principal
root/adminkadmin.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 |
Criação do principal AFS e de chaves de serviço
O fragmento abaixo na Listagem 9 mostra o uso do conjunto de comandos kadmin para criar os principais afs/krb5afs.in.ibm.com, admin e avinesh.
Ktadd acrescenta a chave para o principal especificado no arquivo determinado da Tabela de Chaves de Kerberos (keytab). Devemos ter certeza de que o arquivo keytab não existe, antes de emitir ktadd visto que queremos apenas uma entrada de chave para afs/krb5afs.in.ibm.com. O Número de Versão de Chave (kvno) 2 é de importância especial aqui porque precisamos especificar o mesmo kvno ao importar a chave no KeyFile a ser usada por AFS.
Listagem 9. Uso do conjunto de comandos
kadmin para criar os principaisroot@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 lê o arquivo keytab e fornece informações detalhadas sobre todas as chaves do arquivo.
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) |
Obtendo a origem de OpenAFS e fazendo uma compilação de OpenAFS
Precisamos fazer o download da origem de OpenAFS do seu Web site usando wget, a ferramenta para downloads das máquinas Linux, para fazer o download de um arquivo tar compactado a partir da origem de OpenAFS.
Listagem 10. Fazendo o download de 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 |
Configurando a origem de OpenAFS para executar uma compilação
Vale a pena ler a saída de ./configure --help para ver as opções de configuração disponíveis em OpenAFS.
A listagem a seguir mostra os comandos para configurar a origem de OpenAFS com o suporte a Kerberos 5. make é para a compilação e make dest cria uma estrutura de diretório de estilo Transarc com binários.
Listagem 11. Configurando a origem de OpenAFS com suporte a Kerberos 5
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
|
Criação de diretórios específicos de AFS
O OpenAFS suporta armazenamento em cache baseado em disco e em memória. Quando um cliente OpenAFS é configurado para fazer armazenamento em cache no disco local, convencionalmente ele armazena os dados relacionados ao cache em um diretório chamado /usr/vice/cache. Recomenda-se que uma partição separada seja utilizada para armazenar os dados em cache. Normalmente, um usuário criaria uma partição, faria um sistema de arquivos (geralmente o ext3 no Linux) e montaria o sistema de arquivos no diretório /usr/vice/cache. Se os administradores de AFS escolherem usar um diretório diferente para isso, deverão especificá-lo no arquivo /usr/vice/etc/cacheinfo. A mais explicações sobre /usr/vice/etc/cacheinfo na seção Configuração de cache em disco do cliente AFS abaixo.
Uma máquina que executa o servidor de arquivos AFS precisa ter pelo menos uma partição ou volume lógico para armazenar volumes AFS. Cada partição é montada em um diretório chamado /vicepxx, no qual xx significa uma ou duas letras do alfabeto, em minúsculas. Os administradores em geral têm partições como /vicepa a /vicepz, e depois /vicepaa a /vicepaz. Se forem necessárias mais partições vice, são usadas /vicepba a /vicepbz, e assim por diante. O OpenAFS permite que os usuários utilizem o diretório regular /vicepxx para armazenar volumes de AFS, se este contiver um arquivo chamado AlwaysAttach. Aconselhamos, porém, que haja partições separadas para o servidor AFS, em vez do diretório regular.
Listagem 12. Criando diretórios para armazenar binários AFS e arquivos de configuração
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 |
Listagem 13. Copiando binários 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 |
O arquivo de configuração /etc/sysconfig/afs tem opções que precisam ser ajustadas para a execução do cliente AFS, do seu servidor e dos parâmetros do gerenciador de cache (como tipo de armazenamento em cache - em disco ou na memória, e outras variáveis importantes). Se o cliente e o servidor AFS estarão em execução ao mesmo tempo, o arquivo /etc/sysconfig/afs deve ter AFS_CLIENT e AFS_SERVER definidos como "on".
Aqui, configuraremos uma célula AFS chamada krb5afs.in.ibm.com na nossa máquina rhel6vm1.in.ibm.com.
Para conveniência durante a instalação de OpenAFS, armazenaremos o nome da célula e da máquina (que executará os servidores de arquivos) nas variáveis de ambiente CELLNAME e SERVERNAME, respectivamente.
root@rhel6vm1 ~ # export CELLNAME=krb5afs.in.ibm.com root@rhel6vm1 ~ # export SERVERNAME=rhel6vm1.in.ibm.com |
Definindo o nome da célula AFS
Como mostrado na Listagem 14, iniciamos bosserver no modo noauth , de modo que ele não precise que tenhamos autorização.
Listagem 14. Iniciando 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 permite a definição de um nome de célula e bos listhosts fornece informações sobre máquinas de servidor na célula AFS.
O fragmento de código na Listagem 15 mostra a criação de instâncias de servidor de proteção AFS (ptserver) e de servidor de localização de volume AFS (vlserver).
Listagem 15. Criando instâncias de servidor de banco de dados
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
|
Acrescentando chaves a ser usadas por AFS
Usaremos o comando asetkey para acrescentar as chaves que exportamos antes no arquivo keytab /etc/krb5.keytab.afs para o principal de serviço AFS afs/krb5afs.in.ibm.com , de modo que possa ser usado por AFS. Note que especificamos o mesmo valor de kvno de 2 aqui, como mencionamos acima.
Listagem 16. Incluindo chaves com 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 exibe as informações de criptografia do servidor AFS armazenadas no arquivo /usr/afs/etc/KeyFile.
Acrescentando usuários privilegiados
Os comandos na Listagem 17 definem um usuário privilegiado que seria autorizado a fazer trabalho administrativo para essa célula AFS. As informações sobre esses usuários administrativos são armazenadas no arquivo /usr/afs/etc/UserList na máquina do servidor de banco de dados.
Listagem 17. Definindo usuários administrativos na célula 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 acrescenta os usuários admin e avinesh à lista de usuários privilegiados. bos listusers lista todos esses usuários a partir do arquivo UserList .
Acrescentando usuários ao banco de dados do servidor de proteção AFS
A Listagem 18 mostra a criação dos usuários admin e avinesh usando a opção createuser da ferramenta pts. Acrescentamos esses usuários ao grupo predefinido de administradores de sis tema AFS system:administrators usando a opção adduser de pts.
Listagem 18. Criando usuários no banco de dados 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 |
A opção de associação mostra os detalhes de associação de determinado usuário.
pts listentries lista todos os usuários do banco de dados do servidor de proteção juntamente com seus IDs.
Iniciando os processos do servidor de arquivos AFS
A Listagem 19 mostra os comandos para criar e iniciar os processos do servidor de arquivos. Usaremos o comando bos status para verificar se esses processos estão em execução.
Listagem 19. Criando e iniciando processos de servidor de arquivos
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'
|
Um único volume é escolhido como raiz do espaço no arquivo AFS para determinada organização. Por convenção, esse volume é chamado de root.afs. Cada cliente nessa organização executa um mount() de UNIX desse volume raiz em /afs, anexando assim o inteiro namespace de AFS nesse ponto.
O gerenciador de cache de AFS monta a raiz do sistema de arquivos AFS em geral em /afs ou conforme definido no arquivo de configuração /usr/vice/etc/cacheinfo. O gerenciador de cache de AFS monta internamente o volume root.afs no caminho /afs. O volume root.afs contém os pontos de montagem dos volumes raiz de todas as células, como descrito no banco de dados de todas as células conhecidas desse cliente, no arquivo /usr/vice/etc/CellServDB. Se um cliente precisa acessar uma célula estrangeira (isto é, uma célula que não seja a local), precisamos fornecer detalhes ao servidor sobre essa célula nesse arquivo.
Listagem 20. Criando volumes AFS com vos
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
|
Configurando o cliente e o servidor AFS em determinada célula
Por padrão, o processo de instalação cria o arquivo de configuração /usr/vice/etc/ThisCell como link simbólico com /usr/afs/etc/ThisCell, com o nome de célula que acabamos de escolher como seu conteúdo. O arquivo /usr/vice/etc/ThisCell contém nomes de células locais para esse cliente AFS enquanto /usr/afs/etc/ThisCell contém nomes de células cujos servidores de banco de dados estarão em execução nessa máquina. Uma máquina pode executar cliente e servidores AFS para a mesma célula, bem como para células diferentes. Se você necessita do cliente AFS para uma célula AFS com servidores AFS em execução em uma célula AFS diferente, precisamos ter /usr/vice/etc/ThisCell como um arquivo separado, em vez de como link simbólico, com os nomes de célula desejados como conteúdo .
Com os comandos mostrados na Listagem 21, configuramos a máquina para executar o cliente e o servidor AFS na mesma célula, mas teremos o arquivo de configuração /usr/afs/etc/ThisCell e o /usr/vice/etc/ThisCell separadamente.
Listagem 21. Configurando cliente AFS e associação e servidor da máquina
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 |
Acesso a células AFS estrangeiras
Os arquivos de configuração /usr/vice/etc/CellServDB e /usr/afs/etc/CellServDB contêm informações de servidor de banco de dados para o cliente e para o servidor AFS, respectivamente. O arquivo /usr/afs/etc/CellServDB contém informações de servidor de banco de dados da célula AFS para a qual determinada máquina está executando o servidor AFS. Tem informações sobre uma das células AFS. O arquivo /usr/vice/etc/CellServDB, porém, contém detalhes sobre os servidores de banco de dados de toda a célula AFS que esse cliente AFS precisa acessar.
Novamente, o processo de instalação cria /usr/vice/etc/CellServDB como link simbólico para /usr/afs/etc/CellServDB. A seguir, manteremos esses dois arquivos separados em casos nos quais o cliente precisa acessar outras células AFS. Basta acrescentar as informações da célula ao arquivo /usr/vice/etc/CellServDB.
Listagem 22. Criando o arquivo 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 |
Configuração de cache em disco do cliente AFS
AFS pode ser configurado para armazenar em cache localmente os dados em disco ou na memória. Isso pode ser especificado no arquivo de configuração de AFS /etc/sysconfig/afs. O arquivo de configuração /usr/vice/etc/cacheinfo tem informações sobre o ponto de montagem do sistema de arquivos AFS, o caminho onde o AFS armazenará os dados (no caso de cache em disco) e o número de blocos a usar para o tamanho de cache. Aqui, especificaremos um cache com tamanho de 8,15,000 KB:
root@rhel6vm1 ~ # cat /usr/vice/etc/cacheinfo /afs:/usr/vice/cache:815000 |
Neste ponto, quase concluímos a configuração. Ainda precisamos parar os serviços AFS em execução no momento usando o comando service afs stop. O gerenciador de cache do AFS monta o volume root.afs em /afs (ou, como mencionado no arquivo /usr/vice/etc/cacheinfo).
Agora, vamos montar o volume root.cell que criamos antes.
A convenção seguida é montá-lo em um diretório chamado pelo nome da célula em /afs. Portanto, montaremos o volume root.cell em /afs/krb5afs.in.ibm.com. É muito importante desativar a opção dynroot do cliente AFS (afsd). Para isso, precisamos modificar o arquivo/etc/sysconfig/afs e definir ENABLE_DYNROOT=off. Com dynroot, o diretório /afs é preenchido com subdiretórios com os nomes de célula AFS, conforme definido no arquivo /usr/vice/etc/CellServDB. Ele não carrega o volume root.afs a partir do servidor de arquivos e vai atrás do volume root.cell diretamente, e apenas quando um usuário tenta acessar o diretório no qual o volume root.cell está montado.
Precisamos ter também o nome da região no arquivo /usr/afs/etc/krb.conf, visto que nosso nome de região é diferente do nome de célula AFS. A Listagem 23 mostra os comandos com o nome de região em /usr/afs/etc/krb.conf, iniciando os serviços AFS, configurando ACL em /afs e montando o volume root.cell.
Listagem 23. Configuração de nome de região
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
|
Agora terminamos a configuração de AFS, bem como de Kerberos 5. É bom reiniciar a máquina depois de fazer essas configurações. Depois que a máquina reiniciar, abriremos os serviços de Kerberos 5 e AFS. Nesse ponto, podemos ativar a opção dynroot para afsd, antes de iniciar os serviços de AFS.
Na Listagem 24, usamos kinit para obter um chamado do Kerberos 5 para o principal avinesh. klist mostra uma listagem de todos os chamados de Kerberos 5 em cache.
Listagem 24. Obtendo o chamado de 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
|
aklog é usado para definir tokens AFS com base em chamados de Kerberos 5. A opção -d é opcional, visto que mostra informações detalhadas sobre seu funcionamento. tokens mostra os tokens AFS mantidos no gerenciador de cache do AFS, como mostrado na Listagem 25. Quando um cliente AFS tenta acessar o espaço AFS, ele talvez tenha de fornecer os dados de token para obter acesso aos dados que está solicitando.
Listagem 25. Tokens 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 ~ # |
Este artigo explicou como entrar no amplo mundo do AFS usando OpenAFS e Kerberos 5 KDC para autenticação. Há muitos outros recursos do AFS que estão disponíveis aos administradores de sistemas há mais de 20 anos. Para obter mais informações sobre AFS e Kerberos 5, veja a seção Recursos, abaixo, e acesse os links da documentação.
Gostaria de agradecer a Anthony Todd DeSantis do Suporte e Desenvolvimento IBM AFS por tirar o tempo de sua agenda apertada para fazer comentários e dar informações úteis que aprimoraram este artigo.
Aprender
- OpenAFS.org: saiba mais sobre a versão terceirizada do IBM AFS.
- "Documentação de OpenAFS" fornece documentação para usuários e administradores.
- "For understanding Kerberos 5 Protocol" é um artigo muito bom do MIT Kerberos Consortium, escrito por Fulvio Ricciardi, que explica detalhes do protocolo Kerberos 5
- "Fácil migração para o OpenAFS com suporte ao Kerberos-5", um artigo do developerWorks, fornece uma visualização comparativa entre a configuração baseada em Kaserver e a baseada em Kerberos 5.
- "Resources on the IBM Network Authentication Service and related technologies for AIX" é um dos muitos artigos relacionados ao IBM Network Authentication Service escrito por Sandeep Ramesh Patil que é um Autor Principal do IBM developerWorks.
- Podcasts do developerWorks: escute entrevistas e explicações interessantes para desenvolvedores de software
- eventos técnicos e webcasts do developerWorks: fique atualizado em relação aos briefings ao vivo do developerWorks.
- developerWorks no Twitter: siga-nos para acompanhar as últimas notícias.
- Eventos interessantes: confira futuras conferências, exposições e webcasts interessantes para desenvolvedores de software livre IBM.
- Zona de software livre do developerWorks: você encontra informações amplas sobre instruções, ferramentas e atualizações de projetos para ajudá-lo a desenvolver com tecnologias de software livre e usá-las com produtos da IBM, bem como os nossos artigos e tutoriais mais populares.
- demos gratuitas on demand do developerWorks: Acompanhe nossas demos gratuitas e saiba mais sobre as tecnologias IBM e de software livre e funções dos produtos.
Obter produtos e tecnologias
- versão de teste do software IBM: inove o seu próximo projeto de desenvolvimento de software livre usando software para teste, disponível para download ou em DVD.
Discutir
- comunidade do developerWorks: Entre em contato com outros usuários do developerWorks e explore os blogs, fóruns, grupos e wikis voltados para desenvolvedores.
Avinesh Kumar é líder técnico da Andrew File System Team nos IBM Software Labs em Pune, Índia. Ele trabalha para a IBM há cinco anos. Seus projetos atuais incluem aprimorar o IBM AFS® para novas versões e portar o IBM AFS para versões mais recentes do RedHat Enterprise Linux. Ele trabalha com dumps e travamentos de depuração em nível de kernel e de usuário, bem como erros relatados nas plataformas Linux, AIX e Solaris. Avinesh é formado em computação pelo Departamento de Ciências da Computação da Universidade de Pune. Ele é entusiasta de Linux e passa seu tempo livre explorando o kernel Linux em sua máquina com Maverick Ubuntu.