Wildfly/JBoss RBAC e LDAP

 

Jboss O que é Jboss Separador Menor O que é Wildfly Separador Menor Servidor Java EE Separador Menor Wildfly x Jboss Separador Menor TomCat x Jboss Separador MenorAdministração RBAC Separador MenorLaboratório Separador Maior

Segurança Wildfly: Administração

Em versões anteriores do servidor de aplicação JBoss, ter acesso através de um login válido nas ferramentas de administração era o suficiente para ser um super-usuário. Desde o JBoss AS 7, é possível usar o modelo de administração baseado em domínios de gerenciamento. Esse modelo de gerenciamento permite que os administradores possam efetuar modificações, configurar e gerenciar instâncias, grupos de instâncias, instalar aplicações e uma série de tarefas de administração de servidores de aplicação.

Mas só no Wildfly, um modelo de permissão granular de poderes de administração foi introduzido de forma a diferenciar grupos e administradores com acesso as ferramentas de administração.Isso não é preocupante dentro do dia a dia tranquilo de uma empresa em que todas as pessoas são responsáveis e solidárias na resolução de problemas e gestão de cenários de cris, contudo, em grande parte das empresas, é fundamental que atividades de TI sejam controladas e que perguntas simples como:

  • Quem pode fazer determinado procedimento? ou Fulano pode fazer isso?  Todos que puderem efetuar login nas ferramentas de administração.

 A resposta ideal seria: O grupo de administradores registrado como Deployers pode efetuar deployers. Ou, Fulano não pode fazer isso, pois ele não faz parte do grupo de deployers, mas faz parte do grupo de monitores.

  • Quem fez determinado procedimento? ou Fulano fez isso?  é necessário que as ferramentas de administração registrem as atividades de alguma forma.

 Essas perguntas precisam de repostas que são fornecidas pelo uso correto das ferramentas de administração e pela delegação correta de poderes aos administradores.

     O Wildfly introduz o conceito de RBAC (Controle de acesso baseado em papéis, Role Based Access Control) nas ferramentas de administração, que permite delegação granular de poderes aos administradores permitindo que grupos ou pessoas tenham acesso suficiente para operações delegadas ao seu dia a dia. Assim, administradores podem ser divididos pelas tarefas que podem executar.

Para o registro de atividades de administração, o Wildfly introduz o log de auditoria. O log de auditoria registra todas as atividades feitas nas ferramentas de administração web e no console de administração em CLI. É possível configurar o log de autoria para envio remoto de logs para servidores dedicados de log. Isso pode impedir que administradores com acesso local ao servidor Jboss possam acessar ou modificar os logs de auditoria.  

 O log de auditoria pode ser ligado usando o jboss-cli.

/core-service=management/access=audit/logger=audit-log:write                                                                                                                                                                           -attribute(name=enabled,value=false)

Um exemplo de trecho de log para um acesso local sem senha (acesso local) e sem RBAC

2014-12-31 00:00:00 - {

...

"user" : "$local",

...

"success" : true,

...

"subsystem" : "logging"

...

"operation" : "write-attribute",

"name" : "level",

"value" : "DEBUG",

E a mesma operação logada com usuário administrator

2014-12-31 00:00:00 - {

...

"user" : "administrator",

...

"success" : true,

"ops" : [{

...

"subsystem" : "logging"

...

"operation" : "write-attribute",

"name" : "level",

"value" : "WARN",

...

E a mesma operação logada com usuário monitor (neste caso uma tentativa sem sucesso de modificar o nível de log, já que monitor não tem permissões para modificar configurações)

2014-12-31 00:00:00 - {

"user" : "monitor",

"success" : false,

"ops" : [{

...

"subsystem" : "logging"

...

"operation" : "write-attribute",

"name" : "level",

"value" : "WARN",

...

Além disso, o RBAC Wildfly pode ser integrado a serviços de diretórios LDAP permitindo que haja inserção e remoção de usuários e papéis integrados em ferramentas corporativas de provisionamento e desprovisionamento de usuários. Desta forma, os papéis e logins dos administradores não precisam ser administrados em cada host Wildfly.

O RBAC precisa ser ligado no Wildfly, por padrão é usado o modelo simples de separação de administradores (quem tem login é administrador). O RBAC pode ser ligado (modo standalone) usando o comando em jboss-cli:

/core-service=management/access=authorization:write-attribute(name=provider,value=rbac)

Aliado ao RBAC, o uso de usuários e papeis em serviços de diretórios LDAP é necessidade em grande parte das empresas. Para isso, é necessário configurar um Realm de administração Wildfly para usar LDAP e para o mapeamento de grupos a partir da árvore do serviço de diretórios.

Além disso, os papeis pré-definidos no Wildfly devem ser mapeados para grupos dentro do serviço de diretórios. Primeiro os papéis conhecidos pelo Wildfly são adicionados à configuração usando jboss-cli:

/core-service=management/access=authorization/role-mapping=Monitor:add()

/core-service=management/access=authorization/role-mapping=Operator:add()

/core-service=management/access=authorization/role-mapping=Maintainer:add()

/core-service=management/access=authorization/role-mapping=Deployer:add()

/core-service=management/access=authorization/role-mapping=Administrator:add()

/core-service=management/access=authorization/role-mapping=Auditor:add()

 

O papel SuperUser é o único já existente e não necessita de comandos adicionais.

Os papéis acima são então mapeados a grupos existentes no serviço de diretórios novamente usando o jboss-cli

/core-service=management/access=authorization/role-mapping=SuperUser/include=grp-superusers:add(name=SuperUsers,type=GROUP)

/core-service=management/access=authorization/role-mapping=Monitor/include=grp-monitors:add(name=Monitors,type=GROUP)

/core-service=management/access=authorization/role-mapping=Operator/include=grp-operators:add(name=Operators,type=GROUP)

/core-service=management/access=authorization/role-mapping=Maintainer/include=grp-maintainers:add(name=Maintainers,type=GROUP)

/core-service=management/access=authorization/role-mapping=Deployer/include=grp-deployers:add(name=Deployers,type=GROUP)

/core-service=management/access=authorization/role-mapping=Administrator/include=grp-administrators:add(name=Administrators,type=GROUP)

/core-service=management/access=authorization/role-mapping=Auditor/include=grp-auditors:add(name=Auditors,type=GROUP)

 

Então, configura-se a conexão com o servidor LDAP e parâmetros de localização de usuários e grupos dentro da árvore LDAP.

/core-service=management/ldap-connection=LDAPCentral:add(url="ldap://127.0.0.1:10389")

/core-service=management/security-realm=Usuarios-e-Grupos-LDAP:add(map-groups-to-roles=true)

/core-service=management/security-realm=Usuarios-e-Grupos-LDAP/authentication=ldap:add(base-dn="ou=People,dc=4linux,dc=com,dc=br",connection=LDAPCentral,username-attribute=uid)

/core-service=management/security-realm=Usuarios-e-Grupos-LDAP/authorization=ldap:add(connection=LDAPCentral)

/core-service=management/security-realm=Usuarios-e-Grupos-LDAP/authorization=ldap/username-to-dn=username-filter:add(attribute=uid,base-dn="ou=people,dc=4linux,dc=com,dc=br",recursive=false,user-dn-attribute=dn)

/core-service=management/security-realm=Usuarios-e-Grupos-LDAP/authorization=ldap/username-to-dn=username-filter:write-attribute(name=force,value=false)

/core-service=management/security-realm=Usuarios-e-Grupos-LDAP/authorization=ldap/group-search=group-to-principal:add(base-dn="ou=Roles,dc=4linux,dc=com,dc=br",group-name-attribute=cn,group-name="SIMPLE",group-dn-attribute="dn",iterative="true",search-by=DISTINGUISHED_NAME,recursive=true,principal-attribute=member)

E finalmente, modifica-se a interface de gerenciamento para usar o Realm de segurança em LDAP criado:

/core-service=management/management-interface=http-interface:write-attribute(name=security-realm,value=Usuarios-e-Grupos-LDAP)

Veja o Laboratório 

Saiba mais sobre o curso de Jboss/ Wildfly da 4Linux        Conheça os serviços de suporte Jboss/ Wildfly da 4Linux       Leia mais sobre os cases de sucesso com Jboss