Vous êtes sur la page 1sur 10

Configuração LDAP + SAMBA (PDC)

Autor: Camila Coelho - Data: 27 de janeiro, 2005

Sumário
1 Objetivos 2

2 Configuração do Sistema Operacional 2

3 Instalação dos serviços 2


3.1 OpenLDAP 2.2.13 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
3.2 SAMBA 3.0.10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

4 Configurando OpenLDAP 4
4.1 Configuração do “slapd” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
4.2 LDAP como um NIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

5 Gerando a base LDAP 6


5.1 Conceitos básicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
5.2 Incluindo registros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

6 Configurando o Samba 7
6.1 Samba como PDC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
6.2 Samba com LDAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
6.2.1 Pacote smbldap-tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
6.2.2 Gerenciamento de usuários . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

7 Ferramentas de gerenciamento de usuários LDAP 10

8 Referências 10
Configuração OpenLDAP com Samba3

1 Objetivos
• Configurar um servidor de dados e PDC (Personal Domain Controller )
Centralizar a base de usuários Windows e Linux em um único no servidor.
Privilegiar soluções open-source, sem custo adicional de conexões e/ou licenças.
• Ferramentas utilizadas: Samba 3.0.10 + OpenLDAP 2.2.13

2 Configuração do Sistema Operacional


Por razões de estabilidade, segurança e custo, o sistema operacional Linux 2.6.10 foi instalado no servidor
em questão. Para manter a configuração mínima, sem recursos adicionais e desnecessários, a distribuição Linux
escolhida foi o Slackware 10.1, que oferece, além da simplicidade de configuração e manutenção, a flexibilidade
de manter-se apenas o mínimo necessário no sistema.
Entretanto, os passos a seguir poderão ser efetuados em qualquer distribuição linux recente, que apresente
suporte às versões dos programas que serão necessários para atender aos requisitos determinados acima.
Os seguintes aplicativos foram instalados no sistema:

• ferramentas GNU e core (série A)


• ambiente de desenvolvimento e bibliotecas compartilhadas C/C++ (série D e L)
• ambiente de rede tcp/ip e openSSL (série N)
• aplicativos adicionais: db4 (Berkeley DB4)

A configuração do ambiente consistiu em:

• Compilação da versão do Linux atual (2.6.10) adequada ao hardware detectado no servidor


• Configuração de uma rotina simples de controle de acesso via firewall e monitoramento de logs (TODO)
• Criação de usuários/grupos:
– ldap/ldap: Serviço LDAP

3 Instalação dos serviços


As versões pré-compiladas dos programas, em geral, não atendem a todos os requisitos da aplicação. Por
exemplo, o serviço LDAP necessita do suporte ao algoritmo “crypt”, ao backend “bdb” e à autenticação TLS/SSL.
O Samba, por sua vez, necessita de suporte ao backend LDAP. Além disso, utilizar pacotes de terceiros pode
prejudicar a integridade e performance do sistema.
Sendo assim, prosseguiremos com a instalação dos aplicativos através dos fontes obtidos nos sites oficiais
destas aplicações:

• OpenLDAP: www.openldap.org

• Samba 3: www.samba.org

Além destes programas, utilizaremos alguns aplicativos adicionais que serão mencionados no decorrer do
texto.

Copyright (c) 2005 by linuxbr.org 2


Configuração OpenLDAP com Samba3

3.1 OpenLDAP 2.2.13


Após descompactar a versão atual do OpenLDAP, prossiga com a instalação da seguinte forma:

# CPPFLAGS="-I/usr/include/db4" ./configure --enable-crypt


# make depend && make
# checkinstall

Neste caso, o OpenLDAP 2.2.23 foi instalado no diretório /usr/local, com suas configurações em /usr/local/etc.
As bases serão instaladas em /usr/local/var. Altere as permissões desses diretórios para o usuário e grupo LDAP
criado inicialmente.
O diretório /usr/etc/openldap será referenciado como $LDAPCONF de agora em diante.
Vamos rodar nosso serviço de diretório através do seguinte script de inicialização:

# ! / b i n / sh
# S c r i p t para i n i c i a r o LDAP

CONFIG= " / u s r / l o c a l / e t c / openldap / s l a p d . c o n f "


PID= " / u s r / l o c a l / v a r / run "
DB= " / u s r / l o c a l / v a r / openldap−data "
ARGS= "−4 −u l d a p −g l d a p "

case " $1 " i n

s t a r t ) / u s r / l o c a l / l i b e x e c / s l a p d $ARGS −h " l d a p : / / / l d a p s : / / / " &


/ u s r / s b i n / nscd & ; ;

stop ) k i l l ‘ cat $PID / s l a p d . pid ‘ ;;

s t a t s ) echo ‘ l s − l $DB / | grep t o t a l ‘


echo " p i d o f slapd ’ ’ ; ;

* ) echo " Usage : $0 < s t a r t | s t o p | s t a t s > " ; ;

esac
Listing 1: rc.ldap

Nesse exemplo, utilizo o nscd para caching de nomes, o que requer a existência do diretório /var/run/nscd no
filesystem.

3.2 SAMBA 3.0.10


Da mesma forma, prosseguimos com a instalação do Samba (3.0.10).
O diretório /var/log/samba deve ser criado para armazenar os logs. O seguinte suporte foi adicionado na
compilação:

--with-ldap
--with-ldapsam
--with-smbmount
--enable-cups
--with-syslog
--with-logfilebase=/var/log/samba
--with-quotas
--with-acl-support

Copyright (c) 2005 by linuxbr.org 3


Configuração OpenLDAP com Samba3

Para tanto, foi utilizado o “slackbuild” original do samba. Desta forma, o samba foi instalado em /usr (–
prefix=/usr) e seus arquivos de configuração encontram-se em /etc/samba.
O script criado para iniciar/finalizar o samba é bastante simples:

# ! / b i n / sh
# S c r i p t para i n i c i a r o Samba
case $1 i n
s t a r t ) / u s r / s b i n / smbd −D
/ u s r / s b i n / nmbd −D ; ;

s t o p ) k i l l a l l smbd nmbd ; ;

* ) echo " Usage : $0 < s t a r t | stop > " ; ;


esac
Listing 2: rc.samba

4 Configurando OpenLDAP
Primeiramente, definimos a seguinte estrutura inicial para nosso diretório LDAP:

Nossa árvore neste caso inicia com um domínio (“dc”), mas poderia ser uma organização, etc. Utilizaremos
dominio.com neste exemplo. Altere de acordo com a sua configuração.

4.1 Configuração do “slapd”


Copie o samba.schema (encontrado em /usr/doc/samba-VERSION) para $LDAPCONF/schema/. Iniciamos a
configuração do $LDAPCONF/slapd.conf:

# slapd.conf
# A ordem dos esquemas é relevante
include /usr/local/etc/openldap/schema/core.schema
include /usr/local/etc/openldap/schema/cosine.schema
include /usr/local/etc/openldap/schema/inetorgperson.schema
include /usr/local/etc/openldap/schema/nis.schema
include /usr/local/etc/openldap/schema/samba.schema

# ACLs
access to attrs=sambaLMPassword,sambaNTPassword,userPassword by * read by self write
access to * by * read

# Certificados para conexão segura SSL

Copyright (c) 2005 by linuxbr.org 4


Configuração OpenLDAP com Samba3

TLSCACertificateFile /usr/local/etc/openldap/ca/cacert.pem
TLSCertificateFile /usr/local/etc/openldap/ca/servercrt.pem
TLSCertificateKeyFile /usr/local/etc/openldap/ca/serverkey.pem

# Banco de dados LDAP


database bdb
suffix "dc=dominio,dc=com"

# Definimos a conta administradora como "Manager"


rootdn "cn=Manager,dc=dominio,dc=com"

# A senha deve ser gerada com o slappaswd


rootpw {SSHA}...

# Caminho para a base de dados LDAP


directory /usr/local/var/openldap-data

# índices para otimizar acesso


index objectClass eq
index uid eq
index gidNumber eq
index uidNumber eq

Precisamos gerar os certificados, conforme indicados nas cláusulas “TLS” (Transport Layer Security ), para
permitir a conexão segura ao LDAP.
Para gerar os certificados, utilizamos o script CA.sh que acompanha o openSSL (/etc/ssl/misc), conforme
os passos abaixo:

# mkdir $LDAPCONF/ca/
# CA.sh -newca
(Programa interativo. 'Common Name' deve ser igual ao hostname)
(A seguir geramos o certificado do servidor)
# openssl req -new -nodes -keyout newreq.pem -out newreq.pem
# CA.sh -sign
(Fonte: OpenLDAP FAQ)

Mova o cacert que foi gerado para nosso diretório de certificados no LDAP, e delete o diretório demoCA/.
Renomeamos os certificados gerados para seguir o padrão sugerido (newcert.pem -> servercrt.pem, newreq ->
serverkey.pem), e removemos a permissão de leitura:

# chmod 600 /usr/etc/openldap/ca/serverkey.pem

Voltando à configuração do LDAP, vamos indicar nosso certificado e base padrão em $LDAPCONF/ldap.conf:

HOST 127.0.0.1
BASE dc=dominio,dc=com
TLS_CACERT /usr/local/etc/openldap/ca/cacert.pem

Isso encerra a configuração do daemon. Inicie-o. Verifique as respostas do servidor no log /var/log/debug.
Caso ocorra algum problema, adicione o parâmetro “-d” seguido de um nível de debug aos argumentos passados
ao slapd no script de inicialização.
Para prosseguirmos, o servidor LDAP deve estar no ar e aguardando conexões nas portas 389 (padrão) e 686
(SSL).

Copyright (c) 2005 by linuxbr.org 5


Configuração OpenLDAP com Samba3

4.2 LDAP como um NIS


O programa de login de sistemas unix-like utilizam arquivos de “name service” (libnss_files e nsswitch.conf)
para acessar a base de usuários (/etc/passwd) e proceder com a autenticação. Para configurar o LDAP como a
base padrão de usuários/grupos, utilizaremos a libnss_ldap.
Pacotes utilizados (obtidos em www.padl.com): NSS_ldap e MigrationTools. Após a instalação dos pacotes,
modificamos o /etc/ldap.conf (não confundir com a configuração do openldap, em $LDAPCONF/ldap.conf) para
indicar nossa base LDAP:

host 127.0.0.1
base dc=dominio,dc=com
rootbinddn cn=Manager,dc=dominio,dc=com

Em seguinda, alteramos nosso nsswitch.conf:

passwd files compat ldap


group files compat ldap
shadow files compat ldap

Dessa forma, sempre que um usuário logar no sistema, ele será buscado tanto em “files” quanto em “ldap”.
A partir de agora, todo o gerenciamento de usuários Unix de nossa rede será gerenciado pelo LDAP, ficando a
cargo do “files” apenas os usuários padrão do sistema (ie, root).

PS: Inicie o LDAP antes dos processos que consultam a base de usuários, do contrário levará um tempo até o timeout da consulta. No Slackware, a chamada
foi incluída no rc.M (multi-user runlevel). Na versão 10.1, há uma alteração de permissões do “utmp” no rc.S (modo single-user), o que causava lentidão no boot,
sendo assim, essa alteração foi transferida após a inicialização do LDAP.

5 Gerando a base LDAP


5.1 Conceitos básicos
As operações de adição, remoção e busca de registros na base LDAP serão apresentadas nesta seção.
Para adicionar “nós” ao LDAP, utiliza-se o padrão de arquivos LDIF. Uma forma de se entender este formato é
através de um exemplo:

# base.ldif
dn: dc=dominio, dc=com
dc: dominio
objectClass: top
objectClass: domain

O atributo “dn” (Distinguished Name) possui um significado especial, semelhante a um OID, sendo o respon-
sável por distinguir cada elemento da árvore. Os atributos “objectClass” definem a situação do registro na hierar-
quia.
O LDAP apresenta alguns atributos comuns, como “cn” (canonical name), “dc” (domain), “ou” (organization
unit), etc, para representar seus elementos. No exemplo acima, definimos o “nó” inicial com um “dc” (domínio) no
topo da hierarquia.
Para inserir o registro, podemos invocar o “slapd” diretamente para efetuar a inclusão:

# slapadd -l base.ldif

Porém, este comando não faz verificações de autorização, etc (ver manpage). Vamos utilizar para isso o
comando ldapadd:

Copyright (c) 2005 by linuxbr.org 6


Configuração OpenLDAP com Samba3

# ldapadd -D cn=Manager,dc=dominio,dc=com -W -x -f

Os parâmetros -D e -W definem os critérios de autenticação para a inclusão do registro, o -x que utilizaremos


conexão simples (sem Kerberos ou algo semelhante), e o -f indica o arquivo .LDIF. Após autenticado, o comando
efetuará a inclusão do elemento em questão.
Para remover o registro, utilizamos o ldapdelete, que também não é interativo. Após efetuar a conexão, não
haverá nenhuma saída, exceto se ocorrer um erro (por exemplo, Invalid credentials). No prompt indicamos o “dn”
que desejamos excluir, e para sair, CTRL+D. Para mais informações, consulte a manpage.
Para buscar um registro, podemos listar toda a árvore (com slapcat ou ldapsearch -x), ou utilizar filtros.

# ldapsearch -x -LLL "dc=dominio"

Não autenticamos para fazer a busca pois nossa ACL permite a busca por qualquer usuário. Altere isso de
forma apropriada aos seus requisitos.
Ao incluir usuários com senhas, as senhas podem ser geradas pelo “slappasswd”, sendo que o algoritmo
utilizado pelo Unix em geral é o CRYPT. As senhas do Windows, por sua vez, utilizam um esquema de dois
“hashes” gerados por DES e MD4, e são em resumo, incompatíveis.
As bases do “bdb” são armazenadas no diretório openldap-data. Basta apagar este diretório para reiniciar a
base do zero, sendo importante incluí-lo em procedimentos de backup.
Isso resume o funcionamento básico do LDAP.

5.2 Incluindo registros


O pacote “migration tools” é um conjunto de scripts para a exportação dos usuários/grupos originais do sistema
(/etc/passwd, etc) no formato LDIF para a inclusão na base LDAP.
Podemos indicar alguns dados no arquivo migrate_common.ph para iniciar a geração dos LDIFs com alguns
elementos pré-definidos, como o $DEFAULT_BASE (dc=dominio,dc=com). Depois disso executamos os seguintes
scripts:

./migrate_base.pl > base.ldif


./migrate_passwd.pl /etc/passwd passwd.ldif
./migrate_group.pl /etc/group group.ldif

Conforme definido inicialmente, nossa “árvore” LDAP apresentará 2 nós: People (usuários) e Group (grupos).
Edite o base.ldif de forma que apresente somente estes grupos. Da mesma forma, verifique o passwd.ldif e
o group.ldif para migrar apenas o que considerar necessário nessa primeira fase (ie, o grupo “users” e algum
usuário de teste).
Após gerados os arquivos LDIF, inclua-os com o “ldapadd” em nossa base.
PS: “ou” representa nossos grupos, e “uid” nossas pessoas no diretório LDAP.

6 Configurando o Samba
6.1 Samba como PDC
O Samba 3.x opera como um PDC (Primary Domain Controller ) para redes Windows. Para isso, basta alterar
a configuração do samba conforme exemplo que segue (/etc/samba/smb.conf):

netbios name = serverlx # NOME NETBIOS


workgroup = linuxpdc # NOME DOMINIO
server string = Samba PDC Server
security = user

Copyright (c) 2005 by linuxbr.org 7


Configuração OpenLDAP com Samba3

domain master = yes # aqui ativamos o PDC


domain logons = yes
time server = yes
logon drive = S:
hosts allow = 192.168.0. 127.
log file = /var/log/samba/\%m.log # separar o log
unix charset = iso8859-1
display charset = cp850
veto files = /*.mp3/*.wmv/*.wma/*.avi/*.mpg/

Descomente também as linhas referentes ao netlogon, referindo-se ao local onde os scripts de logon serão
armazenados.
O controle de acesso é feito através do cadastro do nome das máquinas e da admissão do usuário pelo
“root”. O Domain Admin por padrão é o usuário root, cadastrado com smbpasswd root, porém, utilizaremos
outros comandos compatíveis com o LDAP para gerenciar nossa base de usuários.
Teste a configuração com o comando testparm. Ele deverá retornar: Server role: ROLE_DOMAIN_PDC.

6.2 Samba com LDAP


Por padrão, o Samba utiliza uma base flat-file para armazenar os dados das contas, além de necessitar
que a mesma conta exista no Unix. Para centralizar a base de usuários Unix e Windows, utilizaremos nossa
configuração LDAP. Altere o “smb.conf”, incluindo:

passdb backend = ldapsam:ldaps://127.0.0.1/


ldap admin dn = cn=Manager,dc=dominio,dc=com
ldap suffix = dc=dominio,dc=com
ldap group suffix = ou=Group
ldap user suffix = ou=People
ldap machine suffix = ou=Machine

Para fins de legibilidade, as máquinas serão adicionadas em uma organization unit separada. Depois de
adicionadas as entradas referentes ao LDAP, reinicie o serviço:

killall -HUP nmbd

Nosso Samba está pronto para comunicar-se com o OpenLDAP.


Finalmente, configure a senha do Manager no Samba:

smbpasswd -w NOVASENHA

Associe também uma senha Samba ao nosso usuário “root”, que será o Domain Admin do PDC, através do
comando:

# smbpasswd -a root

Observe que o único arquivo encontrado no diretório de bases do samba (/etc/samba/private) é o secrets.tdb,
que deverá apresentar permissões restritivas. Isso demonstra que a base de usuários do samba realmente será
obtida do LDAP.

6.2.1 Pacote smbldap-tools

Para gerenciar os usuários no Samba, utilizaremos os scripts smbldap-tools (www.idealx.org).

Copyright (c) 2005 by linuxbr.org 8


Configuração OpenLDAP com Samba3

A instalação dos scripts deve ser feita da seguinte forma. Copie os scripts (smbldap-*) para o /usr/local/s-
bin. Crie um diretório /etc/smbldap-tools/ para armazenar os arquivos de configuração (smbldap.conf e sm-
bldap_bind.conf). Altere a permissão (600) para este último. Copie também o “.pm” para o diretório de módulos
Perl, e edite os caminhos para os arquivos de configuração que constam nas variáveis globais deste arquivo.
O smbldap.conf deve ser configurado de acordo com nossas definições anteriores:

SID (obtido com ``net getlocalsid'')


suffix="dc=dominio,dc=com"
usersdn="ou=People,\${suffix}"
computersdn="ou=Machine,\${suffix}"
groupsdn="ou=Group,\${suffix}"
hash-encrypt="CRYPT"
userSmbHome=""
userProfile=""

O comando net, que acompanha o Samba 3, é uma versão do comando “net” encontrado no Windows.
O “getlocalsid” deverá criar uma entrada no LDAP referente ao sambaDomainName, lembrando que SIDs no
Windows são equivalentes aos UIDs (salvo o fato de serem muito mais complexos de se gerar e gerenciar).
Observe também que o arquivo smbldap.conf menciona um “cn” chamado NextFreeUnixId, responsável pela
geração de IDs sequenciais. Ele deverá ser gerado pelo smbldap-populate, que executaremos a seguir. Configure
também o smbldap_bind.conf com os “dn”s corretos, e como a senha utilizada pelo smbldap-tools deverá ser
definida nesse arquivo, configure persmissões restritivas.
Como os scripts smbldap-tools dependem de diversos módulos Perl, configure o acesso ao CPAN:

# FTP_PASSIVE=1 perl -MCPAN -e shell

O script cpan2tgz, encontrado em software.jaos.org pode auxiliar na manutenção dos módulos Perl. No
caso, foi detectada a ausência dos seguintes módulos no sistema, e o cpan2tgz responsabilizou-se por gerar os
pacotes de cada um deles:

# cpan2tgz Net::LDAP
# cpan2tgz Crypt::SmbHash
# cpan2tgz Digest::SHA1

Os pacotes serão gerados em /usr/src. Utilize os comandos “show” do smbldap-tools para certificar-se de
que os scripts estão corretamente instalados, caso contrário, podem ocorrer erros inesperados.
A seguir, vamos popular a base com o comando smbldap-populate:

# smbldap-populate

Como esse script gera a base do zero, e já possuimos os nós “dc” e “ou”, serão apresentadas mensagens
informando deste fato. Basicamente, ele adicionará os usuários e grupos globais do Windows no LDAP.
Antes de efetuarmos os testes, reinicie o servidor LDAP.
Com o comando slapcat | grep -i idmap, verifique se o grupo Idmap foi incluído. Verificamos a existência
de uma conta “Administrator” com o comando getent group | grep Administrator. O UID deve ser 0. Verifique
também os grupos de domínio (getent group | grep Domain). Verifique os IDs destes grupos. Usuários com
GID 512 serão administradores em suas máquinas.
Se tudo ocorrer ok, e os módulos perl estiverem instalados ok, podemos iniciar a criação de usuários do
Samba.

6.2.2 Gerenciamento de usuários

Inicialmente, adicione uma máquina que será autorizada no domínio:

Copyright (c) 2005 by linuxbr.org 9


Configuração OpenLDAP com Samba3

# smbldap-useradd -w MACHINENAME

A seguir, adicione um usuário:

# smbldap-useradd -m -a USERPDC
# smbldap-passwd USERPDC

Com isto, já temos um usuário válido no domínio. Também é possível adicionar grupos ao Samba para,
posteriormente, associá-los a grupos do Windows através do comando:

# smbldap-groupadd -a MYGROUP

Com o comando net groupmap list, verifique a associação de um SID ao nosso grupo. Dessa forma, ele será
visível às máquinas Windows.
Nas máquinas Windows, altere o domínio para LINUXPDC (definido em nosso smb.conf), e digite a senha
de “root” associada ao Domain Admin, para permitir o ingresso da máquina previamente cadastrada no LDAP.
Naturalmente, será preciso reiniciar o Windows, o que possibilitará o logon no domínio em questão com o usuário
“USERPDC”, criado acima.
Isso encerra a configuração básica de nosso serviço. Nesse momento, nossas máquinas Windows, prévia-
mente cadastradas no samba, já deverão autenticar normalmente em nosso domínio “PDC”. A partir daí podemos
definir as políticas de acesso desses usuários, seus perfis, etc, o que está fora do escopo deste documento.

7 Ferramentas de gerenciamento de usuários LDAP


Nesse artigo, apresentamos a criação de usuários Unix através de templates LDIF, gerados pelo script Migrate-
Tools. Para a criação de usuários Samba, a ferramenta smbldap-useradd demonstrou-se bastante eficiente.
Com esse conjunto de ferramentas em modo texto, podemos criar/alterar/deletar e buscar usuários na base LDAP.
Para facilitar a administração de nosso servidor LDAP, existem algumas ferramentas de gerenciamento amigáveis
(e gratuitas) em modo gráfico, destacando-se:

• phpldapadmin: ferramenta Web, obtida em sourceforge.net.


• LDAP Browser / Editor: ferramenta Java com suporte a conexão segura, obtida em http://snipurl.com/
ldapbrowser.

Para a utilização da primeira, é preciso que o PHP suporte conexões LDAP. O phpldapadmin apresenta uma
interface amigável e completa, além de suporte total ao gerenciamento de usuários no Samba 3.
O LDAP Browser, por sua vez, não precisa de nenhuma configuração adicional. O LDAP Browser demostrou-
se simples e funcional, e apesar de não possuir as facilidades do primeiro, suporta conexões seguras e a impor-
tação/exportação de arquivos LDIF.

8 Referências
• Documentação do site www.ldap.org.brLDAP-Brasil
• Using an LDAP Directory for Samba Authentication (fonte: IBM developerworks)
• Smbldap-tools User Manual (fonte: idealx.org)
• SlackwareZine (.com.br)

Powered by LATEX 2ε

Copyright (c) 2005 by linuxbr.org 10