Guia de Segurança
Para uso com a Plataforma do Aplicativo JBoss Enterprise 6
Resumo
Parte I. Segurança para o JBoss Enterprise Application Plataform 6 Copiar o linkLink copiado para a área de transferência!
Capítulo 1. Introdução Copiar o linkLink copiado para a área de transferência!
1.1. Red Hat JBoss Enterprise Application Platform 6 (JBoss EAP 6) Copiar o linkLink copiado para a área de transferência!
1.2. Segurança do JBoss Enterprise Application Platform 6 Copiar o linkLink copiado para a área de transferência!
Capítulo 2. Visão Geral da Segurança Copiar o linkLink copiado para a área de transferência!
2.1. Segurança Declarativa Copiar o linkLink copiado para a área de transferência!
2.1.1. Visão Geral do Java EE Declarative Security Copiar o linkLink copiado para a área de transferência!
ejb-jar.xml e web.xml.
2.1.2. Referências de Segurança Copiar o linkLink copiado para a área de transferência!
Figura 2.1. Modelo de Referência das Funções de Segurança
role-nameType do elemento <role-name> como um argumento ao método isCallerInRole(String). Com o uso do método isCallerInRole, um componente pode verificar se é que o chamador está em uma função que foi declarada com um elemento <security-role-ref> ou <role-name>. O valor do elemento <role-name> deve ser ligado ao elemento <security-role> através do elemento <role-link>. O uso típico do isCallerInRole é executar uma verificação de segurança que não pode ser definida usando os elementos de função baseada no <method-permissions>.
Exemplo 2.1. Fragmento do descritor ejb-jar.xml
Nota
Exemplo 2.2. Fragmento do descritor web.xml
2.1.3. Identidade de Segurança Copiar o linkLink copiado para a área de transferência!
Figura 2.2. Modelo de Dados da Identidade de Segurança J2EE
EJBContext.getCallerPrincipal(). Ao invés disto, as funções de segurança do chamador são configuradas à função única especificada pelo valor do elemento <run-as> ou <role-name>.
anonymous é determinado a todas as chamadas de saída. Caso você deseje que outro principal seja associado com a chamada, você deve associar um <run-as-principal> com o bean no arquivo jboss.xml. O seguinte fragmento associa um principal nomeado internal com o RunAsBean a partir da amostra anterior.
web.xml. A seguinte amostra apresenta como determinar a função InternalRole a um servlet:
principal anônimo. O elemento <run-as-principal> está disponível no arquivo jboss-web.xml para determinar um principal específico para ir junto com a função run-as. O seguinte fragmento apresenta com associar um principal nomeado internal para o servlet acima.
2.1.4. Funções de Segurança Copiar o linkLink copiado para a área de transferência!
security-role-ref ou security-identity precisa mapear uma das funções declaradas do aplicativo. Um assembler do aplicativo define as funções de segurança lógica pela declaração dos elementos security-role. O valor role-name é um nome de função do aplicativo lógico como Administrador, Arquiteto, Gerente de Vendas, etc.
security-role é apenas usado para mapear os valores security-role-ref/role-name à função lógica que a função do componente referencia. As funções determinadas do usuário são uma função dinâmica do gerenciador de segurança do aplicativo. O JBoss não requer a definição dos elementos security-role com o objetivo de declarar as permissões do método. No entanto, a especificação dos elementos security-role continua uma prática de garantia de portabilidade pelos servidores e para a manutenção do descritor da implantação.
Exemplo 2.3. Um fragmento do descritor ejb-jar.xml que ilustra o uso do elemento security-role.
Exemplo 2.4. Uma amostra do fragmento do descritor ejb-jar.xml que ilustra o uso do elemento security-role.
2.1.5. Permissões de Método EJB Copiar o linkLink copiado para a área de transferência!
Figura 2.3. Elemento de Permissões do Método J2EE
method-permission contém um ou mais elementos filho role-name que definem as funções lógicas que são permitidas para acessar os métodos EJB conforme identificado pelos elementos filho do método. Você também pode especificar o elemento unchecked ao invés do elemento role-name para declarar que qualquer usuário autenticado pode acessar os métodos indentificados pelos elementos filho do método. Além disso, você pode declarar que ninguém deve acessar um método que possui o elemento exclude-list. Caso um EJB possu métodos que não foram declarados por uma função usando um elemento method-permission, os métods EJB possuem o default para serem excluídos do uso. Isto é equivalente ao default dos métodos no exclude-list.
Figura 2.4. Elemento do Método J2EE
<method><ejb-name>EJBNAME</ejb-name><method-name>*</method-name></method>
<method><ejb-name>EJBNAME</ejb-name><method-name>*</method-name></method>
<method><ejb-name>EJBNAME</ejb-name><method-name>METHOD</method-name></method>
<method><ejb-name>EJBNAME</ejb-name><method-name>METHOD</method-name></method>
method-intf opcional pode ser usado para diferenciar métodos com o mesmo nome e assinatura que são definidos em ambas interfaces remota e da página principal de um bean enterprise.
method-permission.
Exemplo 2.5. Um fragmento do descritor ejb-jar.xml que ilustra o uso do elemento method-permission.
2.1.6. Anotações de Segurança de Beans Enterprise Copiar o linkLink copiado para a área de transferência!
@DeclareRoles- Declara cada função de segurança declarada no código. Por favor consulte Java EE 5 Tutorial Declaring Security Roles Using Annotations para maiores informações sobre as funções de configuração.
@RolesAllowed,@PermitAlle@DenyAll- Especifica permissões de método para anotações. Refira-se ao Java EE 5 TutorialSpecifying Method Permissions Using Annotations para maiores informações sobre a configuração das permissões do método de anotação.
@RunAs- Configura a identidade de segurança propagada de um componente. Por favor consulte Java EE 5 TutorialConfiguring a Component’s Propagated Security Identity para maiores informações sobre a configuração das identidades de segurança propagadas usando anotações.
2.1.7. Restrições de Segurança do Conteúdo da Web Copiar o linkLink copiado para a área de transferência!
web.xmlsecurity-constraint.
Figura 2.5. Restrições de Segurança do Conteúdo da Web
NONE, INTEGRAL e CONFIDENTIAL. Um valor NONE significa que o aplicativo não requer qualquer garantia de transporte. Um valor INTEGRAL significa que o aplicativo requer que os dados sejam enviados entre o cliente e o servidor. O valor CONFIDENTIAL significa que o aplicativo requer que os dados sejam transmitidos numa maneira que previne outras entidades de observarem os conteúdos da transmissão. Na maioria das vezes, a presença do aviso INTEGRAL ou CONFIDENTIAL indica que o uso do SSL é solicitado.
Figura 2.6. Configuração de Login da Web
BASIC, DIGEST, FORM, e CLIENT-CERT. O elemento filho <realm-name> especifica o nome realm a ser usado no HTTP básico e autorização de resumo. O elemento filho <form-login-config> especifica o login assim como as páginas de erro que devem ser usadas no login baseado em formulário. Caso o valor <auth-method> não for FORM, então o form-login-config e seus elementos filhos serão ignorados.
/restricted do aplicativo da web requer uma função AuthorizedUser. Não há garantia de transporte requerido e o método de autenticação usado para obtenção da identidade do usuário é a autenticação HTTP BÁSICO.
Exemplo 2.6. Fragmento Descritor web.xml
2.1.8. Habilitação da Autenticação baseada no Formulário Copiar o linkLink copiado para a área de transferência!
<auth-method>FORM</auth-method> no elemento <login-config> do descritor de implantação, web.xml. As páginas de login e erro estão definidas no <login-config>, conforme abaixo:
FormAuthenticator para direcionar os usuários à página apropriada. O JBoss EAP mantém um pool de sessão do qual a informação de autenticação não precisa estar presente para cada solicitação. Quando o FormAuthenticator recebe uma solicitação, isto solicita ao org.apache.catalina.session.Manager por uma sessão existente. Caso a sessão não existir, uma nova sessão é criada. O FormAuthenticator verifica então os credenciais da sessão.
Nota
/dev/urandom (Linux) por default e aplicados hash com o MD5. As checagens são executadas na criação da ID da sessão para certificar-se de que a ID criada é única.
JSESSIONID. O seu valor é uma sexagésima sequência da ID de sessão. Esta cookie é configurada a ser não persistente. Isto significa que no lado do cliente, ela continua a ser excluída quando o navegador existir. No lado do servidor, as sessões expiram após 60 segundos de inatividade, pelas quais os objetos de sessão e a informação de credencial das mesmas são excluídas.
FormAuthenticator efetua o cache na solicitação, cria uma nova sessão se necessário e redireciona o usuário à página de login definida no login-config. (Nos códigos de amostra anteriores, a página de login é login.html.) O usuário então insere seu nome de usuário e senha no formulário HTML fornecido. O nome de usuário e senha são passados ao FormAuthenticator através da ação do formulário j_security_check.
FormAuthenticator então autentica o nome de usuário e senha em relação ao realm anexado ao contexto do aplicativo da web. No JBoss Enterprise Application Platform, o realm é JBossWebRealm. Quando a autenticação é bem sucedida, o FormAuthenticator recupera a solicitação salva do cache e redireciona o usuário a sua solicitação original.
Nota
/j_security_check e pelo menos os parâmetros j_username e j_password existirem.
2.1.9. Habilitação da Segurança Declarativa Copiar o linkLink copiado para a área de transferência!
Capítulo 3. Introdução ao JAAS Copiar o linkLink copiado para a área de transferência!
3.1. JAAS Copiar o linkLink copiado para a área de transferência!
3.2. Classes JAAS Core Copiar o linkLink copiado para a área de transferência!
Subject(javax.security.auth.Subject)
Configuration(javax.security.auth.login.Configuration)LoginContext(javax.security.auth.login.LoginContext)
Principal(java.security.Principal)Callback(javax.security.auth.callback.Callback)CallbackHandler(javax.security.auth.callback.CallbackHandler)LoginModule(javax.security.auth.spi.LoginModule)
3.3. Classes Assunto e Principal Copiar o linkLink copiado para a área de transferência!
Subject é a classe central no JAAS. O Subject representa uma informação a uma entidade única, tal como uma pessoa ou serviço. Ele abrange os principais da entidade, os credenciais públicos e os credenciais privados. O JAAS APIs usa a interface do Java 2 java.security.Principal existente para representar um principal, que é essencialmente um nome digitado.
public Set getPrincipals() {...}
public Set getPrincipals(Class c) {...}
public Set getPrincipals() {...}
public Set getPrincipals(Class c) {...}
getPrincipals() retorna todos os principais contidos no assunto. O getPrincipals(Class c) retorna apenas aqueles principais que são instâncias da classe c ou uma de suas subclasses. Um conjunto vazio é retornado caso o assunto não possua principais coincidentes.
java.security.acl.Group é uma subinterface do java.security.Principal, de forma que uma instância no conjunto de principais pode representar um agrupamento lógico de outros principais ou grupos de principais.
3.4. Autenticação do Assunto Copiar o linkLink copiado para a área de transferência!
- Um aplicativo inicia um
LoginContexte passa o nome da configuração do login e umCallbackHandlerpara popular os assuntosCallback, conforme requerido pela configuraçãoLoginModules. - O
LoginContextconsulta oConfigurationpara carregar todos osLoginModulesincluídos na configuração de login nomeada. Caso tal nome não existir, a configuraçãootheré usada como default. - O aplicativo invoca o método
LoginContext.login. - O método de login invoca todos os
LoginModules carregados. Uma vez que cadaLoginModuletenta autenticar o assunto, ele invoca o método de manuseio noCallbackHandlerassociado para obter a informação requerida pelo processo de autenticação. A informação requerida é passada ao método de manuseio na forma de um array dos assuntosCallback. No caso de êxito, osLoginModules associam os principais e credenciais relevantes ao assunto. - O
LoginContextretorna o status de autenticação ao aplicativo. O sucesso é representado por um retorno de um método de login. A falha é representada através de um LoginException sendo lançado pelo método de login. - Caso a autenticação suceder, o aplicativo recupera o assunto autenticado usando o método
LoginContext.getSubject. - Após o escopo da autenticação do assunto ser concluído, todos os principais e informações relacionadas associadas ao assunto pelo método
loginpodem ser removidas pela invocação do métodoLoginContext.logout.
LoginContext fornece os métodos básicos para autenticação dos assuntos e oferece uma maneira de desenvolver um aplicativo que é independente da tecnologia de autenticação subjacente. O LoginContext consulta um Configuration para determinar os serviços de autenticação configurados a um aplicativo em particular. As classes LoginModule representam os serviços de autenticação. Portanto, você pode plugar diferentes módulos de login num aplicativo sem a alteração do próprio aplicativo. Os seguintes códigos apresentam as etapas requeridas por um aplicativo para autenticar um assunto.
LoginModule. Isto permite o administrador a plugar diferentes tecnologias de autenticação num aplicativo. Você pode encadear diversos LoginModules para permitir que mais de uma tecnologia de autenticação participe no processo de autenticação. Por exemplo, um LoginModule pode executar uma autenticação baseada no nome/senha do usuário, enquanto que outro pode realizar a interface aos dispositivos de hardware tais como leituras de cartões smart ou autenticadores biométricos.
LoginModule é dirigido pelo objeto LoginContext em relação ao cliente que cria e emite o método de login. O processo consiste de duas fases. As etapas do processo são:
- O
LoginContextcria cada configuraçãoLoginModuleusando seu construtor sem argumento público. - Cada
LoginModuleé inicializado com uma chamada ao seu método inicializar. OSubjectargumento é garantido como não nulo. A assinatura do método inicializar é:public void initialize(Subject subject, CallbackHandler callbackHandler, Map sharedState, Map options) - O método
loginé chamado para iniciar o processo de autenticação. Por exemplo, a implementação do método pode perguntar ao usuário pelo nome e senha do usuário e então verificar a informação em relação aos dados stored num serviço de nomeação tal como o NIS ou LDAP. As implementações alternativas podem realizar a interface para cartões smart e dispositivo biométricos, ou simplesmente extrair a informação do usuário a partir de um sistema de operação subjacente. A validação da identidade do usuário por cadaLoginModuleé considerada fase 1 da autenticação JAAS. A assinatura do métodologinéboolean login() throws LoginException. UmLoginExceptionindica falha. Um valor de retorno verdadeiro indica que o método foi bem sucedido, onde um valor de retorno de falso indica que o módulo de login deve ser ignorado. - Caso a autenticação no geral
LoginContextsuceder, ocommité invocado em cadaLoginModule. Caso a fase 1 suceder para oLoginModule, o método de confirmação continua com a fase 2 e associa os principais relevantes, credenciais públicos e/ou credenciais privados com o assunto. Caso a fase 1 falhar para umLoginModule, então ocommitremove qualquer estado de autenticação stored anteriormente, tais como nomes e senhas de usuários. A assinatura do métodocommité:boolean commit() throws LoginException. A falha em concluir a fase de confirmação é indicada pelo lançamento doLoginException. Um retorno verdadeiro indica que o método sucedeu, onde um retorno falso indica que o módulo de login deve ser ignorado. - Caso a autenticação no geral
LoginContext, então o métodoaborté invocado em cadaLoginModule. O métodoabortremove ou destroi qualquer estado de autenticação criado pelos métodos inicializar ou login. A assinatura do métodoabortéboolean abort() throws LoginException. A falha em completar a faseaborté indicada pelo lançamento de umLoginException. Um retorno verdadeiro indica que o método sucedeu, onde um retorno falso indica que o módulo de login deve ser ignorado. - Com o objetivo de remover o estado de autenticação após êxito de login, o aplicativo invoca
logoutnoLoginContext. Isto em troca resulta numa invocação do métodologoutem cadaLoginModule. O métodologoutremove os principais e credenciais originalmente associados com o assunto durante a operaçãocommit. Os credenciais devem ser destruídos sob remoção. A assinatura do métodologouté:boolean logout() throws LoginException. A falha em concluir o processo de saída é indicado pelo lançamento umLoginException. Um retorno verdadeiro indica que o método sucedeu, onde um retorno de falso indica que o módulo de login deve ser ignorado.
LoginModule precisa comunicar-se com o usuário para obter a informação de autenticação, ele usa um objeto CallbackHandler. Os aplicativos implementam a interface CallbackHandler e passam isto ao LoginContext, que envia a informação de autenticação diretamente aos módulos de login subjacente.
CallbackHandler para tanto obter a entrada de usuários, tais como uma senha ou PIN do cartão smart e para suprir informação aos usuários, tais como informação de status. Permitir que o aplicativo especifique o CallbackHandler, os LoginModules subjacentes continuam independentes de maneiras diferentes dos aplicativos interagirem com os usuários. Por exemplo: uma implementação CallbackHandler para um aplicativo GUI pode exibir uma janela para solicitar a entrada do usuário. Por outro lado, uma implementação CallbackHandler para um ambiente não GUI, tal como um servidor do aplicativo, pode simplesmente obter a informação do credencial pelo uso de um API do servidor do aplicativo. A interface CallbackHandler possui um método de implementação:
void handle(Callback[] callbacks)
throws java.io.IOException,
UnsupportedCallbackException;
void handle(Callback[] callbacks)
throws java.io.IOException,
UnsupportedCallbackException;
Callback é a última classe de autenticação que vamos ver. Ela é uma interface tagging da qual diversas implementações default são fornecidas, incluindo o NameCallback e PasswordCallback usados num exemplo anterior. O LoginModule usa um Callback para solicitar informação requerida pelo mecanismo de autenticação. O LoginModules passa um array de Callbacks diretamente ao método CallbackHandler.handle durante a fase de login de autenticação. Caso um callbackhandler não entender como usar o objeto Callback passado ao método de manuseio, ele lança um UnsupportedCallbackException para anular a chamada de login.
Parte II. Segurança da Plataforma Copiar o linkLink copiado para a área de transferência!
Capítulo 4. O Subsistema de Segurança Copiar o linkLink copiado para a área de transferência!
4.1. Subsistema de Segurança Copiar o linkLink copiado para a área de transferência!
Caso o modo assunto de cópia profunda for desabilitado (por default), a cópia de uma estrutura de segurança faz uma referência à original, ao invés de copiar toda a estrutura de dados. Este comportamento é mais eficiente, porém é sujeito à corrupção de dados caso múltiplos threads com a mesma identidade limparem o assunto por um esvaziamento ou uma operação de saída.
Você pode determinar as propriedades de segurança do sistema, que é aplicado à classe java.security.Security.
O security domain é um conjunto de configurações de segurança declarativa Java Authentication and Authorization Service (JAAS) que um ou mais aplicativos usam para controlar a autenticação, autorização, auditoria e mapeamento. Os security domains estão incluídos por default: jboss-ejb-policy, jboss-web-policy e other. Você pode criar quantos security domains você venha precisar para acomodar as necessidades de seus aplicativos.
4.2. Estrutura do Subsistema de Segurança Copiar o linkLink copiado para a área de transferência!
Exemplo 4.1. Amostra do Subsistema de Segurança
<security-management>, <subject-factory> e <security-properties> não estão presentes na configuração default. Os elementos <subject-factory> e <security-properties> foram substituídos a partir do JBoss EAP 6.
4.3. Configuração do Subsistema de Segurança Copiar o linkLink copiado para a área de transferência!
4.3.1. Configuração do Subsistema de Segurança Copiar o linkLink copiado para a área de transferência!
- <security-management>
- Esta seção descreve os comportamentos de alto nível do subsistema de segurança. Cada configuração é opcional. Não é comum alterar qualquer uma dessas configurações, a não ser para o modo assunto de cópia profunda.
Expand Opções Descrição deep-copy-subject-mode Especifica se é que copiar ou conectar os tokens de segurança para uma segurança adicional do thread.authentication-manager-class-name Especifica uma classe de implementação do AuthenticationManager a ser usada.authorization-manager-class-name Especifica o nome da classe da implementação AuthorizationManager alternativa.audit-manager-class-name Especifica o nome da classe da implementação AuditManager alternativa.identity-trust-manager-class-name Especifica o nome da classe da implementação IdentityTrustManager a ser usado.mapping-manager-class-name Especifica o nome da classe da implementação MappingManager para uso. - <subject-factory>
- A criação do assunto controla a criação das instâncias do assunto. Isto pode usar o gerenciador da autenticação para verificar o chamador. O uso principal da fábrica do assunto é para os componentes JCA estabelecerem um assunto. Não é necessário modificar a fábrica do assunto.
- <security-domains>
- O elemento do contêiner que mantém os security domains múltiplos. O security domain pode conter informação sobre o módulo autenticação, autorização e auditoria assim como a autenticação JASPI e a configuração JSSE. O seu aplicativo especificaria um security domain para gerenciar sua informação de segurança.
- <security-properties>
- Contém os nomes e valores das propriedades que são configuradas na classe java.security.Security.
4.3.2. Gerenciamento de Segurança Copiar o linkLink copiado para a área de transferência!
4.3.2.1. Modo Assunto de Cópia Profunda Copiar o linkLink copiado para a área de transferência!
4.3.2.2. Habilitação do Modo Assunto de Cópia Profunda Copiar o linkLink copiado para a área de transferência!
Procedimento 4.1. Habilitação do Modo de Segurança do Modo de Segurança de Cópia profunda a partir do Console de Gerenciamento
Efetue o log ao Console de Gerenciamento.
O console de gerenciamento normalmente está disponível no URL tal como o http://127.0.0.1:9990/. Ajuste este valor para suprir suas necessidades.Managed Domain: Selecione o perfil apropriado.
Num managed domain, o subsistema de segurança é configurado por perfil e você pode habilitar ou desabilitar o modo de segurança de cópia profunda em cada, independentemente.Com o objetivo de selecionar um perfil, clique no rótulo Profiles no canto direito superior da exibição do console, e selecione o perfil que você deseja selecionar a partir da caixa de seleção Profile no canto esquerdo superior.Abra o menu de configuração Security Subsystem.
Expanda o item do menu Security na parte direita do console de gerenciamento e clique no link Security Subsystem.Modifique o valor deep-copy-subject-mode.
Clique no botão . Verifique a caixa ao lado Deep Copy Subjects: para habilitar o modo assunto de cópia profunda.
Caso você prefira usar o CLI de Gerenciamento para habilitar esta opção, use um dos seguintes comandos.
Exemplo 4.2. Managed Domain
/profile=full/subsystem=security:write-attribute(name=deep-copy-subject-mode,value=TRUE)
/profile=full/subsystem=security:write-attribute(name=deep-copy-subject-mode,value=TRUE)
Exemplo 4.3. Servidor Autônomo
/subsystem=security:write-attribute(name=deep-copy-subject-mode,value=TRUE)
/subsystem=security:write-attribute(name=deep-copy-subject-mode,value=TRUE)
4.3.3. Security Domains Copiar o linkLink copiado para a área de transferência!
4.3.3.1. Security Domains Copiar o linkLink copiado para a área de transferência!
4.3.3.2. Picketbox Copiar o linkLink copiado para a área de transferência!
- Seção 5.11.1, “Autorização” e controle de acesso
- Seção 5.14.1, “Mapeamento de Segurança” de principais, funções e atributos
Capítulo 5. Gerenciamento de Identidade PicketLink Copiar o linkLink copiado para a área de transferência!
5.1. Security Token Service (STS - Serviço Token de Segurança) Copiar o linkLink copiado para a área de transferência!
- Tipo de solicitação, tal como o Problema, Revisão e mais.
- O tipo de token.
- O tempo de vida do token emitido.
- A informação sobre o provedor de serviço que solicitou o token.
- A informação usada para criptografar o token gerado.
RequestSecurityToken. A solicitação da amostra contém dois outros elementos WS-Trust: RequestType, dos quais especificam que esta solicitação é uma solicitação de Problema e o TokenType, do qual especifica o tipo de token a ser emitido.
Exemplo 5.1. A mensagem da solicitação do token de segurança WS-Trust
Exemplo 5.2. A mensagem de resposta do token de segurança.
TokenType especifica o tipo de token emitido, enquanto o elemento RequestedSecurityToken contém o próprio token. O formato do token depende no tipo do token. O elemento Lifetime especifica quando o token foi criado e quando ele espira.
Segue abaixo as etapas pelas quais as solicitações do token de segurança são processadas:
- Um cliente envia a solicitação do token de segurança ao
PicketLinkSTS.
- O
PicketLinkSTSanalisa a mensagem de solicitação, gerando um modelo do objeto JAXB.
- O
PicketLinkSTSlê o arquivo de configuração e cria o objetoSTSConfiguration, se necessário. Então, ele obtém uma referência aoWSTrustRequestHandlera partir da configuração e delega o processamento da solicitação à instância do manuseador.
- O manuseador da solicitação usa o
STSConfigurationpara determinar os valores default (por exemplo, quando a solicitação não especifica o valor do tempo de vida do token).
- O
WSTrustRequestHandlercria oWSTrustRequestContext, configurando o objeto da solicitaçãoJAXBe o principal do chamador que recebeu a partir doPicketLinkSTS.
- O
WSTrustRequestHandlerusa oSTSConfigurationpara obter oSecurityTokenProviderque deve ser usado para processar a solicitação baseada no tipo de token que está sendo solicitado. Então, ele invoca o provedor, passando oWSTrustRequestContextconstruído conforme um parâmetro.
- A instância
SecurityTokenProviderprocessa a solicitação do token e store o token emitido no contexto da solicitação.
- O
WSTrustRequestHandlerobtém o token do contexto, criptografa caso seja necessário, e constrói o objeto de resposta WS-Trust contendo o token de segurança.
- O
PicketLinkSTSdita a resposta gerada pelo manuseador da solicitação e retorna-a ao cliente.
5.2. Configuração do PicketLink STS Copiar o linkLink copiado para a área de transferência!
picketlink-sts.xml. Segue abaixo os elementos que podem ser configurados no arquivo picketlink-sts.xml.
Nota
PicketLinkSTS: Este é o elemento root. Ele define algumas propriedades que permitem o administrador STS para determinar os seguintes valores default:STSName: Uma sequência representando o nome do serviço do token de segurança. Caso não especificado, o valorPicketLinkSTSdefalut é usado.TokenTimeout: O valor do tempo de vida do token em segundos. Caso não especificado, o valor default de 3600 (uma hora) é usado.EncryptToken: O booleano especificando se é que os tokens emitidos estão criptografados ou não. O valor default é falso.
KeyProvider: Este elemento e todos seus sub elementos são usados para configurar o keystore que são usados pelo PicketLink STS para assinar e criptografar tokens. As propriedades como a localização do keystore, sua senha e assinatura (chave privada) alias e senha são todos configurados nesta seção.RequestHandler: Este elemento especifica o nome inteiramente qualificado da implementaçãoWSTrustRequestHandlera ser usada. Caso não especificado, o defaultorg.picketlink.identity.federation.core.wstrust.StandardRequestHandlerserá usado.SecurityTokenProvider: Esta seção especifica as implementaçõesSecurityTokenProviderque devem ser usados para manusear cada tipo do token de segurança. Nesta amostra nós temos dois provedores - um manuseia tokens do tipoSpecialTokene outro que manuseia tokens do tipoStandardToken. OWSTrustRequestHandlerchama ogetProviderForTokenType(tipo de Sequência)método doSTSConfigurationpara obter uma referência aoSecurityTokenProviderapropriado.TokenTimeout: Isto é usado peloWSTrustRequestHandlerquando nenhum tempo de vida for especificado na solicitação do WS-Trust. Isto cria uma instância do tempo atual ao período de criação e expira após o número de segundos especificados de segundos.ServiceProviders: Esta seção especifica os tipos de token que devem ser usados para cada servidor de serviço (o serviço da Web que requer um token de segurança). Quando uma solicitação WS-Trust não contém o tipo de token, oWSTrustRequestHandlerdeve usar o ponto de extremidade do provedor para encontrar o tipo de token que deve ser emitido.EncryptToken: Isto é usado peloWSTrustRequestHandlerpara decidir se o token emitido deve ser criptogrado ou não. Caso verdadeiro, o public key certificate (PKC- certificado de chave público) do provedor de serviço é usado para criptografar o token.
Exemplo 5.3. Configuração PicketLink STS
5.3. Módulos de Login do PicketLink STS Copiar o linkLink copiado para a área de transferência!
Segue abaixo os tipos diferentes dos Módulos de Login STS
STSIssuingLoginModule
- Isto chama o STS configurado e solicita por um token de segurança. No caso de recebimento com êxito o
RequestedSecurityToken, a autenticação é marcada com êxito. - Uma chamada ao STS normalmente requer autenticação. Este Módulo de Login usa credenciais a partir de uma das seguintes fontes:
- O seu arquivo das propriedades, caso a opção do módulo
useOptionsCredentialsfor configurado paratrue. - Credenciais do módulo de login antigos caso a opção do módulo
password-stackingfor configurada parauseFirstPass. - A partir do
CallbackHandlerconfigurado fornecendo uma Chamada de Retorno de Nome e Senha.
- O
SamlCredentialé inserido nos credenciais públicos do Assunto caso um com a mesma Asserção já não seja presente.
STSValidatingLoginModule
- Isto chama o STS configurado e valida um token de segurança disponível.
- Uma chamada ao STS normalmente requer autenticação. Este Módulo de Login usa credenciais a partir de uma das seguintes fontes:
- O seu arquivo das propriedades, caso a opção do módulo
useOptionsCredentialsfor configurado paratrue. - Credenciais do módulo de login antigos caso a opção do módulo
password-stackingfor configurada parauseFirstPass. - A partir do
CallbackHandlerconfigurado fornecendo uma Chamada de Retorno de Nome e Senha.
- O SamlCredential é inserido nos credenciais públicos do Assunto caso um com a mesma Asserção já não seja presente.
SAML2STSLoginModule
- Este Módulo de Login fornece
ObjectCallbackaoCallbackHandlerconfigurado e espera um objetoSamlCredentialem retorno. A Asserção é validada em relação ao STS configurado. - Caso uma ID de usuário e o token SAML forem compartilhados, esta validação transpassa o Módulo de Login quando estiver no topo de outro Módulo de Login que é autenticado com êxito.
- O
SamlCredentialé inspecionado por um nome deNameIDe um atributo de função multi valorizado que é configurado respectivamente como ID e funções do usuário, sob sucesso de autenticação.
SAML2LoginModule
- Este login é usado em conjunção com outros componentes para a autenticação SAML e não executa a própria autenticação.
- O
SPRedirectFormAuthenticatorusa este módulo de login na implementação do PicketLink do SAML v2 o Perfil de Redirecionamento do HTTP. - A válvula do autenticador Tomcat executa a autenticação através da redireção do provedor de identidade e obtendo a asserção SAML.
- Este módulo de login é usado pela ID do usuário e as funções ao framework de segurança do JBoss a serem populadas no assunto JAAS.
5.4. Configuração do STSIssuingLoginModule Copiar o linkLink copiado para a área de transferência!
STSIssuingLoginModule usa o nome de usuário e senha para autenticar o usuário em relação ao STS pela recuperação do token.
Exemplo 5.4. Configuração do STSIssuingLoginModule
- alterando seus security-domain declarados
- especificando um provedor de mapeamento Principal
- especificando o provedor de mapeamento RoleGroup
5.5. Configuração do STSValidatingLoginModule Copiar o linkLink copiado para a área de transferência!
Exemplo 5.5. Configuração do STSValidatingLoginModule
5.6. SAML Web Browser Based SSO Copiar o linkLink copiado para a área de transferência!
5.6.1. SAML Web Browser Based SSO Copiar o linkLink copiado para a área de transferência!
5.6.2. Configuração SAML v2 baseada no Web SSO usando o HTTP/Redirect Binding Copiar o linkLink copiado para a área de transferência!
- Provedor de Identidade: O Provedor de Identidade é a entidade autoritativa responsável pela autenticação de um usuário final e declaração da identidade para o usuário de forma confiável para parceiros confiáveis.
- Provedor de Serviço: O Provedor de Serviço baseia-se no Provedor da Identidade para declarar informação sobre o usuário através de um credencial de usuário eletrônico, permitindo que o provedor de serviço gerencie o controle de acesso e disseminação baseada no conjunto confiável das declarações do credencial do usuário.
5.6.3. Configuração do Provedor de Identidade Copiar o linkLink copiado para a área de transferência!
Procedimento 5.1. Configuração do Identity Provider (IDP - Provedor da Identidade)
Configure a segurança do aplicativo da web para o IDP
Configure um aplicativo da web como provedor da Identidade.Nota
Com o objetivo de usar a segurança do aplicativo da web baseado no FORMULÁRIO uma vez que o fornece a habilidade de personalizar a página de login.Segue abaixo uma amostra da configuraçãoweb.xmlExemplo 5.6. Configuração web.xml para o IDP
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Configuração das Válvulas IDP
Crie um arquivocontext.xmlno diretório WEB-INF de seu aplicativo da web IDP para configuração das válvulas para o IDP. Segue abaixo uma amostra do arquivocontext.xml.Exemplo 5.7. Configuração do Arquivo context.xml para as Válvulas IDP
<context> <Valve className="org.picketlink.identity.federation.bindings.tomcat.idp.IDPWebBrowserSSOValve"/> </context>
<context> <Valve className="org.picketlink.identity.federation.bindings.tomcat.idp.IDPWebBrowserSSOValve"/> </context>Copy to Clipboard Copied! Toggle word wrap Toggle overflow Configure o Arquivo da Configuração PicketLink (picketlink.xml)
Configure opicketlink.xmlno diretório WEB-INF de seu aplicativo da web IDP. Neste arquivo de configuração você fornece o URL que é adicionado como um emissor nas declarações SAML2 de saída aos provedores de serviço e o IDP. Segue abaixo uma amostra da configuraçãopicketlink.xml.Exemplo 5.8. Configuração picketlink-idfed.xml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.6.4. Configuração do Provedor de Segurança Copiar o linkLink copiado para a área de transferência!
Procedimento 5.2. Configure o Service Provider (SP - Provedor de Segurança)
Configure a Segurança do Aplicativo da Web para o SP
O aplicativo da web pode ser configurado uma vez que um SP deve possuir uma FORMA baseada na segurança habilitada em seu arquivo web.xml.Exemplo 5.9. Configuração web.xml para o SP
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Configure a Válvula SP
Com o objetivo de configurar a válvula para o SP, crie umcontext.xmlno diretório WEB-INF de seu aplicativo da web SP.Exemplo 5.10. Configuração do Arquivo context.xml para as Válvulas IDP
<Context> <Valve className="org.jboss.identity.federation.bindings.tomcat.sp.SPRedirectSignatureFormAuthenticator" /> </Context>
<Context> <Valve className="org.jboss.identity.federation.bindings.tomcat.sp.SPRedirectSignatureFormAuthenticator" /> </Context>Copy to Clipboard Copied! Toggle word wrap Toggle overflow Configure o arquivo de configuração do PicketLink Federation (picketlink-idfed.xml)
Configure opicketlink-idfed.xmlno WEB-INF de seu aplicativo da web IDP. Neste arquivo de configuração você fornece o URL que é adicionado como um emissor nas declarações SAML2 de saída aos Provedores de Serviço e o IDP. Segue abaixo uma amostra da configuraçãopicketlink-idfed.xml.Exemplo 5.11. Configuração picketlink-idfed.xml
<PicketLinkIDP xmlns="urn:picketlink:identity-federation:config:1.0" > <IdentityURL>http://localhost:8080/idp/</IdentityURL> </PicketLinkIDP
<PicketLinkIDP xmlns="urn:picketlink:identity-federation:config:1.0" > <IdentityURL>http://localhost:8080/idp/</IdentityURL> </PicketLinkIDPCopy to Clipboard Copied! Toggle word wrap Toggle overflow Configure o arquivo PicketLink Federation Handlers (
picketlink-handlers.xml)Configure opicketlink-handlers.xmlno WEB-INF de seu aplicativo da web SP.Exemplo 5.12. Configure o picketlink-handlers.xml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Nota
Mantenha a ordem pela qual os manuseadores são listados.
5.6.5. Configuração do SAML v2 baseado no Web SSO usando o HTTP/POST Binding Copiar o linkLink copiado para a área de transferência!
Procedimento 5.3. Configuração do SAML v2 baseado no Web SSO usando o HTTP/POST Binding
Configuração do Identity Provider (IDP - Provedor de Indentidade).
As etapas para configurar o IDP para o HTTP/POST Binding são as mesmas às estapas do HTTP/Redirect Binding. Para maiores informações sobre a configuração do IDP, consulte a Seção 5.6.2, “Configuração SAML v2 baseada no Web SSO usando o HTTP/Redirect Binding”Configuração do Service Provider (SP - Provedor do Serviço)
Nota
As etapas para configurar o SP para o HTTP/POST Binding são as mesmas às etapas do HTTP/Redirect Binding, com exceção da variação no arquivocontext.xml.Segue abaixo uma amostra do arquivocontext.xmlpara as válvulas IDP.Exemplo 5.13. Configuração do Arquivo context.xml para as Válvulas IDP
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Consulte a Seção 5.6.4, “Configuração do Provedor de Segurança” para maiores informações sobre a configuração SP.
5.7. Configuração do Perfil de Saída do SAML Global Copiar o linkLink copiado para a área de transferência!
Nota
Procedimento 5.4. Configuração do Encerramento Global
Configure picketlink-handlers.xml
Adicione oSAML2LogOutHandlerno picketlink-handlers.xml.Configuração da página da web do Provedor de Serviço
Anexe oGLO=trueao link no final de sua página do provedor do serviço.Exemplo 5.14. Link ao Encerramento Global
<a href="?GLO=true">Click to Globally LogOut</a>
<a href="?GLO=true">Click to Globally LogOut</a>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.8. Integração SPNEGO e kerberos Copiar o linkLink copiado para a área de transferência!
5.8.1. Integração SPNEGO e Kerberos Copiar o linkLink copiado para a área de transferência!
Numa configuração típica, o usuário efetua o log num desktop que é orientado pelo domain do Diretório Ativo. O usuário, então, usa o navegador da web, tanto Firefox ou Internet Explorer, para acessar o aplicativo da web que usa o JBoss Negotiation com host no JBoss EAP. O navegador da web transfere a informação de assinatura ao desktop ao aplicativo da web. O JBoss EAP usa Mensagens GSS de plano de fundo com o Diretório Ativo ou qualquer Servidor Kerberos para validar o usuário. Isto habilita o usuário a atingir um seamless SSO ao aplicativo da web.
5.8.2. Desktop SSO usando SPNEGO Copiar o linkLink copiado para a área de transferência!
- Security Domain
- Propriedades do Sistema
- Aplicativo da Web
Procedimento 5.5. Configuração do Desktop SSO usando SPNEGO
Configuração do Security Domain
Configure os security domains para representar a identidade do servidor e para aplicar a segurança ao aplicativo da web.Exemplo 5.15. Configuração do Security Domain
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Determinação das Propriedades de Sistema
Caso solicitado, as propriedades de sistema podem ser determinadas no modelo domain.Exemplo 5.16. Configuração das Propriedades do Sistema
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Configuração do Aplicativo da Web
Caso não seja possível substituir os autenticadores, porém seja possível adicionar oNegotiationAuthenticatorcomo valor ao seu descritor jboss-web.xml para configurar o aplicativo da web.Nota
A válvula requer que osecurity-constraintelogin-configseja definido no arquivo web.xml uma vez que isto é usado para decidir quais recursos sofrem a segurança. No entanto, oauth-methodescolhido é substituído por este autenticador.Exemplo 5.17. Configuração do Aplicativo da Web
Copy to Clipboard Copied! Toggle word wrap Toggle overflow O aplicativo da web requer também uma dependência definida noMETA-INF/MANIFEST.MFde forma que as classes JBoss Negotiation podem ser localizadas.Exemplo 5.18. Definição de dependência no
META-INF/MANIFEST.MFCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.8.3. Configuração do JBoss Negotiation para o Microsoft Windows Domain Copiar o linkLink copiado para a área de transferência!
{hostname}, o realm é referido como {realm}, o domain é referido como {domain} e o host do servidor da instância do JBoss EAP é referido como {machine_name}.
Procedimento 5.6. Configuração do JBoss Negotiation para o Microsoft Windows Domain
Limpeza dos Mapeamentos do Serviço Principal Existente
Numa rede do Microsoft Windows alguns mapeamentos são criados automaticamente. Exclua os mapeamentos criados automaticamente para mapear a identidade do servidor ao servidor principal com o objetivo que a negociação tenha efeito corretamente. O mapeamento habilita o navegador da web no computador do cliente para confiabilidade do servidor e tentativa do SPNEGO. O computador do cliente verifica com o controlador do domain um mapeamento na forma doHTTP{hostname}.Segue abaixo as etapas para excluir os mapeamentos existentes:- Liste o mapeamento registrado com o domain para o computador usando o comando,
setspn -L {machine_name}. - Exclua os mapeamentos existentes usando os comandos,
setspn -D HTTP/{hostname} {machine_name}esetspn -D host/{hostname} {machine_name}.
- Crie uma conta de usuário do host.
Nota
Certifique-se que o nome do usuário do host é diferente do{machine_name}.O nome do usuário é referido como{user_name}no resto da sessão. Define o mapeamento entre
{user_name}e{hostname}.- Execute o seguinte comando para configurar o Service Principal Mapping (Mapeamento Principal do Serviço),
ktpass -princ HTTP/{hostname}@{realm} -pass * -mapuser {domain}\{user_name}. - Insira a senha para o nome do usuário quando solicitado.
Nota
Redefina a senha para o nome do usuário uma vez que isto é pré-requisito para exportação do keytab. - Verifique o mapeamento pela execução do seguinte comando,
setspn -L {user_name}
Exporte o keytab do usuário para o servidor pelo qual o EAP JBoss é instalado.
Execute o seguinte comando para exportar o keytab,ktab -k service.keytab -a HTTP/{hostname}@{realm}.Nota
Este comando exporta o tíquete para o HTTP/{hostname} principal ao keytabservice.keytab, que é usado para configurar o security domain do host no JBoss.- Defina o principal com security domain conforme abaixo:
<module-option name="principal">HTTP/{hostname}@{realm}</module-option><module-option name="principal">HTTP/{hostname}@{realm}</module-option>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.9. Autenticação Copiar o linkLink copiado para a área de transferência!
5.9.1. Autenticação Copiar o linkLink copiado para a área de transferência!
5.9.2. Configuração da Autenticação num Security Domain Copiar o linkLink copiado para a área de transferência!
Procedimento 5.7. Determine as Configurações da Autenticação para o Security Domain
Abra a visualização detalhada do security domain.
Clique no rótulo Profiles no lado direito superior do console de gerenciamento. Num managed domain, selecione o perfil para modificação a partir da caixa de seleção Profile na parte esquerda superior da visualização do Perfil. Clique no item do menu Security ao lado esquerdo e clique em Security Domains ao lado esquerdo e no menu expandido. Clique no link View para o security domain que você deseja editar.Navegação à configuração do subsistema de Autenticação.
Clique no rótulo Authentication no topo da visualização caso não esteja selecionado.A área de configuração é dividida em duas áreas: Login Modules e Details. O módulo de login é a unidade básica da configuração. O security domain pode incluir diversos módulos de login, cada qual pode incluir diversos atributos e opções.Adição do módulo de autenticação.
Clique no botão Add para adicionar um módulo de autenticação JAAS. Preencha os detalhes para o seu módulo. O Code é o nome da classe do módulo. O Flags controla como o módulo relata aos demais módulos de autenticação com o mesmo security domain.Explicação dos SinalizadoresA especificação do Java Enterprise 6 fornece a seguinte explicação dos sinalizadores para os módulos de segurança. A seguinte lista foi obtida a partir do http://docs.oracle.com/javase/6/docs/technotes/guides/security/jaas/JAASRefGuide.html#AppendixA. Refira-se ao documento para maiores informações.
Expand Sinalizador Detalhes solicitado O LoginModule é requerido para suceder. Caso isto suceda ou falhe, a autenticação continua a proceder na lista do LoginModule.requisito O LoginModule é requerido para ser sucedido. Caso ele seja bem sucedido, a autenticação continua a checagem da lista LoginModule. Caso isto falhe, o controle retorna imediatamente ao aplicativo (a autenticação não procede a checagem na lista LoginModule).suficiente O LoginModule não é solicitado para ser sucedido. Caso não seja sucedido, o controle retorna imediatamente ao aplicativo (a autenticação não procede a lista LoginModule). Caso isto falhe, a autenticação continua na listagem do LoginModule.opcional O LoginModule não é requerido para ser sucedido. Caso ele suceda ou falhe, a autenticação continua a proceder na lista do LoginModule.Após você adicionar o módulo, você pode modificar o seu Code ou Flags apenas clicando no botão da seção Details da tela. Certifique-se de que a tab Attributes é selecionada.Opcional: Adicione ou remova as opções do módulo.
Caso você precise adicionar opções ao seu módulo, clique na sua entrada na lista Login Modules e selecione a tab Module Options na seção Details da página. Clique no botão e forneça a chave e o valor para a opção. Use no botão para remover uma opção.
O seu módulo de autenticação é adicionado ao seu security domain e está imediatamente disponível aos aplicativos que usam o security domain.
jboss.security.security_domain
Por default, cada módulo de login definido num security domain possui a opção de módulo jboss.security.security_domain adicionada a isto automaticamente. Esta opção leva à problemas com o módulo de login que garantem que apenas opções conhecidas são definidas. O módulo de login IBM Kerberos, com.ibm.security.auth.module.Krb5LoginModule, é um destes.
true quando iniciando o JBoss EAP 6. Adicione o seguinte aos parâmetros de inicialização.
-Djboss.security.disable.secdomain.option=true
-Djboss.security.disable.secdomain.option=true
5.10. Java Authentication SPI for Containers (JASPI - SPI de Autenticação Java para Contêineres) Copiar o linkLink copiado para a área de transferência!
5.10.1. Java Authentication SPI para Segurança (JASPI) de Contêiner Copiar o linkLink copiado para a área de transferência!
5.10.2. Configuração do Java Authentication SPI for Containers (JASPI) de Segurança Copiar o linkLink copiado para a área de transferência!
<authentication-jaspi> ao seu security domain. A configuração é parecida ao módulo de autenticação default, porém os elementos do módulo de login são incluídos num elemento <login-module-stack>. A estrutura da configuração é:
Exemplo 5.19. Estrutura do elemento authentication-jaspi
EAP_HOME/domain/configuration/domain.xml ou EAP_HOME/standalone/configuration/standalone.xml.
5.11. Autorização Copiar o linkLink copiado para a área de transferência!
5.11.1. Autorização Copiar o linkLink copiado para a área de transferência!
5.11.2. Configuração da Autorização num Security Domain Copiar o linkLink copiado para a área de transferência!
Procedimento 5.8. Determinação da Autorização num Security Domain
Abra a visualização detalhada do security domain.
Clique no rótulo Profiles no lado direito superior do console de gerenciamento. Num managed domain, selecione o perfil para modificação a partir da caixa de seleção Profile na parte esquerda superior da visualização do Perfil. Clique no item do menu Security ao lado esquerdo e clique em Security Domains ao lado esquerdo e no menu expandido. Clique no link View para o security domain que você deseja editar.Navegação à configuração do subsistema de Autorização.
Clique no rótulo Authorization na parte superior da visualização caso ele não esteja selecionado.A área de configuração está dividida em duas áreas: Policies e Details. O módulo de login é uma unidade básica de configuração. O security domain pode incluir diversas políticas de autorização, cada qual pode incluir diversos atributos e opções.Adição da política.
Clique no botão Add para adicionar um módulo de política de autorização JAAS. O Code é o nome da classe do módulo. Preencha os detalhes para o seu módulo. O Flags controla como o módulo relata aos outros módulos de política da autorização com o mesmo security domain.Explicação dos SinalizadoresA especificação do Java Enterprise 6 fornece a seguinte explicação dos sinalizadores para os módulos de segurança. A seguinte lista foi obtida a partir do http://docs.oracle.com/javase/6/docs/technotes/guides/security/jaas/JAASRefGuide.html#AppendixA. Refira-se ao documento para maiores informações.
Expand Sinalizador Detalhes solicitado O LoginModule é requerido para suceder. Caso isto suceda ou falhe, a autorização continua a proceder na lista do LoginModule.requisito O LoginModule é requerido para suceder. Caso ele suceda, a autorização continua na lista do LoginModule. Caso falhe, o controle retorna imediatamente ao aplicativo (a autorização não procede na lista do LoginModule).suficiente O LoginModule não é solicitado para ser sucedido. Caso não seja sucedido, o controle retorna imediatamente ao aplicativo (a autorização não procede a lista LoginModule). Caso isto falhe, a autenticação continua na listagem do LoginModule.opcional O LoginModule não é requerido para suceder. Caso isto suceda ou falhe, a autorização continua a proceder na lista do LoginModule.Após você adicionar o módulo, você pode modificar o seu Code ou Flags apenas clicando no botão da seção Details da tela. Certifique-se de que a tab Attributes é selecionada.Opcional: Adicione, edite ou remova as opções do módulo.
Caso você precise adicionar opções ao seu módulo, clique na sua entrada na lista Login Modules e selecione a tab Module Options na seção Details da página. Clique no botão e forneça a chave e o valor para a opção. Para editar uma opção que já existe, clique na chave ou para alterá-la. Use no botão para remover uma opção.
O seu módulo de autorização é adicionado ao seu security domain e está imediatamente disponível aos aplicativos que usam o security domain.
5.12. Java Authorization Contract for Containers (JACC - Contrato de Autorização Java para Contêineres) Copiar o linkLink copiado para a área de transferência!
5.12.1. Java Authorization Contract for Containers (JACC) Copiar o linkLink copiado para a área de transferência!
5.12.2. Configuração do Java Authorization Contract for Containers (JACC) para Segurança Copiar o linkLink copiado para a área de transferência!
jboss-web.xml para inclusão dos parâmetros corretos.
Para adição do suporte JACC ao security domain, adicione a política de autorização JACC à pilha de autorização, com o conjunto do aviso required. Segue abaixo uma amostra do security domain com o suporte JACC. No entanto, o security domain é configurado no Console de Gerenciamento ou CLI de Gerenciamento, ao invés do XML diretamente.
O jboss-web.xml está localizado no diretório META-INF/ ou WEB-INF/ de sua implantação e contém substituições e uma configuração específica do JBoss adicional para o contêiner da web. Para uso do seu security domain habilitado do JACC, você precisa incluir o elemento <security-domain> e também configurar o elemento <use-jboss-authorization> para true. O seguinte aplicativo está configurado de forma apropriada para uso do security domain JACC acima.
A configuração dos EJBs para uso de um security domain e para uso do JACC difere-se dos Aplicativos da Web. Para um EJB, você pode declarar o method permissions num método ou grupo de métodos no descritor ejb-jar.xml. Com o elemento <ejb-jar>, quaisquer elementos <method-permission> contém informações sobre as funções JACC. Refira-se à configuração de amostra para maiores informações. A classe EJBMethodPermission faz parte do Java Enterprise Edition 6 API e está documentada no http://docs.oracle.com/javaee/6/api/javax/security/jacc/EJBMethodPermission.html.
Exemplo 5.20. Permissões do Método JACC no EJB
jboss-ejb3.xml no elemento filho <security>. Além do security domain, você pode especificar o run-as principal, que altera o principal do EJB sendo executado.
Exemplo 5.21. Amostra do Security Domain num EJB
5.12.3. Autorização Fina Granulada usando XACML Copiar o linkLink copiado para a área de transferência!
5.12.3.1. Autorização Fina Granulada e XACML Copiar o linkLink copiado para a área de transferência!
- PERMIT - O acesso é aprovado.
- DENY - O acesso é negado.
- INDETERMINATE - Existe um erro no PDP.
- NOTAPPLICABLE - Falta um atributo na solicitação ou não há coincidência de política.
- Biblioteca Oasis XACML v2.0
- JAXB v2.0 baseado no modelo do objeto
- Integração ExistDB para storing/recuperação das Políticas e Atributos XACML
5.12.3.2. Configuração do XACML para a Autorização Fina Granulada Copiar o linkLink copiado para a área de transferência!
Procedimento 5.9. Configure o XACML
- Realize o download da biblioteca que é um arquivo jar single.
Crie um ou mais arquivos de política para o XACML
- Sob o diretório
WEB-INF/classes, crie um diretóriopoliciespara salvar todas as suas políticas. - Crie um
policyConfig.xmlsob diretórioWEB-INF/classes.Seguem abaixo os dois tipos de conjuntos de política que podem ser definidos:- Role Permission Policy Sets (RPS - Conjuntos de Política de Permissão de Função)
- Permission Policy Sets (PPS - Conjuntos de Política de Permissão)
Exemplo 5.22. Role Permission Policy Sets (RPS - Conjuntos de Política de Permissão de Função)
FuncionárioCopy to Clipboard Copied! Toggle word wrap Toggle overflow GerenteCopy to Clipboard Copied! Toggle word wrap Toggle overflow Exemplo 5.23. Permission Policy Sets (PPS - Conjuntos de Política de Permissão)
FuncionárioCopy to Clipboard Copied! Toggle word wrap Toggle overflow GerenteCopy to Clipboard Copied! Toggle word wrap Toggle overflow Crie
Um arquivo de configuração é criado para os localizadores e os diretórios são mencionados onde as políticas são salvas.Exemplo 5.24. Arquivo de Configuração
Arquivo de Configuração apenas indicando o Diretório dos Arquivos de Política.Copy to Clipboard Copied! Toggle word wrap Toggle overflow Arquivo de Configuração definindo o Conjunto de PolíticaCopy to Clipboard Copied! Toggle word wrap Toggle overflow - Crie um Policy Decision Point (PDP - Ponto de Decisão de Política) e passe-o ao Arquivo de Configuração.
- No Policy Enforcement Point (PEP - Ponto de Reforçamento da Política), crie uma solicitação XACML baseada no contexto. Passe a solicitação XACML ao PDP para obter uma das seguintes decisões:
- Permissão
- Cancelamento
- Intermediário
- Não Aplicável
Exemplo 5.25. Acesso às Decisões
Permitir condiçãoCopy to Clipboard Copied! Toggle word wrap Toggle overflow Cancelar PermissãoCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.13. Auditoria de Segurança Copiar o linkLink copiado para a área de transferência!
5.13.1. Auditoria de Qualidade Copiar o linkLink copiado para a área de transferência!
5.13.2. Configuração de Auditoria de Segurança Copiar o linkLink copiado para a área de transferência!
Procedimento 5.10. Configuração de Auditoria de Segurança para o Security Domain
Abra a visualização detalhada do security domain.
Clique no rótulo Profiles na parte direita superior do console de gerenciamento. Num servidor autônomo, a tab é rotulada Profile. Num managed domain, selecione o perfil para modificar a partir da caixa de seleção Profile da visualização do Perfil. Clique no item do menu Security no parte esquerda e clique no Security Domains a partir do menu expandido. Clique no link View para o security domain que você deseja editar.Navegação à configuração do subsistema de Auditoria.
Clique no rótulo Audit na parte superior da visualização caso ainda não esteja selecionado.A área de configuração está dividida em duas áreas: Provider Modules e Details. O módulo provedor é a unidade básica de configuração. O security domain pode incluir diversos módulos de provedor, cada qual inclui atributos e opções.Adição de um módulo de provedor.
Clique no botão Add para adicionar um módulo de provedor. Preencha a seção Code com o nome da classe do módulo do provedor.Após a adição do módulo, você pode modificar seu Code apenas clicando no botão da seção Details da tela. Certifique-se de que a tab Attributes está selecionada.Verifique se o seu módulo está funcionando
O objetivo de um módulo de auditoria é fornecer uma maneira de monitorar os eventos no subsistema de segurança. Este monitoramento pode ser realizado por gravação de um arquivo de log, notificações de e-mail ou qualquer outro mecanismo de auditoria mensurável.Por exemplo, o JBoss EAP 6 inclui o móduloLogAuditProviderpor default. Caso habilitado seguindo as etapas acima, este módulo de auditoria grava as notificações de segurança a um arquivoaudit.logna subpastalogcom o diretórioEAP_HOME.Para verificar se as etapas acima funcionaram no contexto doLogAuditProvider, execute uma ação que é provável de efetuar o trigger numa notificação e então verifique o arquivo do log de auditoria.Para uma lista completa dos módulos do provedor de auditoria de segurança, consulte: Seção A.4, “Módulos do Fornecedor de Auditoria de Segurança Incluídos”Opcional: Adicione, edite ou remova as opções do módulo.
Caso você deseje adicionar as opções ao seu módulo, clique sua entrada na lista Modules e selecione a tab Module Options na seção Details da página. Clique no botão e forneça a chave e o valor para a opção. Para editar uma opção que já exista, remova-a clicando no rótulo e adicione-a novamente com as opções corretas clicando no botão .
O seu módulo de auditoria de segurança foi adicionado ao security domain e está imediatamente disponível aos aplicativos que usam o security domain.
5.14. Mapeamento de Segurança Copiar o linkLink copiado para a área de transferência!
5.14.1. Mapeamento de Segurança Copiar o linkLink copiado para a área de transferência!
5.14.2. Configuração do Mapeamento de Segurança num Managed Domain Copiar o linkLink copiado para a área de transferência!
Procedimento 5.11. Determinação das Configurações de Mapeamento num Security Domain
Abra a visualização detalhada do security domain.
Clique no rótulo Profiles na parte superior do console de gerenciamento. Esta tab é rotulada Profile num servidor autônomo. Num managed domain, selecione o perfil para modificar a partir da caixa de seleção Profile na parte esquerda da visualização do Perfil. Clique no item do menu Security na parte esquerda e clique no Security Domains a partir do menu expandido. Clique no link View para o security domain que você precisa editar.Navegação à configuração do subsistema de Mapeamento.
Clique no rótulo Mapping no topo da visualização caso ele não esteja selecionado.A área de configuração está divida em duas áreas: Modules e Details. O módulo de mapeamento é uma unidade básica de configuração. O security domain pode incluir diversos módulos de mapeamento, cada qual pode incluir diversos atributos e opções.Adição de um módulo.
Clique no botão Add para adicionar o módulo de mapeamento de segurança. Preencha os detalhes para o seu módulo. O Code é o nome da classe do módulo. O campo Type refere-se ao tipo de mapeamento que este módulo executa. Os valores permitidos são principal, função, atributo ou credencial.Após você ter adicionado o seu módulo, você pode modificar o seu Code ou Type apenas clicando no botão na seção Details da tela. Certifique-se que a tab Attributes é selecionada.Opcional: Adicione, edite ou remova as opções do módulo.
Caso você precise adicionar opções ao seu módulo, clique na sua entrada na lista Modules e selecione a tab Module Options na seção Details da página. Clique no botão e forneça a chave e o valor para a opção. Para editar uma opção que já existe, clique na chave do rótulo Remove para removê-la e adicione-a novamente com um novo valor. Use no botão para remover uma opção.
O módulo de mapeamento de segurança é adicionado ao security domain e está imediatamente disponível para aplicativos que usam o security domain.
5.15. Uso do Security Domain em seu Aplicativo Copiar o linkLink copiado para a área de transferência!
Para uso de um security domain em seu aplicativo, primeiro você precisa configurar o domain tanto no arquivo de configuração do servidor ou arquivo descritor do aplicativo. Então, você deve adicionar as anotações requeridas ao EJB que usam isto. Este tópico descreve as etapas solicitadas para uso de um security domain em seu aplicativo.
Procedimento 5.12. Configure o seu Aplicativo para Uso de um Security Domain
Definição do Security Domain
Você pode definir o security domain tanto no arquivo de configuração do servidor ou arquivo descritor aplicativo.Configuração do security domain no arquivo de configuração do servidor.
O security domain é configurado no subsistemasecuritydo arquivo de configuração do servidor. Caso a instância do JBoss EAP 6 estiver sendo executada num managed domain, este é o arquivodomain/configuration/domain.xml. Caso a instância do JBoss EAP 6 estiver sendo executada como um servidor autônomo, este é o arquivostandalone/configuration/standalone.xml.Os security domainsother,jboss-web-policyejboss-ejb-policysão fornecidos por default no JBoss EAP 6. A seguinte amostra XML foi copiada a partir do subsistemasecurityno arquivo de configuração do servidor.Copy to Clipboard Copied! Toggle word wrap Toggle overflow Você pode configurar os security domains adicionais conforme seja necessário usando o Console de Gerenciamento ou CLI.Configuração do security domain no arquivo do descritor do aplicativo
O security domain é especificado no elemento filho<security-domain>do elemento<jboss-web>no arquivoWEB-INF/jboss-web.xmldo aplicativo. A seguinte amostra configura o security domain nomeadomy-domain.Copy to Clipboard Copied! Toggle word wrap Toggle overflow Esta é uma das muitas configurações que você pode especificar no descritorWEB-INF/jboss-web.xml.
Adição da Anotação Requerida para o EJB
Você configura a segurança no EJB usando as anotações@SecurityDomaine@RolesAllowed. A seguinte amostra de código EJB limita o acesso ao security domainotherpor usuários na funçãoguest.Copy to Clipboard Copied! Toggle word wrap Toggle overflow Para maiores amostras de código, consulte oejb-securityquickstart do pacote do JBoss EAP 6 Quickstarts, disponível a partir do Portal do Cliente Red Hat.
Capítulo 6. Java Security Manager Copiar o linkLink copiado para a área de transferência!
6.1. Java Security Manager Copiar o linkLink copiado para a área de transferência!
O Java Security Manager é uma classe que gerencia a fronteira externa da área restrita do Java Virtual Machine (JVM), controlando como o código em execução pode interagir com os recursos fora do JVM. Quando o Java Security Manager é ativado, o Java API checa por aprovação do Java Security Manager antes de executar uma vasta variedade de operações potencialmente sem segurança.
6.2. Políticas do Java Security Manager Copiar o linkLink copiado para a área de transferência!
O conjunto de permissões definidas para diferentes classes do código. O Java Security Manager compara ações solicitadas pelos aplicativos em relação à política de segurança. Caso uma ação seja permitida pela política, o Security Manager permitirá que ação entre em vigor. Caso a ação não seja permitida pela política, o Security Manager recusará aquela ação. A política de segurança pode definir as permissões baseadas na localização do código ou na assinatura de segurança.
java.security.manager e java.security.policy do Java Virtual Machine.
6.3. Execução do JBoss EAP com o Java Security Manager Copiar o linkLink copiado para a área de transferência!
domain.sh ou standalone.sh. O seguinte procedimento irá guiá-lo através destas etapas de configuração da sua instância para execução com uma política do Java Security Manager.
Pré-requisitos
- Antes de você seguir este procedimento, você precisa gravar uma política de segurança, usando o comando
policytoolque está incluído no seu Java Development Kit (JDK). Este procedimento assume que a sua política está localizada noEAP_HOME/bin/server.policy. - O servidor domain e autônomo deve ser completamente interrompido antes de você editar quaisquer arquivos de configuração.
Procedimento 6.1. Edição dos Arquivos de Configuração
Abra o arquivo de configuração
Abra o arquivo de configuração para edição. Este arquivo está localizado em dois locais, dependendo de você estar usando um managed domain ou servidor autônomo. Este não é um arquivo executável usado para usar o servidor ou domain.Managed Domain
EAP_HOME/bin/domain.confServidor Autônomo
EAP_HOME/bin/standalone.conf
Adição das opções Java no final de cada arquivo.
Adicione a seguinte linha no final do arquivo. Você pode modificar o valor-Djava.security.policypara especificar a localização exata de sua política de segurança. Isto deve ocorrer em uma linha, sem quebra de linha. Você pode modificar o-Djava.security.debugpara efetuar o log de mais ou menos informações pela especificação do nível de depuração. O mais verboso éfailure,access,policy.JAVA_OPTS="$JAVA_OPTS -Djava.security.manager -Djboss.home.dir=$PWD/.. -Djava.security.policy==$PWD/server.policy -Djava.security.debug=failure"
JAVA_OPTS="$JAVA_OPTS -Djava.security.manager -Djboss.home.dir=$PWD/.. -Djava.security.policy==$PWD/server.policy -Djava.security.debug=failure"Copy to Clipboard Copied! Toggle word wrap Toggle overflow Início do domain ou servidor.
Inicie o domain ou servidor como o normal.
6.4. Gravação da Política do Java Security Manager Copiar o linkLink copiado para a área de transferência!
Um aplicativo chamado policytool está incluído na maioria das distribuições JRE e JDK, para o propósito de criação e edição das políticas de segurança do Java Security Manager. A informação detalhada sobre policytool é conectado a partir do http://docs.oracle.com/javase/6/docs/technotes/tools/.
A política de segurança consiste dos seguintes elementos de configuração:
- CodeBase
- A localização do URL (excluindo a informação domain e host) onde o código é originado. O parâmetro é opcional.
- SignedBy
- O alias usado no keystore para referência do assinante cuja chave privada era usada para inserir o código. Isto pode ser um valor único ou lista de vírgula separada de valores. Este parâmetro é opcional. Caso omitido, a presença ou falta de assinatura não possui impacto no Java Security Manager.
- Principals
- A lista dos pares principal_type/principal_name, que devem ser apresentados com o conjunto principal de thread sendo executados. A entrada dos Principals é opcional. Caso seja omitida, isto significa "quaisquer principals".
- Permissões
- A permissão é o acesso que é concedido ao código. Muitas permissões são fornecidas como parte da especificação do Java Enterprise Edition 6 (Java EE 6). Este documento descreve apenas as permissões adicionais que são fornecidas pelo JBoss EAP 6.
Procedimento 6.2. Configuração de uma nova Política do Java Security Manager
Inicie o
policytool.Inicie a ferramentapolicytoolem uma das seguintes manerias:Red Hat Enterprise Linux
A partir de seu GUI ou prompt de comando, execute o/usr/bin/policytool.Servidor Microsoft Windows
Execute opolicytool.exea partir do menu de Iniciação ou dobin\de sua instalação do Java. A localização pode variar.
Criação de uma política.
Selecione para criar uma política. Adicione parâmetros que você precisa, e clique em .Edição de uma política existente
Selecione a política a partir da lista das políticas existentes e selecione o botão . Edite os parâmetros conforme seja necessário.Exclusão de uma política existente.
Selecione a política da lista de políticas existentes e selecione o botão .
Permissão Específica ao JBoss EAP 6
- org.jboss.security.SecurityAssociation.getPrincipalInfo
- Fornece acesso aos métodos
org.jboss.security.SecurityAssociation.getPrincipal()egetCredential(). O risco relacionado com o uso desta permissão do período de execução é a habilidade de ver o chamador de thread atual e credenciais. - org.jboss.security.SecurityAssociation.getSubject
- Fornece o método
org.jboss.security.SecurityAssociation.getSubject(). - org.jboss.security.SecurityAssociation.setPrincipalInfo
- Fornece acesso aos métodos
org.jboss.security.SecurityAssociation.setPrincipal(),setCredential(),setSubject(),pushSubjectContext()epopSubjectContext(): O risco relacionado com o uso desta permissão do período de execução é a habilidade de determinar o chamador do thread atual e credenciais. - org.jboss.security.SecurityAssociation.setServer
- Fornece acesso ao método
org.jboss.security.SecurityAssociation.setServer. O risco relacionado com o uso desta permissão do período de execução é a habilidade de habilitar ou desabilitar o storage multi-thread do chamador principal e credencial. - org.jboss.security.SecurityAssociation.setRunAsRole
- Fornece acesso aos métodos
org.jboss.security.SecurityAssociationpushRunAsRole(),popRunAsRole(),pushRunAsIdentity()epopRunAsIdentity(). O risco relacionado com o uso desta permissão do período de execução é a habilidade de alterar o chamador atual para executar como função principal. - org.jboss.security.SecurityAssociation.accessContextInfo
- Fornece acesso aos métodos getter e setter
org.jboss.security.SecurityAssociation.accessContextInfo()eaccessContextInfo(). Isto permite que você determine e configure a informação do contexto de segurança atual. - org.jboss.naming.JndiPermission
- Fornece as permissões especiais para arquivos e diretórios num caminho de árvore JNDI especificado ou de forma recursiva a todos os subdiretórios. O JndiPermission consiste de um pathname e um conjunto de permissões válidas relacionadas ao arquivo ou diretório.As permissões disponíveis incluem:
- bind
- rebind
- unbind
- pesquisa
- lista
- listBindings
- createSubcontext
- todos
Os pathnames finalizados em/*indicam que as permissões especificadas são aplicadas a todos os arquivos e diretórios do nome do pathname. Os pathnames finalizados em/-indicam permissões recursivas em todos os arquivos e subdiretórios do pathname. Os pathnames consistentes do <<ALL BINDINGS>> de token especial coincidem com qualquer arquivos do diretório. - org.jboss.security.srp.SRPPermission
- A classe de permissão personalizada para proteção de acesso à informação SRP confidencial como sessão privada e chave privada. Essa permissão não possui quaisquer ações definidas. O destino
getSessionKey()fornece acesso à chave de sessão privada que resulta da negociação SRP. O acesso à esta chave permite a criptografia e descriptografia de mensagens que foram criptografadas à chave da sessão. - org.hibernate.secure.HibernatePermission
- A classe de permissão fornece permissões básicas para segurança das sessões Hibernate. O destino para esta propriedade é o nome de entidade. As ações disponíveis incluem:
- inserir
- excluir
- atualizar
- ler
- * (todos)
- org.jboss.metadata.spi.stack.MetaDataStackPermission
- Fornece uma classe de permissão personalizada para controle de como os chamadores interagem com a pilha metadados. As permissões disponíveis são:
- modificar
- enviar (à pilha)
- pop (fora da pilha)
- inspecionar (na pilha)
- * (todos)
- org.jboss.config.spi.ConfigurationPermission
- Garante a determinação das propriedades de configuração. Define apenas os nomes de destino e nenhuma das ações. Os destinos para esta propriedade incluem:
- <property name> (a propriedade que este código possui permissão de configurar)
- * (todas as propriedades)
- org.jboss.kernel.KernelPermission
- Garante acesso à configuração do kernel. Define apenas os nomes do destino de permissão e sem ações. Os destinos para a propriedade incluem:
- acesso (à configuração do kernel)
- configuração (implica no acesso)
- * (todos)
- org.jboss.kernel.plugins.util.KernelLocatorPermission
- Garante acesso ao kernel. Define apenas os nomes do destino de permissão e nenhuma ação. Os destinos para a propriedade incluem:
- kernel
- * (todos)
6.5. Políticas do Gerenciador de Segurança de Depuração Copiar o linkLink copiado para a área de transferência!
java.security.debug configura o nível de informação relatada de segurança. O comando java -Djava.security.debug=help produzirá resultado de ajuda sobre tudo a respeito das opções de depuração. A configuração do nível de depuração para all é útil quando solucionando problemas de uma falha relacionada com a segurança, cuja causa é totalmente desconhecida. No entanto, para uso geral isto produzirá informações demasiadas. O default geral de sensibilidade é access:failure.
Procedimento 6.3. Habilitação de depuração geral
Este procedimento irá habilitar o nível geral de sensibilidade da informação de depuração relacionada com segurança.
Adição da seguinte linha ao arquivo de configuração do servidor.- Caso a instância do JBoss EAP 6 estiver sendo executada num managed domain, a linha é adicionada ao arquivo
bin/domain.confpara o Linux ou arquivobin/domain.conf.batpara Windows. - Caso a instância do JBoss EAP 6 estiver sendo executada como um servidor autônomo, a linha é adicionada ao arquivo
bin/standalone.confpara o Linux ou arquivobin\standalone.conf.batpara o Windows.
Linux
JAVA_OPTS="$JAVA_OPTS -Djava.security.debug=access:failure"
JAVA_OPTS="$JAVA_OPTS -Djava.security.debug=access:failure"
Windows
JAVA_OPTS="%JAVA_OPTS% -Djava.security.debug=access:failure"
JAVA_OPTS="%JAVA_OPTS% -Djava.security.debug=access:failure"
O nível geral de informação de depuração relacionada com a segurança foi habilitada.
Capítulo 7. Realms de Segurança Copiar o linkLink copiado para a área de transferência!
7.1. Realms de Segurança Copiar o linkLink copiado para a área de transferência!
- O
ManagementRealmefetua o store da informação de autenticação para o API de Gerenciamento, que fornece a funcionalidade para o CLI de Gerenciamento e Console de Gerenciamento baseado na web. Ele fornece um sistema de autenticação para o próprio JBoss EAP 6. Você pode usar também oManagementRealmcaso o seu aplicativo necessitasse autenticar nas mesmas regras comerciais de uso para o API de Gerenciamento. - O
ApplicationRealmefetua o store da informação do usuário, senha e dos Aplicativos da Web e EJBs.
- O
REALM-users.propertiesefetua o store dos nomes de usuários e senhas com hash. - O
REALM-users.propertiesaplica o store ao mapeamento user-to-role.
domain/configuration/ e standalone/configuration/. Os arquivos são gravados simultaneamente pelo comando add-user.sh ou add-user.bat. Quando você executar o comando, a primeira decisão que você realiza é qual realm adicionar ao seu novo usuário.
7.2. Adição do Novo Realm de Segurança Copiar o linkLink copiado para a área de transferência!
Execute o CLI de Gerenciamento.
Inicie o comandojboss-cli.shoujboss-cli.bate conecte-se ao servidor.Crie um novo realm de segurança.
Execute o seguinte comando para criar um novo security realm nomeadoMyDomainRealmno domain controller ou o servidor autônomo./host=master/core-service=management/security-realm=MyDomainRealm:add()
/host=master/core-service=management/security-realm=MyDomainRealm:add()Copy to Clipboard Copied! Toggle word wrap Toggle overflow Crie as referências ao arquivo de propriedade que irá aplicar o store na informação a respeito da nova função.
Execute o seguinte comando para criar um direcionador ao arquivo nomeadomyfile.properties, que terá as propriedades pertencentes à nova função.Nota
O arquivo de propriedade recentemente criado não é gerenciado pelos scriptsadd-user.sheadd-user.batincluídos. Ele deve ser gerenciado externamente./host=master/core-service=management/security-realm=MyDomainRealm/authentication=properties:add(path=myfile.properties)
/host=master/core-service=management/security-realm=MyDomainRealm/authentication=properties:add(path=myfile.properties)Copy to Clipboard Copied! Toggle word wrap Toggle overflow
O seu novo realm de segurança é criado. Quando você adicionar usuários e funções a este novo realm, a informação será stored num arquivo separado aos realms de segurança default. Você pode gerenciar este novo arquivo usando os seus próprios aplicativos e procedimentos.
7.3. Adição de um usuário ao Realm de Segurança Copiar o linkLink copiado para a área de transferência!
Execute o comando
add-user.shouadd-user.bat.Abra um terminal e altere os diretórios para o diretórioEAP_HOME/bin/. Caso você esteja executando o Red Hat Enterprise Linux ou outro sistema operacional UNIX, execute oadd-user.sh. Caso você execute o Microsoft Windows Server, execute oadd-user.bat.Escolha entre adicionar o Usuário de Gerenciamento ou o Usuário do Aplicativo.
Para este procedimento, digitebpara adicionar o Usuário do Aplicativo.Escolha o realm que o usuário será adicionado.
Por default, o único realm disponível é oApplicationRealm. Caso você tenha adicionado um realm personalizado, você pode digitar o seu nome.Digite o nome do usuário, senha e funções quando solicitado.
Digite o nome do usuário, senha e funções quando solicitado. Verifique sua escolha digitandoyesou digitenopara cancelar as alterações. As alterações são gravadas a cada um dos arquivos de propriedade para o realm de segurança.
Capítulo 8. Criptografia Copiar o linkLink copiado para a área de transferência!
8.1. Criptografia Copiar o linkLink copiado para a área de transferência!
8.2. Criptografia SSL Copiar o linkLink copiado para a área de transferência!
8.3. Implementação da Criptografia SSL para o JBoss EAP 6 Web Server Copiar o linkLink copiado para a área de transferência!
Muitos aplicativos requerem uma conexão criptografada SSL entre o cliente e o servidor, também conhecida como conexão HTTPS. Você pode usar este procedimento para habilitar o HTTPS no seu servidor ou grupo do servidor.
Pré-requisitos
- Você precisa de um conjunto de chaves criptografadas SSL. Você pode comprá-las a partir do certificado de autoridade de assinatura, ou pode gerá-las usando as utilidades da linha de comando. Para gerar chaves de criptografia usando o Red Hat Enterprise Linux, refira-se à Seção 8.4, “Criação de uma Chave de Criptografia SSL e Certificado”.
- Você precisa saber os seguintes detalhes sobre o ambiente específico e montagem:
- O nome e caminho completo de seus arquivos de certificado
- A senha criptografada para suas chaves de criptografia.
- Você precisa executar o CLI de Gerenciamento e conectá-lo ao seu controlador de domain ou servidor autônomo.
Nota
/profile=default a partir do início de quaisquer comandos CLI de Gerenciamento.
Procedimento 8.1. Configuração do JBoss Web Server para uso dos HTTPS
Adicione um novo conector HTTPS.
Execute o seguinte comando CLI de Gerenciamento, alterando o perfil conforme apropriado. Isto cria um novo conector de segurança, chamadoHTTPS, que usa o esquemahttps, o binding de sockethttps(do qual o default é8443), e é configurado para possuir segurança.Exemplo 8.1. Comando CLI de Gerenciamento
/profile=default/subsystem=web/connector=HTTPS/:add(socket-binding=https,scheme=https,protocol=HTTP/1.1,secure=true)
/profile=default/subsystem=web/connector=HTTPS/:add(socket-binding=https,scheme=https,protocol=HTTP/1.1,secure=true)Copy to Clipboard Copied! Toggle word wrap Toggle overflow Configuração do certificado e chaves de criptografia SSL.
Execute os seguintes comandos para configuração de seu certificado SSL, substituindo os seus próprios valores para aos da amostra. Esta amostra assume que o keystore é copiado ao diretório da configuração do servidor, que é oEAP_HOME/domain/configuration/para o managed domain.Exemplo 8.2. Comando CLI de Gerenciamento
/profile=default/subsystem=web/connector=HTTPS/ssl=configuration:add(name=https,certificate-key-file="${jboss.server.config.dir}/keystore.jks",password=SECRET, key-alias=KEY_ALIAS)/profile=default/subsystem=web/connector=HTTPS/ssl=configuration:add(name=https,certificate-key-file="${jboss.server.config.dir}/keystore.jks",password=SECRET, key-alias=KEY_ALIAS)Copy to Clipboard Copied! Toggle word wrap Toggle overflow Para uma listagem completa de parâmetros que você pode configurar para as propriedades SSL do conector, refira-se à Seção 8.5, “Referência do Conector SSL”.Implantação de um aplicativo
A implantação de um aplicativo a um grupo do servidor que usa o perfil que você configurou. Caso você use um servidor autônomo, implante o aplicativo ao seu servidor. As solicitações HTTP solicitam que isto use a nova conexão criptografada SSL.
8.4. Criação de uma Chave de Criptografia SSL e Certificado Copiar o linkLink copiado para a área de transferência!
Pré-requisitos
- Você precisa da utilidade
keytool, que é fornecida pela implantação do Java Development Kit. O OpenJDK no Red Hat Enterprise Linux instala este comando ao/usr/bin/keytool. - O entendimento da sintaxe e parâmetros do comando
keytool. Este procedimento usa as instruções extremamente genéricas, uma vez que a discussão futura das especificações dos certificados ou do comandokeytoolestão fora do tópico desta documentação.
Procedimento 8.2. Criação de uma Chave de Criptografia SSL e Certificado
Geração de um keystore com as chaves pública e privada.
Execute o seguinte comando para gerar um keystore nomeadoserver.keystorecom o aliasjbossno seu diretório atual.A seguinte tabela descreve os parâmetros usados no comando keytool:keytool -genkeypair -alias jboss -keyalg RSA -keystore server.keystore -storepass mykeystorepass --dname "CN=jsmith,OU=Engineering,O=mycompany.com,L=Raleigh,S=NC,C=US"
keytool -genkeypair -alias jboss -keyalg RSA -keystore server.keystore -storepass mykeystorepass --dname "CN=jsmith,OU=Engineering,O=mycompany.com,L=Raleigh,S=NC,C=US"Copy to Clipboard Copied! Toggle word wrap Toggle overflow Expand Parâmetro Descrição -genkeypairO comando keytoolpara gerar um par de chave contendo uma chave pública e privada.-aliasO alias para o keystore. Este valor é arbitrário, porém o alias jbossé o default usado pelo servidor pelo servidor do JBoss Web.-keyalgO algoritmo de geração par da chave. Neste caso ele é o RSA.-keystoreO nome e a localização do arquivo keystore. A localização default é o diretório atual. O nome que você escolher é arbitrário. Neste caso, o arquivo será nomeado server.keystore.-storepassEssa senha é usada para autenticação ao keystore de forma que a chave pode ser lida. A senha deve ter pelo menos 6 caracteres e deve ser fornecida quando o keystore é acessado. Neste caso, nós usamos o mykeystorepass. Caso você omitir este parâmetro, você será solicitado a inserir o mesmo quando você executar o comando.-keypassEsta é a senha para a chave atual.Nota
Devido à limitação da implementação, ela deve ser a mesma senha à senha do store.--dnameA sequência cotada descrevendo o nome distinguido para a chave, por exemplo: "CN=jsmith,OU=Engineering,O=mycompany.com,L=Raleigh,C=US". Essa sequência é a concatenação dos seguintes componentes: CN- O nome comum ou nome do host. Caso o hostname seja "jsmith.mycompany.com", oCNserá "jsmith".OU- A unidade da organização, por exemplo: "Engineering"O- O nome da organização, por exemplo "mycompany.com".L- A localidade, por exemplo: "Raleigh" ou "London"S- O estado ou província, por exemplo: "NC". Este parâmetro é opcional.C- O código de suas letras do país, por exemplo: "US" ou "UK",
Quando você executar o comando acima, você será solicitado a seguinte informação:- Caso não tenha usado o parâmetro
-storepassna linha de comando, você será solicitado a inserir a senha keystore. Reinicie a nova senha na próxima solicitação. - Caso não tenha usado o parâmetro
-keypassna linha de comando, você será solicitado a inserir a senha chave. Pressione Enter para configurá-la no mesmo valor ao da senha keystore.
Quando o comando completar, o arquivoserver.keystoreconterá a chave única com o aliasjboss.Verifique a chave.
Verifique se a chave funciona de forma apropriada usando o seguinte comando:keytool -list -keystore server.keystore
keytool -list -keystore server.keystoreCopy to Clipboard Copied! Toggle word wrap Toggle overflow Você será solicitado a fornecer a senha keystore. Os conteúdos do keystore são exibidos (neste caso, uma chave única chamadajboss). Perceba o tipo da chavejboss, que ékeyEntry. Isto indica que o keystore contém ambas entradas privada e pública para esta chave.Geração de um certificado assinando uma solicitação.
Execute o seguinte comando para gerar um certificado assinando solicitação usando a chave pública e privada a partir do keystore que você criou na etapa 1.keytool -certreq -keyalg RSA -alias jboss -keystore server.keystore -file certreq.csr
keytool -certreq -keyalg RSA -alias jboss -keystore server.keystore -file certreq.csrCopy to Clipboard Copied! Toggle word wrap Toggle overflow Você é solicitado pela a senha com o objetivo de autenticar o keystore. O comandokeytoolentão cria um novo certificado assinando a solicitação chamadacertreq.csrno seguinte diretório de trabalho.Teste a solicitação da assinatura do certificado recentemente gerado.
Teste os conteúdos do certificado usando o seguinte comando.openssl req -in certreq.csr -noout -text
openssl req -in certreq.csr -noout -textCopy to Clipboard Copied! Toggle word wrap Toggle overflow Os detalhes do certificado são apresentados.Opcional: Submeta a solicitação de assinatura de seu certificado a um Certificate Authority (CA - Autoridade de Certificado).
O Certificate Authority (CA) pode autenticar o seu certificado de forma que isto é considerado de confiança por clientes de terceiros. O CA fornece um certificado assinado e opcionalmente um ou mais certificados intermediários.Opcional: Exporte um certificado autoassinado a partir do keystore.
Caso você precisar disto para testes ou propósitos internos, você pode usar um certificado autoassinado. Você pode expor um do keystore que você criou na etapa 1, conforme abaixo:keytool -export -alias jboss -keystore server.keystore -file server.crt
keytool -export -alias jboss -keystore server.keystore -file server.crtCopy to Clipboard Copied! Toggle word wrap Toggle overflow Você será solicitado a fornecer a senha com o objetivo de autenticar o keystore. O certificado autoassinado, nomeadoserver.crt, é criado no diretório de trabalho atual.Importe o certificado assinado, juntamente com quaisquer certificados intermediários.
Importe cada certificado na ordem que você está instruído pelo CA. Para cada certificado a ser importado, substitua ointermediate.caouserver.crtpelo nome do arquivo atual. Caso os seus certificados não forem fornecidos como arquivos separados, crie um arquivo separado para cada certificado e cole os seus conteúdos no arquivo.Nota
O seu certificado assinado e chaves do certificado são bens de valor. Tenha cuidado de como transportá-los entre os servidores.keytool -import -keystore server.keystore -alias intermediateCA -file intermediate.ca
keytool -import -keystore server.keystore -alias intermediateCA -file intermediate.caCopy to Clipboard Copied! Toggle word wrap Toggle overflow keytool -import -alias jboss -keystore server.keystore -file server.crt
keytool -import -alias jboss -keystore server.keystore -file server.crtCopy to Clipboard Copied! Toggle word wrap Toggle overflow Teste se seus certificados importaram com êxito.
Execute o seguinte comando e insira a senha keystore quando solicitada. Os conteúdos de seu keystore são exibidos e os certificados fazem parte da lista.keytool -list -keystore server.keystore
keytool -list -keystore server.keystoreCopy to Clipboard Copied! Toggle word wrap Toggle overflow
O seu certificado assinado está agora incluído no seu keystore e está pronto para ser usado para criptografar as conexões SSL, incluindo as comunicações do servidor da web HTTPS.
8.5. Referência do Conector SSL Copiar o linkLink copiado para a área de transferência!
default de perfil. Altere o nome do perfil para um que você deseje configurar, para o managed domain, ou omita a porção /profile=default do comando, para um servidor autônomo.
| Função | Descrição | Comando CLI |
|---|---|---|
| nome |
O nome de exibição do conector SSL.
|
/profile=default/subsystem=web/connector=HTTPS/ssl=configuration/:write-attribute(name=name,value=https)
|
| verify-client |
Configure para
true para solicitar uma corrente de certificado válido a partir do cliente antes de aceitar uma conexão. Configure para want caso deseje que a pilha SSL solicite um Certificado de cliente, mas não falhe caso não haja certificado algum. Determine para false (o default) para não requerer uma corrente de certificado a não ser que o cliente solicite um recurso protegido por uma restrição de segurança que usa a autenticação CLIENT-CERT.
|
/profile=default/subsystem=web/connector=HTTPS/ssl=configuration/:write-attribute(name=verify-client,value=want)
|
| verify-depth |
O número máximo de emissores de certificado intermediários verificados antes de decidir que os clientes não possuem um certificado válido. O valor default é
10.
|
/profile=default/subsystem=web/connector=HTTPS/ssl=configuration/:write-attribute(name=verify-depth,value=10)
|
| certificate-key-file |
O caminho de arquivo completo e o nome do arquivo keystore onde o certificado do servidor assinado é aplicado o store. Com a criptografia JSSE, este arquivo de certificado será apenas um, enquanto o OpenSSL usa diversos arquivos. O valor default é o arquivo
.keystore no diretório principal do usuário executando o JBoss EAP 6. Caso o seu keystoreType não usar um arquivo, determine o parâmetro para uma sequência vazia.
|
/profile=default/subsystem=web/connector=HTTPS/ssl=configuration/:write-attribute(name=certificate-key-file,value=../domain/configuration/server.keystore)
|
| certificate-file |
Caso você usar a criptografia OpenSSL, determine o valor deste parâmetro para o caminho do arquivo contendo o certificado do servidor.
|
/profile=default/subsystem=web/connector=HTTPS/ssl=configuration/:write-attribute(name=certificate-file,value=server.crt)
|
| senha |
A senha para ambos trustore e keystore. Na seguinte amostra, substitua PASSWORD por sua senha.
|
/profile=default/subsystem=web/connector=HTTPS/ssl=configuration/:write-attribute(name=password,value=PASSWORD)
|
| protocolo |
A versão do protocolo SSL para uso. Os valores suportados incluem
SSLv2, SSLv3, TLSv1, SSLv2+SSLv3 e ALL. O default é ALL.
|
/profile=default/subsystem=web/connector=HTTPS/ssl=configuration/:write-attribute(name=protocol,value=ALL)
|
| cipher-suite |
Uma lista de vírgula separada das cifras de criptografia que são permitidas. O default JVM para o JSSE contém cifras fracas que não devem ser usadas. A amostra lista apenas duas cifras possíveis, mas as amostras atuais provavelmente usarão mais.
|
/profile=default/subsystem=web/connector=HTTPS/ssl=configuration/:write-attribute(name=cipher-suite, value="TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA")
|
| key-alias |
O alias usado para o certificado do servidor no keystore. Na seguinte amostra, substitua o KEY_ALIAS pelo seu certificado alias.
|
/profile=default/subsystem=web/connector=HTTPS/ssl=configuration/:write-attribute(name=key-alias,value=KEY_ALIAS)
|
| truststore-type |
O tipo de truststore. Os diversos tipos de keystores estão disponíveis, incluindo o
PKCS12 e o default JKS do Java.
|
/profile=default/subsystem=web/connector=HTTPS/ssl=configuration/:write-attribute(name=truststore-type,value=jks)
|
| keystore-type |
O tipo do keystore. Diversos tipos de keystore estão disponíveis, incluindo o
PKCS12 e o default JKS do Java.
|
/profile=default/subsystem=web/connector=HTTPS/ssl=configuration/:write-attribute(name=keystore-type,value=jks)
|
| ca-certificate-file |
O arquivo contendo os certificados CA. Isto é o
truststoreFile, no caso do JSSE e usa a mesma senha ao do keystore. O arquivo ca-certificate-file é usado para validar os certificados do cliente.
|
/profile=default/subsystem=web/connector=HTTPS/ssl=configuration/:write-attribute(name=certificate-file,value=ca.crt)
|
| ca-certificate-password |
A senha do certificado para o
ca-certificate-file. Na seguinte amostra, substitua o MASKED_PASSWORD por sua senha mascarada.
|
/profile=default/subsystem=web/connector=HTTPS/ssl=configuration/:write-attribute(name=ca-certificate-password,value=MASKED_PASSWORD)
|
| ca-revocation-url |
O arquivo ou URL que contém a lista de revocação. Isto refere-se ao
crlFile para o JSSE ou o SSLCARevocationFile para o SSL.
|
/profile=default/subsystem=web/connector=HTTPS/ssl=configuration/:write-attribute(name=ca-revocation-url,value=ca.crl)
|
| session-cache-size |
O tamanho do SSLSession cache. Este atributo é válido para os conectores SSE apenas. O default é
0, que especifica um tamanho de cache ilimitado.
|
/profile=default/subsystem=web/connector=HTTPS/ssl=configuration/:write-attribute(name=session-cache-size,value=100)
|
| session-timeout |
O número de sessões antes de um SSLSession com cache expirar. Este atributo é válido apenas para conectores JSSE. O default é
86400 segundos, que é 24 horas.
|
/profile=default/subsystem=web/connector=HTTPS/ssl=configuration/:write-attribute(name=session-timeout,value=43200)
|
8.6. FIPS 140-2 Compliant Encryption Copiar o linkLink copiado para a área de transferência!
8.6.1. Compatibilidade com o FIPS 140-2 Copiar o linkLink copiado para a área de transferência!
8.6.2. Senhas Compatíveis com o FIPS 140-2 Copiar o linkLink copiado para a área de transferência!
- Deve possuir sete (7) caracteres de comprimento.
- Deve incluir caracteres de pelo menos três (3) das seguintes classes de caracteres:
- dígitos ASCII,
- ASCII em letra minúscula,
- ASCII em letra maiúscula,
- ASCII não-alfanumérico e
- não-ASCII.
8.6.3. Habilitação da Criptografia do FIPS 140-2 para o SSL no Red Hat Enterprise Linux 6 Copiar o linkLink copiado para a área de transferência!
Pré-requisitos
- O Red Hat Enterprise Linux 6 deve ter sido configurado para o FIPS 140-2 compatível. Refira-se ao https://access.redhat.com/knowledge/solutions/137833.
Procedimento 8.3. Habilitação da Criptografia Compatível FIPS 140-2 para o SSL
Criação do banco de dados
Crie o banco de dados NSS num diretório de propriedade do usuáriojboss.mkdir -p /usr/share/jboss-as/nssdb chown jboss /usr/share/jboss-as/nssdb modutil -create -dbdir /usr/share/jboss-as/nssdb
$ mkdir -p /usr/share/jboss-as/nssdb $ chown jboss /usr/share/jboss-as/nssdb $ modutil -create -dbdir /usr/share/jboss-as/nssdbCopy to Clipboard Copied! Toggle word wrap Toggle overflow Criação do arquivo de configuração NSS
Crie um novo arquivo do texto com o mesmo nomenss_pkcsll_fips.cfgno diretório/usr/share/jboss-ascom os seguintes conteúdos:name = nss-fips nssLibraryDirectory=/usr/lib64 nssSecmodDirectory=/usr/share/jboss-as/nssdb nssModule = fips
name = nss-fips nssLibraryDirectory=/usr/lib64 nssSecmodDirectory=/usr/share/jboss-as/nssdb nssModule = fipsCopy to Clipboard Copied! Toggle word wrap Toggle overflow O arquivo de configuração NSS deve especificar:- um nome;
- o diretório onde a biblioteca está localizada, e;
- o diretório onde o banco de dados NSS foi criado, conforme na etapa 1.
Caso você esteja executando uma versão de 64 bites do Red Hat Enterprise Linux 6, então determine onssLibraryDirectorypara/usr/lib, ao invés do/usr/lib64.Habilitação do provedor SunPKCS11
Edite o arquivo da configuraçãojava.securitypara o seu JRE ($JAVA_HOME/jre/lib/security/java.security) e adicione a seguinte linha:security.provider.1=sun.security.pkcs11.SunPKCS11 /usr/share/jboss-as/nss_pkcsll_fips.cfg
security.provider.1=sun.security.pkcs11.SunPKCS11 /usr/share/jboss-as/nss_pkcsll_fips.cfgCopy to Clipboard Copied! Toggle word wrap Toggle overflow Perceba que o arquivo de configuração especificado nesta linha é o arquivo criado na etapa 2.Quaisquer outras linhassecurity.provider.Xneste arquivo devem possuir o valor do X aumentado para um, com o objetivo de garantir que este provedor possui prioridade.Habilitação do modo FIPS para a biblioteca NSS
Execute o comandomodutilconforme apresentado para habilitar o modo FIPS:modutil -fips true -dbdir /usr/share/jboss-as/nssdb
modutil -fips true -dbdir /usr/share/jboss-as/nssdbCopy to Clipboard Copied! Toggle word wrap Toggle overflow Perceba que o diretório especificado aqui é o mesmo criado na etapa 1.Você pode obter um erro da biblioteca de segurança no pontoAltere a senha no token FIPS
Determine a senha no token FIPS usando o seguinte comando. Perceba que o nome do token deve serNSS FIPS 140-2 Certificate DB.modutil -changepw "NSS FIPS 140-2 Certificate DB" -dbdir /usr/share/jboss-as/nssdb
modutil -changepw "NSS FIPS 140-2 Certificate DB" -dbdir /usr/share/jboss-as/nssdbCopy to Clipboard Copied! Toggle word wrap Toggle overflow A senha usada para o token FIPS deve ser uma senha compatível com o FIPS.Crie um certificado usando as ferramentas NSS
Insira o seguinte comando para criar um certificado usando as ferramentas NSS.certutil -S -k rsa -n jbossweb -t "u,u,u" -x -s "CN=localhost, OU=MYOU, O=MYORG, L=MYCITY, ST=MYSTATE, C=MY" -d /usr/share/jboss-as/nssdb
certutil -S -k rsa -n jbossweb -t "u,u,u" -x -s "CN=localhost, OU=MYOU, O=MYORG, L=MYCITY, ST=MYSTATE, C=MY" -d /usr/share/jboss-as/nssdbCopy to Clipboard Copied! Toggle word wrap Toggle overflow Configure o conector HTTPS para o uso do PKCS11 keystore
Adicione o conector usando o seguinte comando no JBoss CLI Tool:/subsystem=web/connector=https/:add(socket-binding=https,scheme=https,protocol=HTTP/1.1,secure=true)
/subsystem=web/connector=https/:add(socket-binding=https,scheme=https,protocol=HTTP/1.1,secure=true)Copy to Clipboard Copied! Toggle word wrap Toggle overflow Adicione a configuração SSL com o seguinte comando, substituindo a SENHA pela senha compatível com o FIPS da etapa 5.Copy to Clipboard Copied! Toggle word wrap Toggle overflow Verificação
Verifique se o JVM pode ler a chave privada a partir do PKCS11 pela execução do seguinte comando:keytool -list -storetype pkcs11
keytool -list -storetype pkcs11Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Exemplo 8.3. A configuração XMl para o conector HTTPS usando o FIPS compatível
cipher-suite possui quebras de linha inseridas para facilitar a leitura.
Capítulo 9. Segurança de Rede Copiar o linkLink copiado para a área de transferência!
9.1. Segurança das Interfaces de Gerenciamento Copiar o linkLink copiado para a área de transferência!
Num ambiente de teste, é típico executar o JBoss EAP 6 sem camada de segurança nas interfaces de gerenciamento, compostas do Console de Gerenciamento, CLI de Gerenciamento e qualquer outra implementação do API. Isto permite alterações rápidas de configuração e desenvolvimento .
9.2. Especificação de qual Interface da Rede o JBoss EAP 6 usa Copiar o linkLink copiado para a área de transferência!
Efetuando a isolação de serviços de forma que eles sejam disponibilizados apenas aos clientes que necessitam dos mesmos para aumentar a segurança de sua rede. O JBoss EAP 6 inclui duas interfaces em suas configurações default, ambas pelas quais efetuam o bind ao endereço IP 127.0.0.1 ou localhost por default. Uma das interfaces é chamada management, e é usada pelo Management Console, CLI e API. A outra é chamada public e é usada para implantar aplicativos. Essas interfaces não são especiais ou significantes, mas são fornecidas como um ponto de iniciação.
management usa as portas 9990 e 9999 por default e a interface public usa a porta 8080 ou porta 8443 caso você use o HTTPS.
Atenção
Interrompa o JBoss EAP 6.
Interrompa o JBoss EAP 6 pelo envio de uma interrupção de maneira apropriada ao seu sistema operacional. Caso você estiver executando o JBoss EAP 6 como um aplicativo em primeiro plano, a maneira típica de realizar isto é pressionar Ctrl+C.Reinicie o JBoss EAP 6, especificando o endereço bind.
Use a opção da linha de comando-bpara iniciar o JBoss EAP 6 numa interface específica.Exemplo 9.1. Especifique a interface pública.
EAP_HOME/bin/domain.sh -b 10.1.1.1
EAP_HOME/bin/domain.sh -b 10.1.1.1Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemplo 9.2. Especifique a interface de gerenciamento.
EAP_HOME/bin/domain.sh -bmanagement=10.1.1.1
EAP_HOME/bin/domain.sh -bmanagement=10.1.1.1Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemplo 9.3. Especifique os diferentes endereços para cada interface.
EAP_HOME/bin/domain.sh -bmanagement=127.0.0.1 -b 10.1.1.1
EAP_HOME/bin/domain.sh -bmanagement=127.0.0.1 -b 10.1.1.1Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemplo 9.4. Efetue a interface pública a todas as interfaces da rede.
EAP_HOME/bin/domain.sh -b 0.0.0.0
EAP_HOME/bin/domain.sh -b 0.0.0.0Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-b para especificar o endereço IP no período de execução, portanto isto não é recomendado. Caso você decida realizar isto, certifique-se de encerrar o JBoss EAP 6 completamente antes de editar o arquivo XML.
9.3. Configuração dos Firewalls de Rede para Trabalho com o JBoss EAP 6 Copiar o linkLink copiado para a área de transferência!
A maioria dos ambientes de produção usa firewalls como parte de uma estratégia de segurança de rede. Caso você precise de instâncias do servidor múltiplas para comunicarem-se entre si ou serviços externos, tal como os servidores da web ou fonte de dados, o seu firewall precisará levar isto em consideração. Um firewall bem gerenciado apenas abre as portas que são necessárias e os protocolos de rede.
Pré-requisitos
- Determine as portas que você precisa abrir.
- É necessário um entendimento sobre o software do firewall. Este procedimento usa o comando
system-config-firewallno Red Hat Enterprise Linux 6. O Servidor do Microsoft Windows inclui um firewall interno e diversas soluções de firewall de terceiros estão disponíveis para cada plataforma.
Este procedimento configura um firewall num ambiente com as seguintes pressuposições:
- O sistema operacional é Red Hat Enterprise Linux 6.
- O JBoss EAP 6 executa no host
10.1.1.2. Opcionalmente, o servidor possui o próprio firewall. - O servidor do firewall da rede é executado no host
10.1.1.1doeth0da interface e possui umeth1de interface externa. - Você desejará um tráfego na porta 5445 (uma porta usada pelo JMS) enviado ao JBoss EAP 6. Nenhum outro tráfego deve ser permitido através do firewall da rede.
Procedimento 9.1. Gerencie os Firewalls da Rede e o JBoss EAP 6 para trabalhararem juntos
Efetue o log ao Console de Gerenciamento.
Efetue o log ao Consolde de Gerenciamento. Por default, ele executa no http://localhost:9990/console/.Determine os bindings do socket usados pelo grupo binging do socket.
Clique no rótulo Profiles no canto superior do Console de Gerenciamento. No canto esquerdo da tela uma série de menus é apresentada. O cabeçalho do menu inferior é General Configuration. Clique no item Socket Binding abaixo deste cabeçalho. A tela Socket Binding Declarations irá aparecer. Inicialmente, o grupostandard-socketsé apresentado. Você pode escolher um grupo diferente selecionando-o a partir da caixa de combinação no lado direito.Nota
Caso você use um servidor autônomo, isto possui apenas um grupo binding de socket.A lista dos nomes do socket e portas são apresentados, oito valores por página. Você pode avançar nas páginas pelo uso da flecha de navegação na parte inferior da tela.Determine as portas que você precisa abrir.
Dependendo da função de uma porta em particular e dos requerimentos de seu ambiente, algumas portas podem precisar serem abertas em seu firewall.Configure seu firewall para envio de tráfego ao JBoss EAP 6.
Execute essas etapas para configurar o seu firewall de rede para permitir tráfego na porta desejada.- Efetue o log em sua máquina de firewall e acesse a solicitação de comando como usuário root.
- Insira o comando
system-config-firewallpara lançar a utilidade de configuração do firewall. Um GUI ou a utilidade da linha de comando é lançada, dependendo da maneira em que você está registrado no sistema firewall. Essa tarefa assume que você está registrado através do SSH e usando a interface da linha de comando. - Use a chave TAB em seu teclado para navegar ao botão e pressione a chave ENTER. A tela Trusted Services aparecerá.
- Não altere qualquer valor, porém use a chave TAB para navegar ao botão e pressione ENTER para avançar à próxima tela. A tela Other Ports aparecerá.
- Use a chave TAB para navegar ao seu botão <Add> e pressione ENTER. A tela Port and Protocol aparecerá.
- Insira
5445no campo Port / Port Range e use a chave TAB para mover ao campo Protocol e insiratcp. Use a chave TAB para navegar ao botão e pressione ENTER. - Use a chave TAB para navegar ao botão até que você encontre a tela Port Forwarding.
- Use a chave TAB para navegar ao seu botão <Add> e pressione ENTER.
- Preencha os valores seguintes para determinar a porta de envio para a porta 5445.
- Interface de fonte: eth1
- Protocolo: tcp
- Porta / Intervalo de Porta: 5445
- Destinação do endereço IP: 10.1.1.2
- Porta / Intervalo de Porta: 5445
Use a chave TAB para navegar ao botão e pressione ENTER. - Use a chave TAB para navegar ao botão e pressione ENTER.
- Use a chave TAB para navegar ao botão e pressione ENTER. Leia o aviso e clique para que as alterações tenham efeito.
Configure um firewall em seu host do JBoss EAP 6.
Algumas organizações escolhem em configurar no servidor do JBoss EAP 6, e encerram todas as portas que não necessárias para esta operação. Consulte a Seção 9.4, “Portas de rede usadas pela Plataforma do Aplicativo JBoss EAP 6” e determine quais portas devem ser abertas, e encerre o resto. A configuração default do Red Hat Enterprise Linux 6 encerra todas as portas com exceção da 22 (usada para Secure Shell (SSH) e 5353 (usada para multicast DNS). Enquanto você configura as portas, certifique-se de ter acesso físico ao seu servidor de forma que você não bloqueie-se acidentalmente.
O seu firewall está configurado para envio de tráfego ao seu servidor do JBoss EAP 6 em sua configuração do firewall. Caso você escolha em ativar um firewall no seu servidor, todas as portas são encerradas com exceção daquelas necessárias para execução em seus aplicativos.
9.4. Portas de rede usadas pela Plataforma do Aplicativo JBoss EAP 6 Copiar o linkLink copiado para a área de transferência!
- Se é que os seus grupos de servidores usam um dos grupos binding do socket default, ou um grupo personalizado.
- Solicitações de suas implantações individuais.
Nota
Grupos Binding de Socket default
full-ha-socketsfull-socketsha-socketsstandard-sockets
| Nome | Porta | Porta Multicast | Descrição | full-ha-sockets | full-sockets | ha-socket | standard-socket |
|---|---|---|---|---|---|---|---|
ajp | 8009 | Protocolo Apache JServ. Usado para o balanceamento de carga e para aplicar o cluster HTTP. | Sim | Sim | Sim | Sim | |
http | 8080 | A porta default para os aplicativos da web implantados. | Sim | Sim | Sim | Sim | |
https | 8443 | A conexão criptografada SSL entre os aplicativos da web implantados e os clientes. | Sim | Sim | Sim | Sim | |
jacorb | 3528 | Serviços CORBA para transações JTS e outros serviços dependentes ORB. | Sim | Sim | Não | Não | |
jacorb-ssl | 3529 | Os serviços CORBA criptografados SSL. | Sim | Sim | Não | Não | |
jgroups-diagnostics | 7500 | Multicast. Usado para a descoberta de pares nos HA clusters. Isto não é configurável usando as Interfaces de Gerenciamento. | Sim | Não | Sim | Não | |
jgroups-mping | 45700 | Multicast. Usado para descobrir o associado inicial num clusters HA. | Sim | Não | Sim | Não | |
jgroups-tcp | 7600 | Descoberta de pares unicast nos clusters HA usando TCP. | Sim | Não | Sim | Não | |
jgroups-tcp-fd | 57600 | Usado para detecção de falha HA sobre o TCP. | Sim | Não | Sim | Não | |
jgroups-udp | 55200 | 45688 | Descoberta de pares unicast nos clusters HA usando UDP. | Sim | Não | Sim | Não |
jgroups-udp-fd | 54200 | Usado para detecção de falha HA sobre o UDP. | Sim | Não | Sim | Não | |
messaging | 5445 | Serviço JMS. | Sim | Sim | Não | Não | |
messaging-group | Referenciado pela difusão HornetQ JMS e grupos de descoberta. | Sim | Sim | Não | Não | ||
messaging-throughput | 5455 | Usado pelo JMS Remoto. | Sim | Sim | Não | Não | |
mod_cluster | 23364 | A porta multicast de comunicação entre a Plataforma do Aplicativo JBoss EAP 6 e o balanceador de carga HTTP. | Sim | Não | Sim | Não | |
osgi-http | 8090 | Usado pelos componentes internos que usam o subsistema OSGi. Não é configurável usando as Interfaces de Gerenciamento. | Sim | Sim | Sim | Sim | |
remoting | 4447 | Usado para invocação remota EJB. | Sim | Sim | Sim | Sim | |
txn-recovery-environment | 4712 | O gerenciador de recuperação da transação JTA. | Sim | Sim | Sim | Sim | |
txn-status-manager | 4713 | Gerenciador da Transação JTA / JTS. | Sim | Sim | Sim | Sim |
Adicionado aos grupos binding do socket, cada controlador de host abre duas portas para propósitos de gerenciamento:
- 9990 - A porta do Console de Gerenciamento da Web
- 9999 - A porta usada pelo Console de Gerenciamento e API de Gerenciamento
Capítulo 10. Segurança da Interface de Gerenciamento Copiar o linkLink copiado para a área de transferência!
10.1. Segurança das Interfaces de Gerenciamento Copiar o linkLink copiado para a área de transferência!
Num ambiente de teste, é típico executar o JBoss EAP 6 sem camada de segurança nas interfaces de gerenciamento, compostas do Console de Gerenciamento, CLI de Gerenciamento e qualquer outra implementação do API. Isto permite alterações rápidas de configuração e desenvolvimento .
10.2. Configuração de Segurança do Usuário Default Copiar o linkLink copiado para a área de transferência!
Todas as interfaces de gerenciamento da Plataforma do Aplicativo JBoss EAP 6 são asseguradas por default. Esta segurança leva duas formas diferentes:
- As interfaces locais são asseguradas pelo contrato SASL entre os clientes locais e o servidor que eles conectam. Esse mecanismo de segurança é baseado na habilidade do cliente acessar o filesystem local. Isto é devido uma vez que o acesso ao filesystem local permitiria o cliente adicionar um usuário ou, do contrário, alterar a configuração para impedir outros mecanismos de segurança. Isto adere o princípio de que se um acesso físico ao filesystem for atingido, outros mecanismos de segurança serão supérfluos. O mecanismo acontece em quatro etapas:
Nota
O acesso HTTP é considerado remoto, mesmo que você conecte ao localhost usando o HTTP.- O cliente envia uma mensagem ao servidor que inclui uma solicitação para autenticar ao mecanismo SASL local.
- O servidor gera o token de uma vez, o grava a um arquivo único e envia uma mensagem ao cliente com o caminho completo ao do arquivo.
- O cliente lê o token a partir do arquivo e o envia ao servidor, verificando se isto possui acesso local ao filesystem.
- O servidor verifica o token e exclui o arquivo.
- Os clientes remotos, incluindo os clientes HTTP locais, usam a segurança baseado no realm. O
ManagementRealmé o realm default com permissões para configurar o JBoss EAP 6 remotamente usando interfaces de gerenciamento. O script é fornecido que o permite adicionar usuários a este realm (ou realms que você criou). Para maiores informações sobre a adição de usuários, refira-se ao capítulo Getting Started do JBoss EAP 6 Installation Guide. Para cada usuário, o nome de usuário, a senha hash e o realm são stored num arquivo.- Managed domain
EAP_HOME/domain/configuration/mgmt-users.properties- Servidor Autônomo
EAP_HOME/standalone/configuration/mgmt-users.properties
Mesmo que os conteúdos domgmt-users.propertiesestiverem mascarados, o arquivo deve continuar a ser tratado como um arquivo confidencial. Recomenda-se que isto seja configurado para o modo do arquivo de600, que apenas fornece o acesso de leitura e gravação pelo proprietário do arquivo.
10.3. Visão Geral da Configuração da Interface de Gerenciamento Avançada Copiar o linkLink copiado para a área de transferência!
EAP_HOME/domain/configuration/host.xml ou EAP_HOME/standalone/configuration/standalone.xml controla quais interfaces de rede o processo do controlador do host efetua o bind, quais os tipos de sistema de autenticação estão disponíveis e qual o tipo de sistema de autenticação é usado para autenticar os usuários em cada interface. Este tópico descreve como configurar as Interfaces de Gerenciamento para melhor acomodar o seu ambiente.
<management> que inclui diversos atributos configuráveis e os três seguintes elementos filho configuráveis. Os realms de segurança e as conexões outbound são primeiramente definidos e então aplicados às interfaces de gerenciamento como atributos.
<security-realms><outbound-connections><management-interfaces>
O security realm é responsável pela autenticação e autorização dos usuários permitidos a administrar o JBoss EAP 6 através do API de Gerenciamento, CLI de Gerenciamento ou Console de Gerenciamento baseado na web.
ManagementRealm e ApplicationRealm. Cada um desses realms de segurança usa um arquivo -users.properties para realizar o store nos usuários e senha com hash e um -roles.properties para aplicar o store nos mapeamentos entre usuários e funções. O suporte é também incluído no realm de segurança habilitado LDAP.
Nota
Alguns realms de segurança conectam às interfaces externas tais como o servidor LDAP. Uma conexão outbound define como realizar esta conexão. Um tipo de conexão pré-definido, ldap-connection, configura todos os atributos requeridos e opcionais para conexão ao servidor LDAP e verificação do credencial.
A interface de gerenciamento inclui propriedades sobre como conectar e como configurar o JBoss EAP. Tal informação inclui a interface de rede nomeada, porta, realm de segurança e outras informações configuráveis sobre a interface. As duas interfaces estão incluídas numa instalação default:
- O
http-interfaceé uma configuração para o Console de Gerenciamento baseado na web. - O
native-interfaceé a configuração para o CLI de Gerenciamento da linha de comando e API de Gerenciamento como o REST.
10.4. Desabilitação da Interface de Gerenciamento HTTP Copiar o linkLink copiado para a área de transferência!
Nota
console-enabled da interface HTTP para false, ao invés de desabilitar a interface completamente.
/host=master/core-service=management/management-interface=http-interface/:write-attribute(name=console-enabled,value=false)
/host=master/core-service=management/management-interface=http-interface/:write-attribute(name=console-enabled,value=false)
Exemplo 10.1. Leitura da Configuração da Interface HTTP
Exemplo 10.2. Remoção da Interface HTTP
/host=master/core-service=management/management-interface=http-interface/:remove
/host=master/core-service=management/management-interface=http-interface/:remove
Exemplo 10.3. Recriação da Interface HTTP
/host=master/core-service=management/management-interface=http-interface:add(console-enabled=true,interface=management,port="${jboss.management.http.port:9990}",security-realm=ManagementRealm)
/host=master/core-service=management/management-interface=http-interface:add(console-enabled=true,interface=management,port="${jboss.management.http.port:9990}",security-realm=ManagementRealm)
10.5. Remoção da Autenticação Silenciosa do Realm de Segurança Default Copiar o linkLink copiado para a área de transferência!
A instalação default do JBoss EAP 6 contém um método de autenticação silenciosa para o usuário CLI de Gerenciamento. Isto permite o usuário local a habilidade de acessar o CLI de Gerenciamento sem a autenticação do nome de usuário e senha. Esta funcionalidade é habilitada como conveniência e assiste usuários locais executando os scripts CLI de Gerenciamento sem o requerimento de autenticação. Ela é considerada um recurso útil permitindo o acesso à configuração local e também fornece ao usuário a habilidade de adicionar seus próprios detalhes ou desabilitar as checagens de segurança.
local sem a seção security-realm do arquivo de configuração. Isto é aplicado a ambos standalone.xml para instância do Servidor Autônomo ou host.xml para o Managed Domain. Você deve considerar apenas a remoção do elemento local caso você entenda o impacto que isto tem em sua configuração do servidor em particular.
local visível na seguinte amostra.
Exemplo 10.4. Amostra do elemento local no security-realm.
Pré-requisitos
- Inicie a instância do JBoss EAP 6.
- Inicie o CLI de Gerenciamento.
Procedimento 10.1. Remoção da Autenticação Silenciosa do Realm de Segurança Default
Remova a autenticação silenciosa com o CLI de Gerenciamento
Remova o elementolocala partir do Realm de Gerenciamento e Realm do Aplicativo conforme solicitado.- Remova o elemento
locala partir do Realm de Gerenciamento.Servidores Autônomos
/core-service=management/security-realm=ManagementRealm/authentication=local:remove
/core-service=management/security-realm=ManagementRealm/authentication=local:removeCopy to Clipboard Copied! Toggle word wrap Toggle overflow Managed Domains
/host=HOST_NAME/core-service=management/security-realm=ManagementRealm/authentication=local:remove
/host=HOST_NAME/core-service=management/security-realm=ManagementRealm/authentication=local:removeCopy to Clipboard Copied! Toggle word wrap Toggle overflow
- Remova o elemento
locala partir do Realm do Aplicativo.Servidores Autônomos
/core-service=management/security-realm=ApplicationRealm/authentication=local:remove
/core-service=management/security-realm=ApplicationRealm/authentication=local:removeCopy to Clipboard Copied! Toggle word wrap Toggle overflow Managed Domains
/host=HOST_NAME/core-service=management/security-realm=ApplicationRealm/authentication=local:remove
/host=HOST_NAME/core-service=management/security-realm=ApplicationRealm/authentication=local:removeCopy to Clipboard Copied! Toggle word wrap Toggle overflow
O modo de autenticação silenciosa é removido do ManagementRealm e ApplicationRealm.
10.6. Desabilitação do Acesso Remoto ao Subsistema JMX Copiar o linkLink copiado para a área de transferência!
/profile=default do comando. Para o servidor autônomo, remova aquela porção do comando completamente.
Nota
Exemplo 10.5. Remoção do Conector Remoto do Subsistema JMX
/profile=default/subsystem=jmx/remoting-connector=jmx/:remove
/profile=default/subsystem=jmx/remoting-connector=jmx/:remove
Exemplo 10.6. Remova o subsistema JMX
/profile=default/subsystem=jmx/:remove
/profile=default/subsystem=jmx/:remove
10.7. Configuração dos Security Realms para as Interfaces de Gerenciamento Copiar o linkLink copiado para a área de transferência!
Esta amostra apresenta a configuração default para o realm de segurança ManagementRealm. Isto usa um arquivo chamado mgmt-users.properties para efetuar o store em sua própria informação de configuração.
Exemplo 10.7. ManagementRealm Default
Os seguintes comandos criam um novo security realm chamado TestRealm e configuram o diretório para o arquivo de propriedades relevantes.
Exemplo 10.8. Gravação de um Realm de Segurança
/host=master/core-service=management/security-realm=TestRealm/:add/host=master/core-service=management/security-realm=TestRealm/authentication=properties/:add(path=TestUsers.properties, relative-to=jboss.domain.config.dir)
/host=master/core-service=management/security-realm=TestRealm/:add/host=master/core-service=management/security-realm=TestRealm/authentication=properties/:add(path=TestUsers.properties, relative-to=jboss.domain.config.dir)
Após adicionar um security realm, forneça-o como referência à Interface de Segurança.
Exemplo 10.9. Adição de um Realm de Segurança a uma Interface de Gerenciamento
/host=master/core-service=management/management-interface=http-interface/:write-attribute(security-realm=TestRealm)
/host=master/core-service=management/management-interface=http-interface/:write-attribute(security-realm=TestRealm)
10.8. Configuração do Console de Gerenciamento para o HTTPS no modo Autônomo Copiar o linkLink copiado para a área de transferência!
Procedimento 10.2.
- Certifique-se de que o console de gerenciamento efetua o bind ao
HTTPSpara sua própria interface pela adição da configuraçãomanagement-httpse remoção da configuraçãomanagement-http.Isto pode ser realizado pela edição do arquivostandalone.xml(que não é recomendado) ou pelo uso dos seguintes comandos de interface CLI:/core-service=management/management-interface=http-interface:write-attribute(name=secure-socket-binding, value=management-https)
/core-service=management/management-interface=http-interface:write-attribute(name=secure-socket-binding, value=management-https)Copy to Clipboard Copied! Toggle word wrap Toggle overflow /core-service=management/management-interface=http-interface:undefine-attribute(name=socket-binding)
/core-service=management/management-interface=http-interface:undefine-attribute(name=socket-binding)Copy to Clipboard Copied! Toggle word wrap Toggle overflow Opcional:
Caso você esteja usando um gruposocket-bindingpersonalizado, certifique-se de que o bindingmanagement-httpsestá definido (isto está presente por default, limitado pela porta9443).Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Gere um par de chaves conforme Seção 8.4, “Criação de uma Chave de Criptografia SSL e Certificado”.
- Adicione um elemento
server-identitiesà seçãosecurity-realmdo arquivo de configuraçãostandalone.xmlde sua instalação.Você pode definir o protocolo, o caminho keystore, a senha keystore e o alias para o par de chaves com este elemento.Execute o seguinte comando CLI, substituindo o seus próprios valores pelos valores de amostra. Esta amostra assume que o keystore é copiado ao diretório de configuração do servidor, do qual éEAP_HOME/standalone/configuration/para um servidor autônomo./core-service=management/security-realm=ManagementRealm/server-identity=ssl:add(keystore-path=server.keystore,keystore-relative-to=jboss.server.config.dir, keystore-password=SECRET, alias=KEY_ALIAS)
/core-service=management/security-realm=ManagementRealm/server-identity=ssl:add(keystore-path=server.keystore,keystore-relative-to=jboss.server.config.dir, keystore-password=SECRET, alias=KEY_ALIAS)Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Reinicie o seu servidor autônomo.
10.9. Configuração do Console de Gerenciamento para o HTTPS no modo Domain Copiar o linkLink copiado para a área de transferência!
Procedimento 10.3.
- Gere um par de chaves conforme Seção 8.4, “Criação de uma Chave de Criptografia SSL e Certificado”.
- Adicione um elemento
server-identitiesao blocosecurity-realmem suas instalaçõeshost.xml..Você pode definir o protocolo, o caminho keystore, a senha keystore e o alias para o par de chaves com este elemento.Execute o seguinte comando CLI, substituindo o seus próprios valores pelos valores de amostra. Esta amostra assume que o keystore é copiado ao diretório de configuração do servidor, do qual é EAP_HOME/domain/configuration/ para um managed domain./host=master/core-service=management/security-realm=ManagementRealm/server-identity=ssl:add(protocol=TLSv1, keystore-path=server.keystore,keystore-relative-to=jboss.domain.config.dir, keystore-password=SECRET, alias=KEY_ALIAS)
/host=master/core-service=management/security-realm=ManagementRealm/server-identity=ssl:add(protocol=TLSv1, keystore-path=server.keystore,keystore-relative-to=jboss.domain.config.dir, keystore-password=SECRET, alias=KEY_ALIAS)Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Altere o elemento do socket com a seção
management-interfaceadicionando osecure-porte removendo a configuração da porta.Use os seguintes comandos:/host=master/core-service=management/management-interface=http-interface:write-attribute(name=secure-port,value=9443)
/host=master/core-service=management/management-interface=http-interface:write-attribute(name=secure-port,value=9443)Copy to Clipboard Copied! Toggle word wrap Toggle overflow /host=master/core-service=management/management-interface=http-interface:undefine-attribute(name=port)
/host=master/core-service=management/management-interface=http-interface:undefine-attribute(name=port)Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Reinicie o seu domain.
10.10. Uso de 2-maneiras para a interface de Gerenciamento e do CLI Copiar o linkLink copiado para a área de transferência!
- HOST1
- O hostname dos servidor JBoss. Por exemplo:
jboss.redhat.com - HOST2
- Um nome apropriado ao cliente. Por exemplo:
myclient. Perceba que isto não é necessariamente um hostname atual. - CA_HOST1
- O DN (distinguished name - nome distinguido) para uso do certificado HOST1. Por exemplo:
cn=jboss,dc=redhat,dc=com. - CA_HOST2
- O DN para uso do certificado HOST2. Por exemplo:
cn=myclient,dc=redhat,dc=com.
Procedimento 10.4.
- Gere os stores:
keytool -genkeypair -alias HOST1_alias -keyalg RSA -keysize 1024 -validity 365 -keystore host1.keystore.jks -dname "CA_HOST1" -keypass secret -storepass secret
keytool -genkeypair -alias HOST1_alias -keyalg RSA -keysize 1024 -validity 365 -keystore host1.keystore.jks -dname "CA_HOST1" -keypass secret -storepass secretCopy to Clipboard Copied! Toggle word wrap Toggle overflow keytool -genkeypair -alias HOST2_alias -keyalg RSA -keysize 1024 -validity 365 -keystore host2.keystore.jks -dname "CA_HOST2" -keypass secret -storepass secret
keytool -genkeypair -alias HOST2_alias -keyalg RSA -keysize 1024 -validity 365 -keystore host2.keystore.jks -dname "CA_HOST2" -keypass secret -storepass secretCopy to Clipboard Copied! Toggle word wrap Toggle overflow - Exporte os certificados:
keytool -exportcert -keystore HOST1.keystore.jks -alias HOST1_alias -keypass secret -storepass secret -file HOST1.cer
keytool -exportcert -keystore HOST1.keystore.jks -alias HOST1_alias -keypass secret -storepass secret -file HOST1.cerCopy to Clipboard Copied! Toggle word wrap Toggle overflow keytool -exportcert -keystore HOST2.keystore.jks -alias HOST2_alias -keypass secret -storepass secret -file HOST2.cer
keytool -exportcert -keystore HOST2.keystore.jks -alias HOST2_alias -keypass secret -storepass secret -file HOST2.cerCopy to Clipboard Copied! Toggle word wrap Toggle overflow - Importe os certificados aos trust store opostos:
keytool -importcert -keystore HOST1.truststore.jks -storepass secret -alias HOST2_alias -trustcacerts -file HOST2.cer
keytool -importcert -keystore HOST1.truststore.jks -storepass secret -alias HOST2_alias -trustcacerts -file HOST2.cerCopy to Clipboard Copied! Toggle word wrap Toggle overflow keytool -importcert -keystore HOST2.truststore.jks -storepass secret -alias HOST1_alias -trustcacerts -file HOST1.cer
keytool -importcert -keystore HOST2.truststore.jks -storepass secret -alias HOST1_alias -trustcacerts -file HOST1.cerCopy to Clipboard Copied! Toggle word wrap Toggle overflow - Defina o CertificateRealm na configuração para a sua instalação (
host.xmloustandalone.xml) e aponte a interface a isto:Isto pode ser realizado pela edição manual do arquivo de configuração (não recomendado) ou pelo uso dos seguintes comandos:/core-service=management/security-realm=CertificateRealm:add()
/core-service=management/security-realm=CertificateRealm:add()Copy to Clipboard Copied! Toggle word wrap Toggle overflow /core-service=management/security-realm=CertificateRealm:add/server-identity=ssl:add(keystore-path=/path/to/HOST1.keystore.jks,keystore-password=secret, alias=HOST1_alias)
/core-service=management/security-realm=CertificateRealm:add/server-identity=ssl:add(keystore-path=/path/to/HOST1.keystore.jks,keystore-password=secret, alias=HOST1_alias)Copy to Clipboard Copied! Toggle word wrap Toggle overflow /core-service=management/security-realm=CertificateRealm/authentication=truststore:add(keystore-path=/path/to/HOST1.truststore.jks,keystore-password=secret)
/core-service=management/security-realm=CertificateRealm/authentication=truststore:add(keystore-path=/path/to/HOST1.truststore.jks,keystore-password=secret)Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Edite o
JBOSS_HOME/bin/jboss-cli.xmle adicione a configuração SSL (usando os valore apropriados às variáveis):Copy to Clipboard Copied! Toggle word wrap Toggle overflow
10.11. Vaults da Senha para Sequências Confidenciais Copiar o linkLink copiado para a área de transferência!
10.11.1. Sequências Confidenciais de Segurança nos Arquivos de texto limpo Copiar o linkLink copiado para a área de transferência!
Atenção
java.io.IOException: com.sun.crypto.provider.SealedObjectForKeyProtector
java.io.IOException: com.sun.crypto.provider.SealedObjectForKeyProtector
10.11.2. Criação do Java Keystore para Sequências Confidenciais do Store Copiar o linkLink copiado para a área de transferência!
Pré-requisitos
- O comando
keytooldeve estar disponível para uso. Ele é fornecido pelo Java Runtime Environment (JRE). Localize o caminho para o arquivo. No Red Hat Enterprise Linux, isto é instalado no/usr/bin/keytool.
Procedimento 10.5. Configuração do Java Keystore
Crie um diretório para realizar o store de seu keystore e outras informações criptografadas.
Crie um diretório para manter o seu keystore e outras informações importantes. O resto deste procedimento assume que o diretório é o/home/USER/vault/.Determine os parâmetros para uso com o
keytool.Determinação dos parâmetros da operação- alias
- O alias é um identificador único para o vault e outros dados stored no keystore. O alias no comando de amostra no final deste procedimento é o
vault. Os Aliases são sensíveis à letra maiúscula e minúscula. - keyalg
- O algoritmo de uso na criptografia. A amostra neste procedimento usa o
RSA. Use a documentação para seu JRE e sistema operacional para verificar quais das chances estão disponíveis. - keysize
- O tamanho da chave de criptografia impacta em como é difícil descriptografar a partir de força bruta. A amostra deste procedimento usa
2048. Consulte a documentação distribuída com okeytoolpara maiores informações sobre os valores apropriados. - keystore
- O keystore é um banco de dados que mantém a informação criptografada e a informação de como criptografá-la. Caso você não deseje especificar o keystore, o default de uso do keystore é um arquivo chamado
.keystoreno seu diretório principal. A primeira vez que você adicionar dados ao keystore, ele será criado. A amostra neste procedimento usa ovault.keystorekeystore.
O comandokeytoolpossui muitas outras opções. Refira-se à documentação para maiores informações sobre o seu JRE ou o seu sistema operacional.Determine as respostas às questões que o comando
keystoreirá perguntá-lo.Okeystoreprecisa da seguinte informação com o objetivo de povoar a entrada keystore.- Senha Keystore
- Quando você criar um keystore, você deve determinar uma senha. Com o objetivo de trabalhar com o keystore no futuro, você precisará de uma senha. Crie uma senha forte que você lembre-se. O keystore é apenas seguro conforme sua senha e a segurança do sistema de arquivo e sistema operacional que isto reside.
- Senha chave (opcional)
- Além da senha keystore, você pode especificar uma senha para cada chave que isto mantém. Com objetivo de usar uma chave, a senha precisa ser fornecida cada vez que ela é usada. Normalmente, esta facilidade não é usada.
- Primeiro nome e sobrenome
- Esta informação, e o resto da informação na lista, o orienta a identificar unicamente a chave e a posiciona numa hierarquia de outras chaves. Não é necessário nomeação, porém isto deve ser duas palavras e deve ser único ao da chave. A amostra neste procedimento usa o
Accounting Administrator. Nos termos do diretório, isto torna-se common name do certificado. - Unidade organizacional
- Isto é uma única palavra que identifica quem usa o certificado. Isto pode ser o aplicativo ou a unidade comercial. A amostra neste procedimento usa o
AccountingServices. Normalmente, todos os keystores usados por um grupo ou aplicativo usam a mesma unidade organizacional. - Organização
- Isto é normalmente uma representação de palavra única de seu nome de organização. Isto normalmente permanece o mesmo por todos os certificados usados por uma organização. Esta amostra usa o
MyOrganization. - Cidade ou municipalidade
- A sua cidade.
- Estado ou província.
- O seu estado ou província, ou o equivalente para sua localidade.
- País
- Um código de duas letras de seu país.
Todas essas informações juntas criarão uma hierarquia para os seus keystores e certificados, garantindo que eles usam uma estrutura de nomeação consistente, porém são únicas.Execute o comando
keytool, fornecendo a informação que você obteve.Exemplo 10.10. Entrada e saída da amostra do comando
keystore.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
O arquivo nomeado vault.keystore é criado no diretório /home/USER/vault/. Ele realiza o store numa chave única chamada vault, que será usada para efetuar o store nas sequências criptografadas, tais como senhas, para o JBoss EAP 6.
10.11.3. Mascarando a Senha Keystore e Inicialização do Vault da Senha Copiar o linkLink copiado para a área de transferência!
Pré-requisitos
- O aplicativo
EAP_HOME/bin/vault.shprecisa ser acessado através da linha de comando.
Execute o comando
vault.sh.Execute oEAP_HOME/bin/vault.sh. Inicie a sessão interativa digitando0.Insira o diretório onde os arquivos criptografados serão stored.
Este diretório deve ser bastante seguro, mas o JBoss EAP 6 precisa estar apto a acessá-lo. Caso você tenha seguido a Seção 10.11.2, “Criação do Java Keystore para Sequências Confidenciais do Store”, o seu keystore está num diretório chamadovault/no seu diretório principal. Esta amostra usa o/home/USER/vault/do diretório.Nota
Não se esqueça de incluir a barra à direita no nome do diretório. Tanto use/ou\, dependendo de seu sistema operacional.Insira o caminho ao keystore.
Insira o caminho completo ao arquivo keystore. Esta amostra usa o/home/USER/vault/vault.keystore.Criptografe a senha keystore.
As seguintes etapas criptografam a senha keystore, de forma que você pode usá-la nos arquivos de configuração e aplicativos de forma segura.Insira a senha keystore.
Quando solicitado, insira a senha keystore.Insira o valor salt.
Insira o valor salt de 8 caracteres. O valor salt, juntamente com a contagem de interação (abaixo), são usados para criar o valor hash.Insira a contagem de interação.
Insira o número para contagem de interagem.Anote a informação de senha mascarada.
A senha mascarada, o salt, e a contagem de interação são emitidas para a saída default. Anote-os numa localização segura. Um atacante poderia usá-los para criptografar a senha.Insira o alias do vault.
Quando solicitado, insira o alias do vault. Caso você tenha seguido a Seção 10.11.2, “Criação do Java Keystore para Sequências Confidenciais do Store” para criar o seu vault, o alias évault.
Saia do console interativo.
Digite2para sair do console interativo.
A sua senha keystore foi mascarada para uso nos arquivos de configuração e implantações. Além disso, o seu vault é inteiramente configurado e está pronto para uso.
10.11.4. Configuração do JBoss EAP para Uso do Vault de Senha Copiar o linkLink copiado para a área de transferência!
Antes de você poder mascarar as senhas e outros atributos confidenciais nos arquivos de configuração, você precisa fazer com que o JBoss EAP 6 esteja ciente da senha do vault que os aplica o store e os descriptografa. Siga este procedimento para habilitar esta funcionalidade.
Pré-requisitos
Procedimento 10.6. Criação do Vault da Senha
Determine os valores corretos para o comando.
Determine os valores para os seguintes parâmetros, que são determinadas pelos comandos usados para criar o próprio keystore. Para maiores informações sobre a criação do keystore, refira-se aos seguintes tópicos Seção 10.11.2, “Criação do Java Keystore para Sequências Confidenciais do Store” e Seção 10.11.3, “Mascarando a Senha Keystore e Inicialização do Vault da Senha”.Expand Parâmetro Descrição KEYSTORE_URL O caminho do sistema do arquivo ou URI do arquivo keystore normalmente chamadovault.keystoreKEYSTORE_PASSWORD A senha usada para acessar o keystore. Esse valor deve ser mascarado.KEYSTORE_ALIAS O nome do keystore.SALT O salt usado para criptografar e descriptografar os valores keystore.ITERATION_COUNT O número de vezes que o algoritmo criptografar está sendo executado.ENC_FILE_DIR O caminho ao diretório a partir dos comandos keystore que estão sendo executados. Normalmente o diretório contendo o vault da senha.host (managed domain apenas) O nome do host que você está configurando.Use o CLI de Gerenciamento para habilitar do vault da senha.
Execute os seguintes comandos, dependendo se é que você usa o managed domain ou configuração do servidor autônomo. Substitua os valores no comando pelos valores da primeira etapa deste procedimento.Nota
Caso você use o Microsoft Windows Server, substitua cada caractere/num filename ou caminho do diretório com quatro caracteres\. Isto é devido a necessidade de ter dois caracteres\, cada entre espaços. Isto não precisa ser feito para outros caracteres/.Managed Domain
/host=YOUR_HOST/core-service=vault:add(vault-options=[("KEYSTORE_URL" => "PATH_TO_KEYSTORE"), ("KEYSTORE_PASSWORD" => "MASKED_PASSWORD"), ("KEYSTORE_ALIAS" => "ALIAS"), ("SALT" => "SALT"),("ITERATION_COUNT" => "ITERATION_COUNT"), ("ENC_FILE_DIR" => "ENC_FILE_DIR")])/host=YOUR_HOST/core-service=vault:add(vault-options=[("KEYSTORE_URL" => "PATH_TO_KEYSTORE"), ("KEYSTORE_PASSWORD" => "MASKED_PASSWORD"), ("KEYSTORE_ALIAS" => "ALIAS"), ("SALT" => "SALT"),("ITERATION_COUNT" => "ITERATION_COUNT"), ("ENC_FILE_DIR" => "ENC_FILE_DIR")])Copy to Clipboard Copied! Toggle word wrap Toggle overflow Servidor Autônomo
/core-service=vault:add(vault-options=[("KEYSTORE_URL" => "PATH_TO_KEYSTORE"), ("KEYSTORE_PASSWORD" => "MASKED_PASSWORD"), ("KEYSTORE_ALIAS" => "ALIAS"), ("SALT" => "SALT"),("ITERATION_COUNT" => "ITERATION_COUNT"), ("ENC_FILE_DIR" => "ENC_FILE_DIR")])/core-service=vault:add(vault-options=[("KEYSTORE_URL" => "PATH_TO_KEYSTORE"), ("KEYSTORE_PASSWORD" => "MASKED_PASSWORD"), ("KEYSTORE_ALIAS" => "ALIAS"), ("SALT" => "SALT"),("ITERATION_COUNT" => "ITERATION_COUNT"), ("ENC_FILE_DIR" => "ENC_FILE_DIR")])Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Segue abaixo uma amostra do comando com os seguintes valores hipotéticos:/core-service=vault:add(vault-options=[("KEYSTORE_URL" => "/home/user/vault/vault.keystore"), ("KEYSTORE_PASSWORD" => "MASK-3y28rCZlcKR"), ("KEYSTORE_ALIAS" => "vault"), ("SALT" => "12438567"),("ITERATION_COUNT" => "50"), ("ENC_FILE_DIR" => "/home/user/vault/")])/core-service=vault:add(vault-options=[("KEYSTORE_URL" => "/home/user/vault/vault.keystore"), ("KEYSTORE_PASSWORD" => "MASK-3y28rCZlcKR"), ("KEYSTORE_ALIAS" => "vault"), ("SALT" => "12438567"),("ITERATION_COUNT" => "50"), ("ENC_FILE_DIR" => "/home/user/vault/")])Copy to Clipboard Copied! Toggle word wrap Toggle overflow
O JBoss EAP 6 é configurado para as sequências mascaradas e descriptografadas usando a senha do vault. Para adicionar as sequências ao vault e usá-las na sua configuração, refira-se ao seguinte tópico: Seção 10.11.5, “Store e Recuperação das Sequências Confidenciais Criptografas do Java Keystore”.
10.11.5. Store e Recuperação das Sequências Confidenciais Criptografas do Java Keystore Copiar o linkLink copiado para a área de transferência!
A inclusão de senhas e outras sequências confidenciais nos arquivos de configuração em texto plano não está segurado. O JBoss EAP 6 inclui a habilidade de aplicar o store e mascarar essas sequências confidenciais num keystore criptografado e usa valores mascarados nos arquivos de configuração.
Pré-requisitos
- O aplicativo
EAP_HOME/bin/vault.shprecisa ser acessado através da linha de comando.
Procedimento 10.7. Configuração do Java Keystore
Execute o comando
vault.sh.Execute oEAP_HOME/bin/vault.sh. Inicie a sessão interativa digitando0.Insira o diretório onde os arquivos criptografados serão stored.
Caso você tenha seguido a Seção 10.11.2, “Criação do Java Keystore para Sequências Confidenciais do Store”, o seu keystore está num diretório chamadovault/no seu diretório principal. Na maioria das vezes, faz sentido aplicar o store em todas as suas informações criptografadas no mesmo local ao do store da chave. Essa amostra usa o diretório/home/USER/vault/.Nota
Não se esqueça de incluir a barra à direita no nome do diretório. Tanto use/ou\, dependendo de seu sistema operacional.Insira o caminho ao keystore.
Insira o caminho completo ao arquivo keystore. Esta amostra usa o/home/USER/vault/vault.keystore.Insira a senha keystore, o nome do vault, o salt, e a contagem de interação.
Quando solicitado, insira a senha keystore, o nome do vault, o salt, e a contagem de interação. Um acordo é executado.Selecione a opção para realizar o store na senha.
Selecione a opção0para realizar o store na senha ou outra sequência confidencial.Insira o valor.
Quando solicitado, insira duas vezes o valor. Caso os valores não coincidam, você será solicitado a tentar novamente.Insira o bloco vault.
Insira o bloco vault, que é um contêiner para atributos que pertencem ao mesmo recurso. Uma amostra deste nome do atributo seriads_ExampleDS. Isto fará parte de uma referência à sequência criptografada, na sua fonte de dados ou outra definição do serviço.Insira o nome do atributo.
Insira o nome do atributo que você está aplicando o store. Uma amostra do nome do atributo seriapassword.ResultadoUma mensagem parecida com a abaixo demonstra que o atributo foi salvo.
Valor do Atributo para (ds_ExampleDS, password) salvos
Valor do Atributo para (ds_ExampleDS, password) salvosCopy to Clipboard Copied! Toggle word wrap Toggle overflow Anote a informação sobre a sequência criptografada.
A mensagem imprime para o resultado default, apresentando o bloco vault, nome do atributo, chave compartilhada e recomendação sobre o uso da sequência em sua configuração. Anote esta informação numa localização segura. O resultado da amostra é exibido abaixo:Copy to Clipboard Copied! Toggle word wrap Toggle overflow Uso da sequência criptografada na sua configuração.
Use a sequência a partir da sequência em sua configuração, no local de uma sequência de texto plano. A fonte de dados usando a senha criptografia é apresentada abaixo.Copy to Clipboard Copied! Toggle word wrap Toggle overflow Você pode usar a sequência criptografada em qualquer local de seu domain ou arquivo de configuração autônomo onde as expressões são permitidas.Nota
Para verificar se as expressões são permitidas com um subsistema em particular, execute o seguinte comando CLI em relação ao subsistema:/host=master/core-service=management/security-realm=TestRealm:read-resource-description(recursive=true)
/host=master/core-service=management/security-realm=TestRealm:read-resource-description(recursive=true)Copy to Clipboard Copied! Toggle word wrap Toggle overflow A partir de um resultado de execução deste comando, busque pelo valor para o parâmetroexpressions-allowed. Caso isto seja verdadeiro, você pode usar expressões com a configuração do subsistema particular.Após você aplicar o store na sua sequência do keystore, use a seguinte sintaxe para substituir qualquer sequência de texto limpo por uma criptografada.${VAULT::<replaceable>VAULT_BLOCK</replaceable>::<replaceable>ATTRIBUTE_NAME</replaceable>::<replaceable>ENCRYPTED_VALUE</replaceable>}${VAULT::<replaceable>VAULT_BLOCK</replaceable>::<replaceable>ATTRIBUTE_NAME</replaceable>::<replaceable>ENCRYPTED_VALUE</replaceable>}Copy to Clipboard Copied! Toggle word wrap Toggle overflow Segue abaixo uma amostra do valor de mundo real, onde o bloco vault éds_ExampleDSe o atributo épassword.<password>${VAULT::ds_ExampleDS::password::1}</password><password>${VAULT::ds_ExampleDS::password::1}</password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
10.11.6. Store e Sequência Confidencial à Resolução em seus Aplicativos Copiar o linkLink copiado para a área de transferência!
Os elementos de configuração do JBoss EAP 6 suportam a habilidade de resolver as sequências criptografadas em relação aos valores stored no Java Keystore através do mecanismo Security Vault. Você pode adicionar suporte deste recurso aos seus próprios aplicativos.
Antes de executar este procedimento, certifique-se de que o diretório para realizar o storing em seus arquivos vault existe. Não importa onde você os posiciona, contanto que o usuário que executa o JBoss EAP 6 possua permissão para leitura e escrita dos arquivos. Essa amostra posiciona o diretório vault/ no diretório /home/USER/vault/. O próprio vault é um arquivo chamado vault.keystore dentro do diretório vault/.
Exemplo 10.11. Adição da Sequência da Senha ao Vault
EAP_HOME/bin/vault.sh. As séries completas de comandos e respostas estão incluídos no seguinte resultado da tela. Os valores inseridos pelo usuário são enfatizados. Alguns resultados são removidos para formatação. No Microsoft Windows, o nome do comando é vault.bat. Perceba que no Microsoft Windows, os caminhos de arquivo usam o caractere \ como um separador de diretório ao invés do caractere /.
VAULT.
Exemplo 10.12. Servlet usando uma Senha com Vault
10.12. LDAP Copiar o linkLink copiado para a área de transferência!
10.12.1. LDAP Copiar o linkLink copiado para a área de transferência!
10.12.2. Uso do LDAP para Autenticação das Interfaces de Gerenciamento Copiar o linkLink copiado para a área de transferência!
- Criação de uma conexão outbound para o servidor LDAP.
- Crie um realm de segurança habilitado LDAP.
- Referencie o novo security domain na Interface de Gerenciamento.
A conexão outbound LDAP permite os seguintes atributos:
| Função | Solicitado | Descrição |
|---|---|---|
| url | sim |
O endereço URL do servidor do diretório.
|
| search-dn | sim |
O distinguished name (DN - nome distinguido) do usuário autorizado a executar as buscas.
|
| search-credentials | sim |
A senha do usuário autorizado a executar as buscas.
|
| initial-context-factory | não |
A criação do contexto inicial para uso quando estabelecendo a conexão. O default é
com.sun.jndi.ldap.LdapCtxFactory.
|
| security-realm | não |
O security realm de referência para obter um
SSLContext configurado para uso quando estabelecendo a conexão.
|
Exemplo 10.13. Adição de uma Conexão Outbound LDAP
- DN de busca:
cn=search,dc=acme,dc=com - Credencial de busca:
myPass - URL:
ldap://127.0.0.1:389
/host=master/core-service=management/security-realm=ldap_security_realm:add
/host=master/core-service=management/security-realm=ldap_security_realm:add
/host=master/core-service=management/ldap-connection=ldap_connection/:add(search-credential=myPass,url=ldap://127.0.0.1:389,search-dn="cn=search,dc=acme,dc=com")
/host=master/core-service=management/ldap-connection=ldap_connection/:add(search-credential=myPass,url=ldap://127.0.0.1:389,search-dn="cn=search,dc=acme,dc=com")
As Interfaces de Gerenciamento podem autenticar em relação ao servidor LDAP ao invés do arquivo de propriedade baseado nos realms de segurança configurados por default. O autenticador LDAP opera primeiramente estabelecendo uma conexão ao servidor do diretório remoto. Ele então executa uma busca usando o nome do usuário que o usuário passou ao sistema de autenticação, com o objetivo de encontrar o distinguished name (DN - nome distinguido) inteiramente qualificado. Uma nova conexão é estabelecida usando o DN do usuário como credencial e senha suprida pelo usuário. Caso esta autenticação ao servidor LDAP for bem sucedida, o DN é confirmado como válido.
- conexão
- O nome da conexão definido no
<outbound-connections>para uso da conexão ao diretório LDAP. - base-dn
- O nome distinguido do contexto para iniciar a busca pelo usuário.
- recursivo
- Se é que a busca deve ser recursiva através da árvore do diretório LDAP ou apenas buscar o contexto especificado. O default é
false. - user-dn
- O atributo do usuário que mantém o nome distinguido. Isto é subsequentemente usado para testar a autenticação assim que usuário puder completar. O default é
dn. - Um dos
username-filterouadvanced-filtercomo um elemento filho - O
username-filterleva um atributo único chamadoattribute, cujo valor é o nome do atributo LDAP que mantém o nome do usuário, tal como ouserNameousambaAccountName.Oadvanced-filterleva um único atributo chamadofilter. Este atributo contém uma fila de filtro na sintaxe do LDAP default. Recomendamos cuidado ao sair de qualquer caractere&alterando-os pelo&. Segue abaixo uma amostra de um filtro:(&(sAMAccountName={0})(memberOf=cn=admin,cn=users,dc=acme,dc=com))(&(sAMAccountName={0})(memberOf=cn=admin,cn=users,dc=acme,dc=com))Copy to Clipboard Copied! Toggle word wrap Toggle overflow Após sair do caractere ampersand, o filtro aparece como:(&(sAMAccountName={0})(memberOf=cn=admin,cn=users,dc=acme,dc=com))(&(sAMAccountName={0})(memberOf=cn=admin,cn=users,dc=acme,dc=com))Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Exemplo 10.14. Representação XML de um Realm de Segurança habilitado LDAP
- connection -
ldap_connection - base-dn -
cn=users,dc=acme,dc=com. - username-filter -
attribute="sambaAccountName"
Atenção
Exemplo 10.15. Adição de um Realm de Segurança LDAP
/host=master/core-service=management/security-realm=ldap_security_realm/authentication=ldap:add(base-dn="DC=mycompany,DC=org", recursive=true, username-attribute="MyAccountName", connection="ldap_connection")
/host=master/core-service=management/security-realm=ldap_security_realm/authentication=ldap:add(base-dn="DC=mycompany,DC=org", recursive=true, username-attribute="MyAccountName", connection="ldap_connection")
Após você criar um realm de segurança, você precisa referenciá-lo na configuração de sua interface de gerenciamento. A interface de gerenciamento usará o realm de segurança para a autenticação de resumo HTTP.
Exemplo 10.16. Aplicação do Realm de Segurança à Interface HTTP
/host=master/core-service=management/management-interface=http-interface/:write-attribute(name=security-realm,value=ldap-security-realm)
/host=master/core-service=management/management-interface=http-interface/:write-attribute(name=security-realm,value=ldap-security-realm)
Com o objetivo de configurar um managed domain para autenticação ao Microsoft Active Directory, siga este procedimento, que cria um security domain e mapeia as funções aos grupos Active Directory usando a autenticação JAAS. Este procedimento Microsoft Active Directory permite o binding com uma senha vazia. Este procedimento previne que uma senha vazia seja usada com uma plataforma do aplicativo.
master.
Adicione um
<security-realm>nomeadoldap_security_realme configure-o para uso do JAAS.Os seguintes comandos do CLI de Gerenciamento adicionam um novo realm de segurança e determinam o mecanismo de autenticação. Altere o nome do host conforme solicitado./host=master/core-service=management/security-realm=ldap_security_realm/:add
/host=master/core-service=management/security-realm=ldap_security_realm/:addCopy to Clipboard Copied! Toggle word wrap Toggle overflow /host=master/core-service=management/security-realm=ldap_security_realm/authentication=jaas/:add(name=managementLDAPDomain)
/host=master/core-service=management/security-realm=ldap_security_realm/authentication=jaas/:add(name=managementLDAPDomain)Copy to Clipboard Copied! Toggle word wrap Toggle overflow Configuração do
<http-interface>para uso do novo realm de segurança.O seguinte comando do CLI de Gerenciamento configura a interface HTTP./host=master/core-service=management/management-interface=http-interface/:write-attribute(name=security-realm,value=ldap_security_realm)
/host=master/core-service=management/management-interface=http-interface/:write-attribute(name=security-realm,value=ldap_security_realm)Copy to Clipboard Copied! Toggle word wrap Toggle overflow Configuração do JBoss Enterprise Application Platform para adição da configuração JAAS personalizada aos seus parâmetros de inicialização.
Edite o arquivoEAP_HOME/bin/domain.conf. Busque pela variávalHOST_CONTROLLER_JAVA_OPTS. Isto é aonde você adiciona as diretivas para o JVM que são necessárias antes do JBoss Enterprise Application Platform iniciar. Segue abaixo uma amostra dos conteúdos default deste parâmetro:HOST_CONTROLLER_JAVA_OPTS="$JAVA_OPTS"
HOST_CONTROLLER_JAVA_OPTS="$JAVA_OPTS"Copy to Clipboard Copied! Toggle word wrap Toggle overflow Adicione a seguinte diretiva à linha:-Djava.security.auth.login.config=/opt/jboss-eap-6.0/domain/configuration/jaas.conf"A linha editada é parecida ao seguinte:-Djava.security.auth.login.config=/opt/jboss-eap-6.0/domain/configuration/jaas.conf"
-Djava.security.auth.login.config=/opt/jboss-eap-6.0/domain/configuration/jaas.conf"Copy to Clipboard Copied! Toggle word wrap Toggle overflow Adicione o módulo de login às opções do módulo.
No mesmo arquivo, encontre a linha contendo o seguinte:JBOSS_MODULES_SYSTEM_PKGS="org.jboss.byteman"
JBOSS_MODULES_SYSTEM_PKGS="org.jboss.byteman"Copy to Clipboard Copied! Toggle word wrap Toggle overflow Altere a linha para leitura conforme abaixo. Certifique-se de não inserir quaisquer espaços extra.JBOSS_MODULES_SYSTEM_PKGS="org.jboss.byteman,com.sun.security.auth.login"
JBOSS_MODULES_SYSTEM_PKGS="org.jboss.byteman,com.sun.security.auth.login"Copy to Clipboard Copied! Toggle word wrap Toggle overflow Salve e encerre o arquivodomain.conf.Crie a configuração JAAS que será adicionada ao classpath.
Crie um novo arquivo na seguinte localização:EAP_HOME/domain/configuration/jaas.confO arquivo deve conter os seguintes conteúdos. Edite os parâmetros para coincidirem com o seu ambiente.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Reinicie o JBoss Enterprise Application Platform e sua interface HTTP usará o seu servidor LDAP para autenticação.
Capítulo 11. Segurança das Interfaces de Gerenciamento com o Controle de Acesso baseado na Função Copiar o linkLink copiado para a área de transferência!
11.1. Role-Based Access Control (RBAC - Controle de Acesso baseado na Função) Copiar o linkLink copiado para a área de transferência!
11.2. Controle de Acesso baseado na Função no GUI e CLI Copiar o linkLink copiado para a área de transferência!
- Console de Gerenciamento
- No console de gerenciamento alguns controles e visualizações são desativados (acinzentados) ou não são visíveis dependendo das permissões de sua função determinada.Caso você não tenha permissões de leitura a um atributo de recursos, este atributo aparecerá em branco no console. Por exemplo: a maioria das funções não pode ler os campos do nome de usuário e senha para as fontes de dados.Caso você não possua permissões de gravação a um atributo do recurso, este recurso será desativado (acinzentado) na forma editar para o recurso. Caso você não possua permissões de gravação ao recurso, então o botão editar do recurso não irá aparecer.Caso você não possua permissões de acesso ao recurso ou atributo (isto é "não endereçável" a sua função), então isto não aparecerá no console. Uma amostra disto é que o próprio sistema de controle de acesso, do qual é apenas visível a poucas funções por default.
- API de Gerenciamento
- Os usuários que usam a ferramenta
jboss-cli.shou usam o API verão uma pequena diferença de comportamento no API quando o RBAC for habilitado.Os recursos e atributos que não podem ser lidos, são filtrados dos resultados. Caso os itens filtrados forem endereçados pela função, os seus nomes serão listados comofiltered-attributesna seçãoresponse-headersdo resultado. Caso um recurso ou atributo não forem endereçados pela função, eles não são listados.A tentativa de acessar um recurso que não é endereçável resultará num erro de "recurso não encontrado".Caso um usuário tentar escrever ou ler um recurso que ele pode endereçar mas não possui as permissões apropriadas de gravação e leitura, um erro de "Permissão Negada" será retornado.
11.3. Esquemas de Autenticação Suportados Copiar o linkLink copiado para a área de transferência!
username/password, client certificate e local user.
- Nome do Usuário/Senha
- Os usuários são autenticados usando uma combinação de nome do usuário e senha, que é verificada tanto no arquivo
mgmt-users.propertiesou no servidor LDAP. - Certificado do Cliente
- Uso do Trust Store.
- Usuário Local
- O
jboss-cli.shautentica automaticamente como um Usuário Local caso o servidor que está sendo executado na mesma máquina. Por default, o Usuário Local é um membro do grupoSuperUser.
mgmt-users.properties ou um servidor LDAP, aqueles sistemas podem fornecer informação do grupo do usuário. Esta informação pode ser usada pelo JBoss EAP para determinar funções aos usuários.
11.4. Funções Padrões Copiar o linkLink copiado para a área de transferência!
- Monitor
- Os usuários da função Monitor possui poucas permissões e podem apenas ler a configuração atual e o estado do servidor. Esta função é direcionada aos usuários que precisam rastrear e relatar o desempenho do servidor.Os monitores não podem modificar a configuração do servidor, muito menos acessar os dados confidenciais ou operações.
- Operador
- A função de Operador estende a função de Monitor pela adição da habilidade de modificar o estado do período de execução do servidor. Isto significa que os Operadores podem recarregar e desligar o servidor, assim como interromper e concluir os destinos JMS. A função do Operador é ideal para usuários responsáveis por hosts físicos e virtuais do servidor do aplicativo, de forma que eles podem certificar que os servidores podem ser desligados e reiniciados corretamente quando necessário.Os operadores não podem modificar a configuração do servidor ou acessar os dados confidenciais ou operações.
- Mantedor
- A função do Mantedor possui acesso à visualização e modificação do estado do período de execução e todas as configurações com exceção das operações e dados confidenciais. A função do Mantedor é a função do propósito geral que não possui acesso aos dados confidenciais e à operação. A função do Mantedor permite que usuários tenham quase que acesso total ao administrador do servidor sem que os usuários acessem senhas e outras informações confidenciais.Os Mantedores não podem acessar os dados confidenciais ou operações.
- Administrador
- A função do Administrador possui acesso sem restrição a todos os recursos e operações no servidor, com exceção do sistema de logging de auditoria. O Administrador é a única função (com exceção do Super Usuário) que possui acesso aos dados confidenciais e operações. Esta função pode ser também configurar o sistema do controle de acesso. A função de Administrador é apenas solicitada quando manuseando os dados confidenciais ou configurando usuários e funções.
- Super Usuário
- A função de Super Usuário não possui restrições e não possui acesso completo a todos os recursos e operações do servidor, incluindo o sistema de logging de auditoria. Esta função é equivalente aos usuários administrativos de versões anteriores do JBoss EAP 6 (6.0 e 6.1). Caso o RBAC for desativado, todos os usuários de gerenciamento possuíram permissões equivalentes à função de Super Usuário.
- Implantador
- A função de Implantador possui as mesmas permissões da função de Monitor, mas podem modificar a configuração e o estado para implantações e outros tipos de recursos como um recurso do aplicativo.
- Auditor
- A função de Auditor possui todas as permissões da função de Monitor e pode também visualizar (mas não modificar) os dados confidenciais, além de possuir acesso integral ao sistema de logging de auditoria. A função de Auditor é apenas a função de Super Usuário que pode acessar o sistema de logging de auditoria.Os auditores não podem modificar os dados confidenciais ou recursos. Apenas o acesso de leitura é permitido.
11.5. Permissões de Função Copiar o linkLink copiado para a área de transferência!
|
Monitor
|
Operador
|
Mantedor
|
Implantador
|
Auditor
|
Administrador
|
Super Usuário
| |
|
Configuração de Leitura e Estado
|
X
|
X
|
X
|
X
|
X
|
X
|
X
|
|
Ler Dados Confidenciais [2]
|
X
|
X
|
X
| ||||
|
Modificar Dados Confidenciais [2]
|
X
|
X
| |||||
|
Ler/Modificar Log de Auditoria
|
X
|
X
| |||||
|
Modificar o Estado do Período de Execução
|
X
|
X
|
X[1]
|
X
|
X
| ||
|
Modificar a Configuração de Persistência
|
X
|
X[1]
|
X
|
X
| |||
|
Ler/Modificar o Controle de Acesso
|
X
|
X
|
11.6. Restrições Copiar o linkLink copiado para a área de transferência!
- Restrições do Aplicativo
- As Restrições de Aplicativo definem conjuntos de recursos e atributos que podem ser acessados por usuários da função Implantador. Por default, a única Restrição de Aplicativo é core que inclui implantações, sobreposições de implantações. As Restrições do Aplicativo são também incluídas (mas não são habilitadas por default= para fontes de dados, logging, correio, mensagem, nomeação, adaptadores de recurso e segurança. Essas restrições permitem que usuários Implantadores não apenas implantem aplicativos, mas também configurem e mantenham os recursos que são solicitados por aqueles aplicativos.Uma configuração confidencial do aplicativo está no API de Gerenciamento no
/core-service=management/access=authorization/constraint=application-classification. - Restrições Confidenciais
- As Restrições Confidenciais definem conjuntos de recursos que são considerados "confidenciais". Um recurso confidencial é normalmente um que é tanto secreto, como uma senha ou um que terá impactos sérios na operação do servidor, como rede, configuração JVM ou propriedades de sistema. O próprio sistema de controle de acesso é considerado também confidencial.As únicas funções permitidas a gravar recursos confidenciais são o Administrador e Super Usuário. A função de Auditor está apenas disponível para leitura de recursos confidenciais. Nenhuma outra função possui acesso.A configuração de restrição confidencial está no API de Gerenciamento no
/core-service=management/access=authorization/constraint=sensitivity-classification. - Restrição de Expressão Vault
- A Expressão Vault define se a leitura ou gravação das expressões vault são consideradas uma operação confidencial. Por default, ambas expressões vault de leitura e gravação são uma operação confidencial.A configuração de restrição da Expressão Vault está no API de Gerenciamento no
/core-service=management/access=authorization/constraint=vault-expression.
11.7. JMX e Controle de Acesso Baseado na Função Copiar o linkLink copiado para a área de transferência!
- O API de Gerenciamento do JBoss EAP 6 é exposto como JMX Management Beans. Esses Beans de Gerenciamento são referenciados como "core mbeans" e o acesso aos mesmos é controlado e filtrado exatamente da mesma maneira do próprio API de Gerenciamento subjacente.
- O subsistema JMX é configurado com permissões de gravação "confidenciais". Isto significa que apenas usuário com funções de Administrador de Super Usuário podem realizar alterações ao subsistema. Os usuários com função de Auditor também lêem.
- Por default, os Beans de Gerenciamento são registrados pelos aplicativos e serviços (beans que não são cores) sendo acessados por todos os usuários de gerenciamento, no entanto apenas os usuários com funções de Mantedor, Operador, Administrador, Super Usuário podem gravar nos mesmos.
11.8. Configuração do Controle de Acesso baseado na função Copiar o linkLink copiado para a área de transferência!
11.8.1. Visão Geral das Tarefas de Configuração RBAC Copiar o linkLink copiado para a área de transferência!
- Visualização e configuração das funções determinadas (ou excluídas) a cada usuário
- Visualização e configuração das funções determinadas (ou excluídas) de cada grupo
- Visualização da associação de grupo e usuário por função.
- Configuração da sociedade default por função.
- Criação da função com escopo
- Habilitação e Desabilitação do RBAC
- Alteração da política de combinação de permissão
- Configuração das Restrições de Confidencialidade do Recurso e Recurso do Aplicativo
11.8.2. Habilitação do Role-Based Access Control Copiar o linkLink copiado para a área de transferência!
simple para rbac. Isto pode ser realizado usando a ferramenta jboss-cli.sh ou pela edição do arquivo XML de configuração caso o servidor esteja desativado. Quando o RBAC é desabilitado ou habilitado num servidor em execução, a configuração do servidor deve ser recarregada antes de ser efetiva.
jboss-cli.sh executa com a função de Super Usuário por default na mesma máquina do servidor.
Procedimento 11.1. Habilitação do RBAC
- Para habilitar o RBAC com
jboss-cli.shuse a operaçãowrite-attributede recurso de autorização de acesso para determinar o atributo do provedor aorbac./core-service=management/access=authorization:write-attribute(name=provider, value=rbac)
/core-service=management/access=authorization:write-attribute(name=provider, value=rbac)Copy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Procedimento 11.2. Desabilitação do RBAC
- Para desabilitar o RBAC do
jboss-cli.shuse a operaçãowrite-attributede recurso de autorização de acesso para determinar o atributo do provedor aosimple./core-service=management/access=authorization:write-attribute(name=provider, value=simple)
/core-service=management/access=authorization:write-attribute(name=provider, value=simple)Copy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow
provider do elemento de controle de acesso. Determine o valor para rbac para habilitar e simple para desabilitar.
11.8.3. Alteração da Política de Combinação de Permissão Copiar o linkLink copiado para a área de transferência!
permissive ou rejecting. O default é permissive.
permissive, caso qualquer função for determinada ao usuário que permite uma ação, então a ação é permitida.
rejecting, caso múltiplas funções forem determinadas a um usuário que permite uma ação, então a ação não é permitida.
jboss-cli.sh quando a política é determinada para rejecting.
permission-combination-policy para tanto permissive ou rejecting. Isto pode ser determinado usando a ferramenta jboss-cli.sh ou pela edição do arquivo XML de configuração do servidor caso o servidor estiver desativado.
Procedimento 11.3. Determinação a Política de Combinação de Permissão
- Use a operação
write-attributedo recurso de autorização de acesso para determinar o atributopermission-combination-policyao nome da política requerida./core-service=management/access=authorization:write-attribute(name=permission-combination-policy, value=POLICYNAME)
/core-service=management/access=authorization:write-attribute(name=permission-combination-policy, value=POLICYNAME)Copy to Clipboard Copied! Toggle word wrap Toggle overflow Os nomes da política válidas estão rejeitando e permissivos.[standalone@localhost:9999 /] /core-service=management/access=authorization:write-attribute(name=permission-combination-policy, value=rejecting) {"outcome" => "success"} [standalone@localhost:9999 access=authorization][standalone@localhost:9999 /] /core-service=management/access=authorization:write-attribute(name=permission-combination-policy, value=rejecting) {"outcome" => "success"} [standalone@localhost:9999 access=authorization]Copy to Clipboard Copied! Toggle word wrap Toggle overflow
permission-combination-policy do elemento de controle de acesso.
11.9. Gerenciando Funções Copiar o linkLink copiado para a área de transferência!
11.9.1. Membro da Função Copiar o linkLink copiado para a área de transferência!
- O usuário for:
- listado como usuário a ser incluído na função, ou
- um membro de um grupo que é listado a ser incluído na função.
- O usuário não está:
- listado como um usuário para excluir a função, ou
- um membro de um grupo que é listado a ser excluído da função.
jboss-cli.sh.
11.9.2. Configuração do Trabalho da Função do Grupo com o jboss-cli.sh Copiar o linkLink copiado para a área de transferência!
jboss-cli.sh. Este tópico apenas apresenta o uso do Gerenciamento do Console.
- Efetue o login ao Console de Gerenciamento.
- Clique em Administrar
- Expanda o item do menu Server Configurations na parte esquerda do console e selecione o servidor relevante da lista.
- Selecione a tab USUÁRIOS.
Figura 11.1. Gerenciamento da Função do Usuário no Console de Gerenciamento
Procedimento 11.4. Criar uma Nova Função
- Realize o login ao console de gerenciamento.
- Navegue à tab dos Usuários da seção do Trabalho da Função.
- Clique no botão Adicionar no topo direito da página da lista de usuário. O diálogo Adicionar Usuários irá aparecer.
Figura 11.2. Diálogo Adicionar e Remover
- Você deve especificar um nome de usuário.
- Selecione o menu de tipo para inclusão ou exclusão.
- Clique na opção das funções para inclusão ou exclusão. Você pode usar a tecla Control (tecla de Comando no OSX) para verificar os item múltiplos.
- Clique em salvar.Quando o procedimento ocorrer com êxito, o diálogo Adicionar Usuário encerrará e a lista de usuários será atualizada para que as alterações tenham efeito. Caso não haja êxito, uma mensagem "Falha ao salvar o trabalho da função" será exibida.
Procedimento 11.5. Criar uma Nova Função
- Realize o login ao console de gerenciamento.
- Navegue à tab dos Usuários da seção do Trabalho da Função.
- Selecione o contato da sua lista de contatos.
- Clique aqui para editar o Método
Figura 11.3. Filtrar caixa de seleção na Visualização do Filtro
Aqui você pode adicionar e remover funções determinadas e excluídas do usuário.- Selecione uma função onde você deseja atribuir um grupo de LDAP de ou para uma lista de funções existentes.
- Selecione uma função onde você deseja atribuir um grupo de LDAP de ou para uma lista de funções existentes.
- Selecione uma função onde você deseja atribuir um grupo de LDAP de ou para uma lista de funções existentes.
- Com o objetivo de excluir uma função, selecione a função solicitada da lista das funções excluídas no canto direito e clique no botão com a flecha indicando para a esquerda, próxima à lista de funções excluídas.
- Clique em salvar.Quando houver êxito, a visualização editar encerra e a lista de usuários é atualizada para refletir as alterações realizadas. Caso não ocorra êxito, uma mensagem "Falha ao salvar o trabalho da função" será exibida.
Procedimento 11.6. Remover o trabalho da função para o usuário
- Realize o login ao console de gerenciamento.
- Navegue à tab dos Usuários da seção do Trabalho da Função.
- Selecione um usuário da lista.
- Clique no botão Remover. A confirmação da Remoção do Trabalho da Função irá aparecer.
- Clique no botão Confirmar.Quando o procedimento ocorrer com êxito, o usuário não irá mais aparecer na lista de trabalhos da função do usuário.
Importante
11.9.3. Configuração da Determinação da Função do Usuário com o jboss-cli.sh Copiar o linkLink copiado para a área de transferência!
jboss-cli.sh. Este tópico apresenta apenas o uso da ferramenta jboss-cli.sh.
/core-service=management/access=authorization como elementos role-mapping.
Procedimento 11.7. Visualização da Configuração da Determinação da Função do Grupo
- Use a operação read-children-names para obter uma lista das funções configuradas:
/core-service=management/access=authorization:read-children-names(child-type=role-mapping)
/core-service=management/access=authorization:read-children-names(child-type=role-mapping)Copy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Use a operação
read-resourcede um role-mapping especificado para obter detalhes completos de uma função específica:/core-service=management/access=authorization/role-mapping=ROLENAME:read-resource(recursive=true)
/core-service=management/access=authorization/role-mapping=ROLENAME:read-resource(recursive=true)Copy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Procedimento 11.8. Adição de uma nova função
- Use a operação
addpara adicionar uma nova configuração da função./core-service=management/access=authorization/role-mapping=ROLENAME:add
/core-service=management/access=authorization/role-mapping=ROLENAME:addCopy to Clipboard Copied! Toggle word wrap Toggle overflow O ROLENAME é o nome da função que o novo mapeamento é destinado.[standalone@localhost:9999 access=authorization] ./role-mapping=AUDITOR:add {"outcome" => "success"} [standalone@localhost:9999 access=authorization][standalone@localhost:9999 access=authorization] ./role-mapping=AUDITOR:add {"outcome" => "success"} [standalone@localhost:9999 access=authorization]Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Procedimento 11.9. Adição de um usuário conforme incluído na função
- Use a operação
addpara adicionar a entrada do usuário para lista de inclusão da função./core-service=management/access=authorization/role-mapping=ROLENAME/include=ALIAS:add(name=USERNAME, type=USER)
/core-service=management/access=authorization/role-mapping=ROLENAME/include=ALIAS:add(name=USERNAME, type=USER)Copy to Clipboard Copied! Toggle word wrap Toggle overflow O ROLENAME é o nome da função a ser configurado.OALIASé um nome único para este mapeamento. A Red Hat recomenda que você use a convenção de nomeação para seus aliases tais comouser-USERNAME.O USERNAME é o nome do usuário sendo adicionado à lista de inclusão.[standalone@localhost:9999 access=authorization] ./role-mapping=AUDITOR/include=user-max:add(name=max, type=USER) {"outcome" => "success"} [standalone@localhost:9999 access=authorization][standalone@localhost:9999 access=authorization] ./role-mapping=AUDITOR/include=user-max:add(name=max, type=USER) {"outcome" => "success"} [standalone@localhost:9999 access=authorization]Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Procedimento 11.10. Adição de um usuário conforme excluído na função
- Use a operação
addpara adicionar a entrada do usuário para lista de exclusão da função./core-service=management/access=authorization/role-mapping=ROLENAME/exclude=ALIAS:add(name=USERNAME, type=USER)
/core-service=management/access=authorization/role-mapping=ROLENAME/exclude=ALIAS:add(name=USERNAME, type=USER)Copy to Clipboard Copied! Toggle word wrap Toggle overflow O ROLENAME é o nome da função a ser configurado.O USERNAME é o nome do usuário sendo adicionado à lista de exclusão.OALIASé um nome único para este mapeamento. A Red Hat recomenda que você use a convenção de nomeação para seus aliases tais comouser-USERNAME.[standalone@localhost:9999 access=authorization] ./role-mapping=AUDITOR/exclude=user-max:add(name=max, type=USER) {"outcome" => "success"} [standalone@localhost:9999 access=authorization][standalone@localhost:9999 access=authorization] ./role-mapping=AUDITOR/exclude=user-max:add(name=max, type=USER) {"outcome" => "success"} [standalone@localhost:9999 access=authorization]Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Procedimento 11.11. Remoção da configuração de inclusão da função do usuário
- Use a operação
removepara remover a entrada./core-service=management/access=authorization/role-mapping=ROLENAME/include=ALIAS:remove
/core-service=management/access=authorization/role-mapping=ROLENAME/include=ALIAS:removeCopy to Clipboard Copied! Toggle word wrap Toggle overflow O ROLENAME é o nome da função sendo configurada.OALIASé um nome único para este mapeamento. A Red Hat recomenda que você use a convenção de nomeação para seus aliases tais comouser-USERNAME.[standalone@localhost:9999 access=authorization] ./role-mapping=AUDITOR/include=user-max:remove {"outcome" => "success"} [standalone@localhost:9999 access=authorization][standalone@localhost:9999 access=authorization] ./role-mapping=AUDITOR/include=user-max:remove {"outcome" => "success"} [standalone@localhost:9999 access=authorization]Copy to Clipboard Copied! Toggle word wrap Toggle overflow A remoção do usuário a partir da lista de inclusões não remove o usuário do sistema e não garante que a função não será determinada ao usuário. A função pode ser determinada baseada na associação do grupo.
Procedimento 11.12. Remoção da configuração de exclusão da função do usuário
- Use a operação
removepara remover a entrada./core-service=management/access=authorization/role-mapping=ROLENAME/exclude=ALIAS:remove
/core-service=management/access=authorization/role-mapping=ROLENAME/exclude=ALIAS:removeCopy to Clipboard Copied! Toggle word wrap Toggle overflow O ROLENAME é o nome da função a ser configurado.OALIASé um nome único para este mapeamento. A Red Hat recomenda que você use a convenção de nomeação para seus aliases tais comouser-USERNAME.[standalone@localhost:9999 access=authorization] ./role-mapping=AUDITOR/exclude=user-max:remove {"outcome" => "success"} [standalone@localhost:9999 access=authorization][standalone@localhost:9999 access=authorization] ./role-mapping=AUDITOR/exclude=user-max:remove {"outcome" => "success"} [standalone@localhost:9999 access=authorization]Copy to Clipboard Copied! Toggle word wrap Toggle overflow A remoção do usuário a partir da lista de exclusões não remove o usuário do sistema e não garante que a função será determinada ao usuário. A função pode ser excluída baseada na associação do grupo.
11.9.4. Funções e Grupos de Usuários Copiar o linkLink copiado para a área de transferência!
mgmt-users.properties ou um servidor LDAP podem ser membros dos grupos do usuário. Um grupo de usuário é um rótulo arbitrário que pode ser determinado a um ou mais usuários.
mgmt-users.properties, a informação do grupo é stored no arquivo mgmt-groups.properties. Quando usando o LDAP, a informação do grupo é stored no servidor LDAP e mantida pelo servidor LDAP.
11.9.5. Configuração da Determinação da Função do Grupo Copiar o linkLink copiado para a área de transferência!
jboss-cli.sh. Este tópico apresenta apenas o uso do Console de Gerenciamento.
- Efetue o Login ao Console de Gerenciamento.
- Clique na tab Administração.
- Expanda o item do Controle de Acesso no canto esquerdo e selecione o Trabalho da Função.
- Selecione a tab GRUPOS.
Figura 11.4. Gerenciamento da Função do Grupo no Console de Gerenciamento
Procedimento 11.13. Crie uma novo trabalho à função para um grupo
- Realize o login ao console de Gerenciamento
- Navegue à tab GRUPOS da seção do Trabalho de Função.
- Clique no botão Adicionar no canto direito superior da lista de usuários. O diálogo Adicionar Grupo irá aparecer.
Figura 11.5. Diálogo Adicionar Grupo
- Especifique o nome do grupo e opcionalmente o realm.
- Determine o tipo de menu de inclusão ou exclusão.
- Clique nas opções das funções para inclusão ou exclusão. Você pode usar a tecla Control (Tecla de Comando no OSX) para verificar itens múltiplos.
- Clique em salvar.Quando concluído com êxito, o diálogo Adicionar Grupo encerrará e a lista de grupos é atualizada para que as mudanças realizadas sejam refletidas. Caso a não ocorra êxito, uma mensagem "Falha ao salvar o trabalho da função" será exibida.
Procedimento 11.14. Atualize o trabalho da função para um grupo
- Realize o login ao console de gerenciamento.
- Navegue à tab GRUPOS da seção do Trabalho de Função.
- Selecione o grupo da lista.
- Clique em editar. A visualização da seleção insere o modo Editar.
Figura 11.6. Selecione o Modo Editar de Visualização
Aqui você pode adicionar e remover funções excluídas e determinadas a partir de um grupo:- Selecione uma função onde você deseja atribuir um grupo de LDAP de ou para uma lista de funções existentes.
- Selecione uma função onde você deseja atribuir um grupo de LDAP de ou para uma lista de funções existentes.
- Com o objetivo de excluir uma função, selecione a função solicitada a partir da lista de funções disponíveis no canto esquerdo e clique no botão com de flecha indicando o lado direito para a lista de funções excluídas.
- Com o objetivo de excluir uma função, selecione a função solicitada a partir da lista das funções excluídas no canto direito e clique no botão com uma flecha indicando o lado esquerdo próxima à lista de funções excluídas. A função muda da lista excluída à lista disponível.
- Clique em salvar.Quando houver êxito, a visualização editar encerra e a lista de grupos é atualizada para refletir as alterações realizadas. Caso não ocorra êxito, uma mensagem "Falha ao salvar o trabalho da função" será exibida.
Procedimento 11.15. Remova o trabalho da função para um grupo.
- Realize o login ao console de gerenciamento.
- Navegue à tab GRUPOS da seção do Trabalho de Função.
- Selecione o grupo da lista.
- Clique no botão Remover. A confirmação da Remoção do Trabalho da Função irá aparecer.
- Clique no botão confirmar.Quando com êxito, a função não irá mais aparecer na lista dos trabalhos da função do usuárioA remoção do grupo da lista dos trabalhos de função não remove o grupo de usuários do sistema, nem garante que nenhuma função será determinada aos membros daquele grupo. Cada membro do grupo pode ter uma função determinada diretamente.
11.9.6. Configuração da Determinação da Função do Grupo com jboss-cli.sh Copiar o linkLink copiado para a área de transferência!
jboss-cli.sh. Este tópico apresenta apenas o uso da ferramenta jboss-cli.sh.
/core-service=management/access=authorization como elementos role-mapping.
Procedimento 11.16. Visualização da Configuração da Determinação da Função do Grupo
- Use a operação
read-children-namespara obter uma lista das funções configuradas:/core-service=management/access=authorization:read-children-names(child-type=role-mapping)
/core-service=management/access=authorization:read-children-names(child-type=role-mapping)Copy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Use a operação
read-resourcede um role-mapping especificado para obter detalhes completos de uma função específica:/core-service=management/access=authorization/role-mapping=ROLENAME:read-resource(recursive=true)
/core-service=management/access=authorization/role-mapping=ROLENAME:read-resource(recursive=true)Copy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Procedimento 11.17. Adição de uma nova função
- Use a operação
addpara adicionar uma nova configuração da função./core-service=management/access=authorization/role-mapping=ROLENAME:add
/core-service=management/access=authorization/role-mapping=ROLENAME:addCopy to Clipboard Copied! Toggle word wrap Toggle overflow [standalone@localhost:9999 access=authorization] ./role-mapping=AUDITOR:add {"outcome" => "success"} [standalone@localhost:9999 access=authorization][standalone@localhost:9999 access=authorization] ./role-mapping=AUDITOR:add {"outcome" => "success"} [standalone@localhost:9999 access=authorization]Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Procedimento 11.18. Adição de um Grupo conforme incluído na função
- Use a operação
addpara adicionar a entrada do Grupo para incluir uma lista da função./core-service=management/access=authorization/role-mapping=ROLENAME/include=ALIAS:add(name=GROUPNAME, type=GROUP)
/core-service=management/access=authorization/role-mapping=ROLENAME/include=ALIAS:add(name=GROUPNAME, type=GROUP)Copy to Clipboard Copied! Toggle word wrap Toggle overflow O ROLENAME é o nome da função a ser configurado.O GROUPNAME é o nome do grupo sendo adicionado à lista de inclusão.OALIASé um nome único para este mapeamento. A Red Hat recomenda que você use a convenção de nomeação para seus aliases tais comogroup-GROUPNAME.[standalone@localhost:9999 access=authorization] ./role-mapping=AUDITOR/include=group-investigators:add(name=investigators, type=GROUP) {"outcome" => "success"} [standalone@localhost:9999 access=authorization][standalone@localhost:9999 access=authorization] ./role-mapping=AUDITOR/include=group-investigators:add(name=investigators, type=GROUP) {"outcome" => "success"} [standalone@localhost:9999 access=authorization]Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Procedimento 11.19. Adição de um grupo como excluído à função
- Use a operação
addpara adicionar a entrada do grupo que exclui a lista da função./core-service=management/access=authorization/role-mapping=ROLENAME/exclude=ALIAS:add(name=GROUPNAME, type=GROUP)
/core-service=management/access=authorization/role-mapping=ROLENAME/exclude=ALIAS:add(name=GROUPNAME, type=GROUP)Copy to Clipboard Copied! Toggle word wrap Toggle overflow O ROLENAME é o nome da função sendo configurada.O GROUPNAME é o nome do grupo sendo adicionado à lista de inclusãoOALIASé um nome único para este mapeamento. A Red Hat recomenda que você use a convenção de nomeação para seus aliases tais comogroup-GROUPNAME.[standalone@localhost:9999 access=authorization] ./role-mapping=AUDITOR/exclude=group-supervisors:add(name=supervisors, type=USER) {"outcome" => "success"} [standalone@localhost:9999 access=authorization][standalone@localhost:9999 access=authorization] ./role-mapping=AUDITOR/exclude=group-supervisors:add(name=supervisors, type=USER) {"outcome" => "success"} [standalone@localhost:9999 access=authorization]Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Procedimento 11.20. Remoção da configuração de inclusão da função do grupo
- Use a operação
removepara remover a entrada./core-service=management/access=authorization/role-mapping=ROLENAME/include=ALIAS:remove
/core-service=management/access=authorization/role-mapping=ROLENAME/include=ALIAS:removeCopy to Clipboard Copied! Toggle word wrap Toggle overflow O ROLENAME é o nome da função sendo configurada.OALIASé um nome único para este mapeamento. A Red Hat recomenda que você use a convenção de nomeação para seus aliases tais comogroup-GROUPNAME.[standalone@localhost:9999 access=authorization] ./role-mapping=AUDITOR/include=group-investigators:remove {"outcome" => "success"} [standalone@localhost:9999 access=authorization][standalone@localhost:9999 access=authorization] ./role-mapping=AUDITOR/include=group-investigators:remove {"outcome" => "success"} [standalone@localhost:9999 access=authorization]Copy to Clipboard Copied! Toggle word wrap Toggle overflow A remoção do grupo a partir da lista de inclusões não remove o grupo do sistema e não garante que a função não será determinada aos usuários deste grupo. A função pode ser determinada aos usuários no grupo individualmente.
Procedimento 11.21. Remoção de uma entrada de exclusão do grupo de usuário
- Use a operação
removepara remover a entrada./core-service=management/access=authorization/role-mapping=ROLENAME/exclude=ALIAS:remove
/core-service=management/access=authorization/role-mapping=ROLENAME/exclude=ALIAS:removeCopy to Clipboard Copied! Toggle word wrap Toggle overflow O ROLENAME é o nome da função a ser configurado.OALIASé um nome único para este mapeamento. A Red Hat recomenda que você use a convenção de nomeação para seus aliases tais comogroup-GROUPNAME.[standalone@localhost:9999 access=authorization] ./role-mapping=AUDITOR/exclude=group-supervisors:remove {"outcome" => "success"} [standalone@localhost:9999 access=authorization][standalone@localhost:9999 access=authorization] ./role-mapping=AUDITOR/exclude=group-supervisors:remove {"outcome" => "success"} [standalone@localhost:9999 access=authorization]Copy to Clipboard Copied! Toggle word wrap Toggle overflow A remoção do grupo da lista de exclusões não remove o grupo do sistema. Além disso, isto não garante que a função será determinada aos membros do grupo. As funções podem ser excluídas baseadas na associação do grupo.
11.9.7. Autorização e Carregamento de Grupo com o LDAP Copiar o linkLink copiado para a área de transferência!
Importante
username-to-dn
username-to-dn é como isto é definido, este elemento é apenas requerido caso ambos abaixo forem verdadeiros:
- A etapa de autenticação não ocorreu em relação ao LDAP.
- A busca em grupo está usando nome distinto durante a busca.
- 1:1 username-to-dn
- Está é a forma mais básica de configuração e é usada para especificar que o nome do usuário inserido pelo usuário remoto é na realidade nome distinto de usuários.
<username-to-dn> <username-is-dn /> </username-to-dn>
<username-to-dn> <username-is-dn /> </username-to-dn>Copy to Clipboard Copied! Toggle word wrap Toggle overflow Uma vez que isto está definindo um mapeamento 1:1, não há configuração adicional possível. - username-filter
- A próxima opção é bastante parecida à opção simples descrita acima para a etapa de autenticação. É necessário apenas que um atributo especificado seja pesquisado pela combinação do nome do usuário fornecido.
<username-to-dn> <username-filter base-dn="dc=people,dc=harold,dc=example,dc=com" recursive="false" attribute="sn" user-dn-attribute="dn" /> </username-to-dn><username-to-dn> <username-filter base-dn="dc=people,dc=harold,dc=example,dc=com" recursive="false" attribute="sn" user-dn-attribute="dn" /> </username-to-dn>Copy to Clipboard Copied! Toggle word wrap Toggle overflow Os atributos que podem ser configurados:base-dn: O nome distinto do contexto para início da busca.recursive: Se é que a busca será estendida aos sub contextos. O default éfalse.attribute: O atributo da entrada dos usuários para tentar e combinar em relação ao nome do usuário fornecido. O default éuid.user-dn-attribute: O atributo de leitura para obter nome distinto de usuários. O default édn.
- advanced-filter
- A opção final é especificar um filtro avançado, assim como na seção de autenticação, esta é uma oportunidade de uso de um filtro personalizado para localizar o nome distinto de usuários.
<username-to-dn> <advanced-filter base-dn="dc=people,dc=harold,dc=example,dc=com" recursive="false" filter="sAMAccountName={0}" user-dn-attribute="dn" /> </username-to-dn><username-to-dn> <advanced-filter base-dn="dc=people,dc=harold,dc=example,dc=com" recursive="false" filter="sAMAccountName={0}" user-dn-attribute="dn" /> </username-to-dn>Copy to Clipboard Copied! Toggle word wrap Toggle overflow Para atributos que coincidem com aqueles no username-filter, o significado e os valores default são os mesmos de forma que você não precisará listá-los novamente. Isto leva a um novo atributo:filter: O filtro personalizado usado para buscar por usuários quando o nome do usuário será substituído no place holder{0}.
Importante
O XML deve permanecer válido após o filtro ser definido de forma que quaisquer caracteres especiais são usados como&garantindo que uma forma apropriada seja usada. Por exemplo,&para o caratere&.
Busca do Grupo
Exemplo 11.1. Principal ao Grupo - amostra LDIF.
TestUserOne que é um membro do GroupOne. O GroupOne é, então, em retorno um membro do GroupFive. A afiliação do grupo é apresentada pelo uso de um atributo memberOf que é configurado ao nome distinto do grupo que o usuário (ou grupo) pertence.
memberOf, um para cada grupo que o usuário pertence.
Exemplo 11.2. Grupo ao Principal - Amostra LDIF
TestUserOne que é um membro do GroupOne que é em troca um membro do GroupFive. No entanto, neste caso isto é um atributo uniqueMember a partir do grupo do usuário sendo usado para a referência múltipla.
Busca Geral de Grupo
<group-search group-name="..." iterative="..." group-dn-attribute="..." group-name-attribute="..." >
...
</group-search>
<group-search group-name="..." iterative="..." group-dn-attribute="..." group-name-attribute="..." >
...
</group-search>
group-name: Este atributo é usado para especificar a forma de uso pelo nome de grupo retornado uma vez que a lista de grupos do usuário é um membro. Isto pode ser simplesmente pelo nome do usuário ou nome distinto de grupos, caso o nome distinto solicitar seja solicitado, este atributo pode ser configurado paraDISTINGUISHED_NAME. O default éSIMPLE.iterative: Este atributo é usado para indicar se após a identificação de grupos que o usuário pertence, nós devemos também buscar iterativamente baseando-se em grupos para identificar quais grupos dos grupos um membro pertence. Caso a busca iterativa for habilitada, nós damos continuidade até alcançarmos um grupo que não é membro, caso quaisquer outros grupos ou um ciclo seja detectado. O default éfalse.
Importante
group-dn-attribute: Numa entrada a um grupo que o atributo encontra-se para um nome distinto. O default édn.group-name-attribute: Numa entrada a um grupo que o atributo encontra-se for um nome simples. O default éuid.
Exemplo 11.3. Principal à Configuração da Amostra do Grupo
memberOf do usuário.
principal-to-group já foi adicionado com um atributo único.
group-attribute: O nome do atributo na entrada do usuário que coincide com o nome distinto que o grupo do usuário pertence. O default émemberOf.
Exemplo 11.4. Grupo à Configuração da Amostra Principal
group-to-principal adicionado. Este elemento é usado para definir como as buscas pelos grupos que referenciam a entrada do usuário serão desempenhadas. Os seguintes atributos são determinados:
base-dn: O nome distinto do contexto em uso para iniciar a busca.recursive: Se é que os subcontextos também são pesquisados. O default éfalse.search-by: A forma do nome de função usado nas buscas. Os válidos sãoSIMPLEeDISTINGUISHED_NAME. O default éDISTINGUISHED_NAME.
principal-attribute: O nome do atributo na entrada do grupo que referência a entrada do usuário. O default émember.
11.9.8. Funções com Escopo Copiar o linkLink copiado para a área de transferência!
- Um nome único.
- Quais das funções padrões isto está baseado.
- Caso seja aplicada aos Grupos do Servidor ou Hosts
- A lista dos grupos de servidor ou hosts que está restrita.
- Caso todos os usuários estiverem automaticamente incluídos. O default é falso.
- Funções com escopo host
- A função com escopo host restringe as permissões daquela função a um ou mais hosts. Isto significa que o acesso é fornecido às árvores do recurso
/host=*/relevante, mas os recursos que são específicos aos demais hosts estão ocultos. - Funções do Grupo do Servidor com escopo
- A função que é grupo do servidor com escopo restringe as permissões daquela função a um ou mais grupos. Além disso, as permissões da função será aplicada ao perfil, grupo binding de socket, configuração do servidor e recursos do servidor que estão associados com os grupos do servidor específico. Quaisquer sub-recursos com qualquer um daqueles que não estão logicamente relatados ao grupo do servidor, não serão visíveis aos usuários.
11.9.9. Criação de Funções com Escopo Copiar o linkLink copiado para a área de transferência!
- Realize o login ao Console de Gerenciamento
- Clique na tab Administração
- Expanda o item do Controle de Acesso no canto esquerdo e selecione Trabalho da Função
- Selecione a tab FUNÇÕES e a tab das Funções com Escopo.
Figura 11.7. Configuração da Função com Escopo no Console de Gerenciamento
Procedimento 11.22. Adição de uma Nova Função com Escopo
- Realize o login ao Console de Gerenciamento
- Navegue à área de Funções com Escopo da tab Funções.
- Clique no botão Adicionar. O diálogo Adição da Função com Escopo irá aparecer.
Figura 11.8. Adição do Diálogo com a Função com Escopo
- Especifique os seguintes detalhes:
- Name, o nome único para a nova função com escopo.
- Base Role, a função que será baseada suas permissões.
- Type, se é que a função será restringida aos hosts ou grupos do servidor.
- Scope, a lista dos hosts ou grupos do servidor que a função é restringida. Entradas múltiplas podem ser selecionadas.
- Include All, esta função inclui todos os usuários. O default é não.
- Clique no botão Salvar e o diálogo irá encerrar e a função recentemente criada aparecerá na tabela.
Procedimento 11.23. Edição da Função com Escopo
- Realize o login ao Console de Gerenciamento
- Navegue à área das Funções com Escopo da tab Funções.
- Clique na função com escopo que você deseja editar na tabela. Os detalhes daquela função aparecerá no painel de seleção abaixo da tabela.
Figura 11.9. Função selecionada
- Clique no link Editar no painel de Seleção. O painel de Seleção insere o modo editar.
Figura 11.10. Seleção do Painel no Modo Editar
- Atualize os detalhes que você precisa para a alteração e clique no botão salvar. O painel de Seleção retorna ao seu estado anterior. Ambos painel e tabela de Seleção apresentam os detalhes recentemente atualizados.
Procedimento 11.24. Visualização dos Membros da Função com Escopo
- Realize o login ao Console de Gerenciamento
- Navegue à área das Funções com Escopo da tab Funções.
- Clique na função com escopo na tabela que você deseja visualizar os Membros e clique no botão Membros. Os Membros do diálogo da função irão aparecer. Isto apresenta os usuários e os grupos que são incluídos e excluídos a partir da função.
Figura 11.11. Diálogo da Associação da Função
- Clique no botão Concluído quando você tiver realizado a revisão desta informação.
Procedimento 11.25. Exclua a Função com Escopo
Importante
- Realize o login ao Console de Gerenciamento
- Navegue à área das Funções com Escopo da tab Funções.
- Selecione a função com escopo a ser removida na tabela.
- Clique no botão Remover. O diálogo Remover da Função com Escopo irá aparecer.
- Clique no botão Confirmar. O diálogo encerra e a função é removida.
11.10. Configuração das Restrições Copiar o linkLink copiado para a área de transferência!
11.10.1. Configuração de Security Constraints (Restrições de Segurança) Copiar o linkLink copiado para a área de transferência!
/core-service=management/access=authorization/constraint=sensitivity-classification.
classification. As classificações são agrupadas em types. Existem 39 classificações que são organizadas em 13 tipos.
write-attribute para configurar o atributo configured-requires-read, configured-requires-write ou configured-requires-addressable. Com o objetivo de tornar o tipo de operação confidencial, configure o valor para true. Do contrário, para torná-la não confidencial, configure isto para false. Por default, esses atributos não são configurados e os valores de default-requires-read, default-requires-write e default-requires-addressable são usados. Uma vez que o atributo é configurado, o valor será usado ao invés do default. Os valores default não podem ser alterados.
Exemplo 11.5. Tornando as propriedades do sistema de leitura uma operação confidencial
| Valor | requires-read | requires-write | requires-addressable |
|---|---|---|---|
true
|
A leitura é confidencial.
Apenas o Auditor, Administrador e Super Usuário podem ler.
|
A gravação é confidencial.
Apenas o Administrador e Super Usuário podem gravar.
|
O endereçamento é confidencial.
Apenas o Auditor, Administrador e Super Usuário podem endereçar.
|
false
|
A leitura não é confidencial.
Qualquer usuário de gerenciamento pode ler.
|
A gravação não é confidencial.
Apenas o Mantedor, Administrador e Super Usuário podem gravar. Os implantadores podem também gravar o recurso num recurso do aplicativo.
|
O endereçamento não é confidencial.
Qualquer usuário de gerenciamento pode endereçar.
|
11.10.2. Configuração do Application Resource Constraints (Restrições do Recurso do Aplicativo) Copiar o linkLink copiado para a área de transferência!
/core-service=management/access=authorization/constraint=application-classification/.
classification. As classificações são agrupadas em types. Existem 14 classificações incluídas que são agrupadas em 8 typos. Cada classificação possui um elemento applies-to que é uma lista de default do caminho do recurso pelos quais a configuração das classificações são aplicadas.
core. O core inclui implantações, sobreposições e as operações de implantação.
write-attribute para habilitar o Recurso do Aplicativo para configuração do configured-application attribute da classificação para true. Configure este atributo para false para desabilitação do Recurso do Aplicativo. Por default, esses atributos não são determinados e o valor do default-application attribute é usado. O valor default não pode ser alterado.
Exemplo 11.6. A habilitação da classificação do recurso do aplicativo de perfil do agente de log.
Importante
11.10.3. Configuração do Vault Expression Constraint (Restrição da Expressão Vault) Copiar o linkLink copiado para a área de transferência!
/core-service=management/access=authorization/constraint=vault-expression.
write-attribute para determinar os atributos do configured-requires-write e configured-requires-read para true ou false. Por default, eles não são determinados e os valores default-requires-read default-requires-write são usados. Os valores default não podem ser alterados.
Exemplo 11.7. Gravação às expressões vault numa operação não confidencial
| Valor | requires-read | requires-write |
|---|---|---|
true
|
A operação de leitura é confidencial.
Apenas o Auditor, Administrador e Super Usuário podem ler.
|
A operação de gravação é confidencial.
Apenas o Administrador e Super Usuário podem gravar.
|
false
|
A operação de leitura não é confidencial.
Todos os usuários de gerenciamento podem ler.
|
A operação de gravação não é confidencial.
O Monitor, Administrador e Super Usuário podem gravar. Os implantadores podem gravar também caso a expressão vault estiver num Recurso do Aplicativo.
|
11.11. Referência de Restrições Copiar o linkLink copiado para a área de transferência!
11.11.1. Referência do Application Resource Constraint (Restrição do Recurso do Aplicativo) Copiar o linkLink copiado para a área de transferência!
Tipo: core
- Classificação: deployment-overlay
- default: verdadeiro
Expand CAMINHO Atributos Operações /deployment-overlay=*/deployment=*/upload-deployment-stream, full-replace-deployment, upload-deployment-url, upload-deployment-bytes
Tipo: fonte de dados
- Classificação: fonte de dados
- default: falso
Expand CAMINHO Atributos Operações /deployment=*/subdeployment=*/subsystem=datasources/data-source=*/subsystem=datasources/data-source=*/subsystem=datasources/data-source=ExampleDS/deployment=*/subsystem=datasources/data-source=*
- Classificação: jdbc-driver
- default: falso
Expand CAMINHO Atributos Operações /subsystem=datasources/jdbc-driver=*
- Classificação: xa-data-source
- default: falso
Expand CAMINHO Atributos Operações /subsystem=datasources/xa-data-source=*/deployment=*/subsystem=datasources/xa-data-source=*/deployment=*/subdeployment=*/subsystem=datasources/xa-data-source=*
Tipo: logging
- Classificação: agente de log
- default: falso
Expand CAMINHO Atributos Operações /subsystem=logging/logger=*/subsystem=logging/logging-profile=*/logger=*
- Classificação: logging-profile
- default: falso
Expand CAMINHO Atributos Operações /subsystem=logging/logging-profile=*
Tipo: mail
- Classificação: mail-session
- default: falso
Expand CAMINHO Atributos Operações /subsystem=mail/mail-session=*
Tipo: nomeação
- Classificação: binding
- default: falso
Expand CAMINHO Atributos Operações /subsystem=naming/binding=*
Tipo: resource-adapters
- Classificação: resource-adapters
- default: falso
Expand CAMINHO Atributos Operações /subsystem=resource-adapters/resource-adapter=*
Tipo: segurança
- Classificação: security-domain
- default: falso
Expand CAMINHO Atributos Operações /subsystem=security/security-domain=*
11.11.2. Referência Sensitivity Constraints (Restrições Confidenciais) Copiar o linkLink copiado para a área de transferência!
Tipo: core
- Classificação: access-control
- requires-addressable: verdadeiro
- requires-read: verdadeiro
- requires-write: verdadeiro
Expand CAMINHO atributos operações /core-service=management/access=authorization/subsystem=jmxnon-core-mbean-sensitivity
- Classificação: credencial
- requires-addressable: falso
- requires-read: verdadeiro
- requires-write: verdadeiro
Expand CAMINHO atributos operações /subsystem=mail/mail-session=*/server=pop3username , password/subsystem=mail/mail-session=*/server=imapusername, password/subsystem=datasources/xa-data-source=*user-name, recovery-username, password, recovery-password/subsystem=mail/mail-session=*/custom=*username, password/subsystem=datasources/data-source=*"user-name, password/subsystem=remoting/remote-outbound-connection=*"nome do usuário/subsystem=mail/mail-session=*/server=smtpusername , password/subsystem=web/connector=*/configuration=sslkey-alias, password/subsystem=resource-adapters/resource-adapter=*/connection-definitions=*"recovery-username, recovery-password
- Classificação: domain-controller
- requires-addressable: falso
- requires-read: falso
- requires-write: verdadeiro
Expand CAMINHO atributos operações
- Classificação: domain-names
- requires-addressable: falso
- requires-read: falso
- requires-write: verdadeiro
Expand CAMINHO atributos operações
- Classificação: extensões
- requires-addressable: falso
- requires-read: falso
- requires-write: verdadeiro
Expand CAMINHO atributos operações /extension=*
- Classificação: jvm
- requires-addressable: falso
- requires-read: falso
- requires-write: verdadeiro
Expand CAMINHO atributos operações /core-service=platform-mbean/type=runtimeinput-arguments, boot-class-path, class-path, boot-class-path-supported, library-path
- Classificação: management-interfaces
- requires-addressable: falso
- requires-read: falso
- requires-write: verdadeiro
Expand CAMINHO atributos operações /core-service=management/management-interface=native-interface/core-service=management/management-interface=http-interface
- Classificação: module-loading
- requires-addressable: falso
- requires-read: falso
- requires-write: verdadeiro
Expand CAMINHO atributos operações /core-service=module-loading
- Classificação: patching
- requires-addressable: falso
- requires-read: falso
- requires-write: verdadeiro
Expand CAMINHO atributos operações /core-service=patching/addon=*/core-service=patching/layer=*"/core-service=patching
- Classificação: read-whole-config
- requires-addressable: falso
- requires-read: verdadeiro
- requires-write: verdadeiro
Expand CAMINHO atributos operações /read-config-as-xml
- Classificação: security-domain
- requires-addressable: verdadeiro
- requires-read: verdadeiro
- requires-write: verdadeiro
Expand CAMINHO atributos operações /subsystem=security/security-domain=*
- Classificação: security-domain-ref
- requires-addressable: verdadeiro
- requires-read: verdadeiro
- requires-write: verdadeiro
Expand CAMINHO atributos operações /subsystem=datasources/xa-data-source=*security-domain/subsystem=datasources/data-source=*security-domain/subsystem=ejb3default-security-domain/subsystem=resource-adapters/resource-adapter=*/connection-definitions=*security-domain, recovery-security-domain, security-application, security-domain-and-application
- Classificação: security-realm
- requires-addressable: verdadeiro
- requires-read: verdadeiro
- requires-write: verdadeiro
Expand CAMINHO atributos operações /core-service=management/security-realm=*
- Classificação: security-realm-ref
- requires-addressable: verdadeiro
- requires-read: verdadeiro
- requires-write: verdadeiro
Expand CAMINHO atributos operações /subsystem=remoting/connector=*security-realm/core-service=management/management-interface=native-interfacesecurity-realm/core-service=management/management-interface=http-interfacesecurity-realm/subsystem=remoting/remote-outbound-connection=*security-realm
- Classificação: security-vault
- requires-addressable: falso
- requires-read: falso
- requires-write: verdadeiro
Expand CAMINHO atributos operações /core-service=vault
- Classificação: service-container
- requires-addressable: falso
- requires-read: falso
- requires-write: verdadeiro
Expand CAMINHO atributos operações /core-service=service-container
- Classificação: snapshots
- requires-addressable: falso
- requires-read: falso
- requires-write: falso
Expand CAMINHO atributos operações /take-snapshot, list-snapshots, delete-snapshot
- Classificação: socket-binding-ref
- requires-addressable: falso
- requires-read: falso
- requires-write: falso
Expand CAMINHO atributos operações /subsystem=mail/mail-session=*/server=pop3outbound-socket-binding-ref/subsystem=mail/mail-session=*/server=imapoutbound-socket-binding-ref/subsystem=remoting/connector=*socket-binding/subsystem=web/connector=*socket-binding/subsystem=remoting/local-outbound-connection=*outbound-socket-binding-ref/socket-binding-group=*/local-destination-outbound-socket-binding=*socket-binding-ref/subsystem=remoting/remote-outbound-connection=*outbound-socket-binding-ref/subsystem=mail/mail-session=*/server=smtpoutbound-socket-binding-ref/subsystem=transactionsprocess-id-socket-binding, status-socket-binding, socket-binding
- Classificação: socket-config
- requires-addressable: falso
- requires-read: falso
- requires-write: verdadeiro
Expand CAMINHO atributos operações /interface=*resolve-internet-address/core-service=management/management-interface=native-interfaceport, interface, socket-binding/socket-binding-group=*/core-service=management/management-interface=http-interfaceport, secure-port, interface, secure-socket-binding, socket-binding/resolve-internet-address/subsystem=transactionsprocess-id-socket-max-ports
- Classificação: system-property
- requires-addressable: falso
- requires-read: falso
- requires-write: verdadeiro
Expand CAMINHO atributos operações /core-service=platform-mbean/type=runtimesystem-properties/system-property=*/resolve-expression
Tipo: datasources
- Classificação: data-source-security
- requires-addressable: falso
- requires-read: verdadeiro
- requires-write: verdadeiro
Expand CAMINHO atributos operações /subsystem=datasources/xa-data-source=*user-name, security-domain, password/subsystem=datasources/data-source=*user-name, security-domain, password
Tipo: jdr
- Classificação: jdr
- requires-addressable: falso
- requires-read: falso
- requires-write: verdadeiro
Expand CAMINHO atributos operações /subsystem=jdrgenerate-jdr-report
Tipo: jmx
- Classificação: jmx
- requires-addressable: falso
- requires-read: falso
- requires-write: verdadeiro
Expand CAMINHO atributos operações /subsystem=jmx
Tipo: mail
- Classificação: mail-server-security
- requires-addressable: falso
- requires-read: falso
- requires-write: verdadeiro
Expand CAMINHO atributos operações /subsystem=mail/mail-session=*/server=pop3username, tls, ssl, password/subsystem=mail/mail-session=*/server=imapusername, tls, ssl, password/subsystem=mail/mail-session=*/custom=*username, tls, ssl, password/subsystem=mail/mail-session=*/server=smtpusername, tls, ssl, password
Tipo: naming
- Classificação: jndi-view
- requires-addressable: falso
- requires-read: verdadeiro
- requires-write: verdadeiro
Expand CAMINHO atributos operações /subsystem=namingjndi-view
- Classificação: naming-binding
- requires-addressable: falso
- requires-read: falso
- requires-write: falso
Expand CAMINHO atributos operações /subsystem=naming/binding=*
Tipo: remoting
- Classificação: remoting-security
- requires-addressable: falso
- requires-read: verdadeiro
- requires-write: verdadeiro
Expand CAMINHO atributos operações /subsystem=remoting/connector=*authentication-provider, security-realm/subsystem=remoting/remote-outbound-connection=*username, security-realm/subsystem=remoting/connector=*/security=sasl
Tipo: resource-adapters
- Classificação: resource-adapter-security
- requires-addressable: falso
- requires-read: verdadeiro
- requires-write: verdadeiro
Expand CAMINHO atributos operações /subsystem=resource-adapters/resource-adapter=*/connection-definitions=*security-domain, recovery-username, recovery-security-domain, security-application, security-domain-and-application, recovery-password
Tipo: security
- Classificação: misc-security
- requires-addressable: falso
- requires-read: verdadeiro
- requires-write: verdadeiro
Expand CAMINHO atributos operações /subsystem=securitydeep-copy-subject-mode
Tipo: web
- Classificação: web-access-log
- requires-addressable: falso
- requires-read: falso
- requires-write: falso
Expand CAMINHO atributos operações /subsystem=web/virtual-server=*/configuration=access-log
- Classificação: web-connector
- requires-addressable: falso
- requires-read: falso
- requires-write: falso
Expand CAMINHO atributos operações /subsystem=web/connector=*
- Classificação: web-ssl
- requires-addressable: falso
- requires-read: verdadeiro
- requires-write: verdadeiro
Expand CAMINHO atributos operações /subsystem=web/connector=*/configuration=ssl
- Classificação: web-sso
- requires-addressable: falso
- requires-read: verdadeiro
- requires-write: verdadeiro
Expand CAMINHO atributos operações /subsystem=web/virtual-server=*/configuration=sso
- Classificação: web-valve
- requires-addressable: falso
- requires-read: falso
- requires-write: falso
Expand CAMINHO atributos operações /subsystem=web/valve=*
Capítulo 12. Configuração do Subsistema da Transação Copiar o linkLink copiado para a área de transferência!
12.1. Transações JTS Copiar o linkLink copiado para a área de transferência!
12.1.1. Configuração do ORB para as Transações JTS Copiar o linkLink copiado para a área de transferência!
Nota
full e full-ha apenas. Num servidor autônomo ele está disponível quando você usa as configurações standalone-full.xml ou standalone-full-ha.xml.
Procedimento 12.1. Configuração do ORB usando o Console de Gerenciamento
Visualização das configurações do perfil.
Selecione Profiles (managed domain) ou Profile (servidor autônomo) a partir da parte superior direita do console de gerenciamento. Caso você use um managed domain, selecione tanto o perfil full ou full-ha a partir da caixa de seleção no topo esquerdo superior.Modifique as Configurações Initializers
Expanda o menu Subsystems na parte esquerda, se necessário. Expanda o submenu Container e clique em JacORB.Selecione a tab Initializers e clique no botão Edit da mesma forma que aparece na tela principal.Habilite os interceptores pela configuração do valor Security paraon.Para habilitar o ORB para JTS, configure o valor Transaction Interceptors paraonao invés dospecdefault.Refira-se ao link Need Help? no formulário de explicações detalhadas sobre esses valores. Clique em Save quando você tiver finalizado a edição dos valores.Configuração ORB Avançada
Refira-se às demais seções do formulário para opções de configuração avançada. Cada seção inclui um link Need Help? com a informação detalhada sobre os parâmetros.
Você pode configurar cada aspecto do ORB usando o CLI de Gerenciamento. Os seguintes comandos configuram os inicializadores aos mesmos valores conforme o procedimento acima, para o Console de Gerenciamento. Esta é a configuração mínima para o ORB a ser usado com o JTS.
/profile=full de comandos.
Exemplo 12.1. Habilite os Interceptores de Segurança
/profile=full/subsystem=jacorb/:write-attribute(name=security,value=on)
/profile=full/subsystem=jacorb/:write-attribute(name=security,value=on)
Exemplo 12.2. Habilite o ORB para o JTS
/profile=full/subsystem=jacorb/:write-attribute(name=transactions,value=on)
/profile=full/subsystem=jacorb/:write-attribute(name=transactions,value=on)
Exemplo 12.3. Habilite Transações no Subsistema JacORB
/profile=full/subsystem=jacorb/:write-attribute(name=transactions,value=on)
/profile=full/subsystem=jacorb/:write-attribute(name=transactions,value=on)
Exemplo 12.4. Habilite JTS no Subsistema de Transação
/subsystem=transactions:write-attribute(name=jts,value=true)
/subsystem=transactions:write-attribute(name=jts,value=true)
12.1.2. Configuração JMS. Copiar o linkLink copiado para a área de transferência!
12.1.2.1. Referência aos Atributos de Configuração HornetQ Copiar o linkLink copiado para a área de transferência!
read-resource.
Exemplo 12.5. Amostra
[standalone@localhost:9999 /] /subsystem=messaging/hornetq-server=default:read-resource
[standalone@localhost:9999 /] /subsystem=messaging/hornetq-server=default:read-resource
| Função | Valor de Amostra | Tipo |
|---|---|---|
allow-failback | verdadeiro | BOOLEANO |
async-connection-execution-enabled | verdadeiro | BOOLEANO |
backup | falso | BOOLEANO |
cluster-password | somethingsecure | SEQUÊNCIA |
mask-password | verdadeiro | BOOLEANO |
cluster-user | HORNETQ.CLUSTER.ADMIN.USER | SEQUÊNCIA |
clustered | falso | BOOLEANO |
connection-ttl-override | -1 | LONGO |
create-bindings-dir | verdadeiro | BOOLEANO |
create-journal-dir | verdadeiro | BOOLEANO |
failback-delay | 5000 | LONGO |
failover-on-shutdown | falso | BOOLEANO |
id-cache-size | 2000 | INT |
jmx-domain | org.hornetq | SEQUÊNCIA |
jmx-management-enabled | falso | BOOLEANO |
journal-buffer-size | 100 | LONGO |
journal-buffer-timeout | 100 | LONGO |
journal-compact-min-files | 10 | INT |
journal-compact-percentage | 30 | INT |
journal-file-size | 102400 | LONGO |
journal-max-io | 1 | INT |
journal-min-files | 2 | INT |
journal-sync-non-transactional | verdadeiro | BOOLEANO |
journal-sync-transactional | verdadeiro | BOOLEANO |
journal-type | ASYNCIO | SEQUÊNCIA |
live-connector-ref | referência | SEQUÊNCIA |
log-journal-write-rate | falso | BOOLEANO |
management-address | jms.queue.hornetq.management | SEQUÊNCIA |
management-notification-address | hornetq.notifications | SEQUÊNCIA |
memory-measure-interval | -1 | LONGO |
memory-warning-threshold | 25 | INT |
message-counter-enabled | falso | BOOLEANO |
message-counter-max-day-history | 10 | INT |
message-counter-sample-period | 10000 | LONGO |
message-expiry-scan-period | 30000 | LONGO |
message-expiry-thread-priority | 3 | INT |
page-max-concurrent-io | 5 | INT |
perf-blast-pages | -1 | INT |
persist-delivery-count-before-delivery | falso | BOOLEANO |
persist-id-cache | verdadeiro | BOOLEANO |
persistence-enabled | verdadeiro | BOOLEANO |
remoting-interceptors | indefinido | LISTA |
run-sync-speed-test | falso | BOOLEANO |
scheduled-thread-pool-max-size | 5 | INT |
security-domain | outros | SEQUÊNCIA |
security-enabled | verdadeiro | BOOLEANO |
security-invalidation-interval | 10000 | LONGO |
server-dump-interval | -1 | LONGO |
shared-store | verdadeiro | BOOLEANO |
started | verdadeiro | BOOLEANO |
thread-pool-max-size | 30 | INT |
transaction-timeout | 300000 | LONGO |
transaction-timeout-scan-period | 1000 | LONGO |
version | 2.2.16.Final (HQ_2_2_16_FINAL, 122) | SEQUÊNCIA |
wild-card-routing-enabled | verdadeiro | BOOLEANO |
Atenção
journal-file-size deve ser maior que o tamanho da mensagem enviada ao servidor ou o servidor não estará apto a armazenar a mensagem.
Capítulo 13. Web, Conectores HTTP e Clustering HTTP Copiar o linkLink copiado para a área de transferência!
13.1. Configuração de um Nó Trabalhador mod_cluster Copiar o linkLink copiado para a área de transferência!
O nó trabalhador mod_cluster consiste do servidor do JBoss EAP. Este servidor pode fazer parte de um grupo do servidor num Managed Domain, ou servidor autônomo. O processo separado executando com o JBoss Enterprise Application Plataform, que gerencia todos os nós do cluster é chamado do mestre. Para uma informação conceitual sobre os nós dos trabalhadores, refira-se ao Worker Node no Red Hat JBoss Enterprise Application Platform 6.1 Administration and Configuration Guide. Para uma visão geral da carga de balanceamento HTTPD, refira-se ao Overview of HTTP Connectors no Administration and Configuration Guide.
mod_cluster. Para configurar o subsistema mod_cluster, refira-se ao Configure the mod_cluster Subsystem no Administration and Configuration Guide. Cada nó trabalhador é configurado separadamente, portanto repita este procedimento para cada nó caso você deseje adicioná-lo ao cluster.
Configuração do Nó Trabalhador
- Caso você use um servidor autônomo, ele deve ser iniciado com o perfil
standalone-ha. - Caso você use o managed domain, o seu grupo do servidor deve ser o perfil
haoufull-hae o grupo socket bindingha-socketsoufull-ha-sockets. O JBoss EAP 6 lança o grupo do servidor habilitado com cluster, chamadoother-server-group, que encontra esses requerimentos.
Nota
/profile=full-ha dos comandos.
Procedimento 13.1. Configuração do Nó Trabalhador
Configuração das interfaces da rede.
Por default, as interfaces da rede são default ao127.0.0.1. Cada host físico que realiza o host tanto no servidor autônomo, ou um ou mais servidores num grupo de servidor, necessita que suas interfaces sejam consideradas para uso do próprio endereço IP público, do qual outros servidores podem ver.Para a alteração do endereço IP do host do JBoss EAP 6, você precisa desligar e editar seus arquivos de configuração diretamente. Isto é devido ao API de Gerenciamento que direciona o Console de Gerenciamento e CLI de Gerenciamento basear-se no endereço de gerenciamento estável.Siga as seguintes etapas para alteração do endereço IP de cada servidor do seu cluster ao endereço IP público mestre.- Desligue o servidor completamente.
- Edite o
host.xml, que está noEAP_HOME/domain/configuration/para o managed domain ou o arquivostandalone-ha.xml, que está noEAP_HOME/standalone/configuration/para o servidor autônomo. - Localize o elemento
<interfaces>. Três interfaces são configuradas,management,publiceunsecured. Para cada uma delas, altere o valor127.0.0.1para o endereço IP externo do host. - Para os hosts que participam num managed domain mas não são o mestre, localize o elemento
<host. Perceba que isto não possui o símbolo>, uma vez que isto contém os atributos. Altere o valor de seu atributo de nome a partir domastera um nome único (um nome diferente por escravo). Este nome será usado também pelo escravo para identificar o cluster, portanto faça uma anotação sobre isto. - Para os hosts recém configurados que precisam unir-se ao managed domain, encontre o elemento
<domain-controller>. Comente ou remova o elemento<local />e adicione a linha de comando, alterando o endereço IP (X.X.X.X) ao endereço do controlador de domain. Esta etapa não é válida ao servidor autônomo.<remote host="X.X.X.X" port="${jboss.domain.master.port:9999}" security-realm="ManagementRealm"/><remote host="X.X.X.X" port="${jboss.domain.master.port:9999}" security-realm="ManagementRealm"/>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Salve o arquivo e saia.
Configuração da autenticação para o servidor escravo.
Cada servidor escravo precisa de um nome de usuário e senha criados noManagementRealmmestre autônomo ou domain controller. No domain controller ou mestre autônomo, execute o comandoEAP_HOME/bin/add-user.sh. Adicione um usuário com o mesmo nome do usuário ao do escravo para oManagementRealm. Quando você for solicitado se este usuário precisará autenticar à uma instância JBoss AS, por favor respondayes. Segue abaixo uma amostra de uma entrada e saída do comando abaixo, para o escravo chamadoslave1com a senhachangeme.Copy to Clipboard Copied! Toggle word wrap Toggle overflow Copie o elemento Base64-encoded
<secret>a partir da saídaadd-user.shCaso você deseje especificar o valor de senha codificada Base64 para a autenticação, copie o valor do elemento<secret>a partir da última linha do resultadoadd-user.shuma vez que você precisará disto na etapa abaixo.Modifique o realm de segurança do host escravo para uso da nova autenticação.
- Abra novamente o arquivo
host.xmloustandalone-ha.xmldo host escravo. - Localize o elemento
<security-realms>. Isto é onde você configura o realm de segurança. - Você pode especificar o valor secreto em uma das seguintes maneiras:
Especifique o valor de senha codificada Based64 no arquivo da configuração.
- Adicione o seguinte bloco do código XML diretamente abaixo da linha
<security-realm name="ManagementRealm">,Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Substitua"Y2hhbmdlbWU=" pelo valor secreto retornado a partir do resultado
add-user.shna etapa anterior.
Configure o host para obter a senha a partir do vault.
- Use o script
vault.shpara gerar a senha mascarada. Ele gerará uma sequência como a seguinte:VAULT::secret::password::ODVmYmJjNGMtZDU2ZC00YmNlLWE4ODMtZjQ1NWNmNDU4ZDc1TElORV9CUkVBS3ZhdWx0.Você pode encontrar maiores informações sobre o vault nos Vaults da Senha para a seção das Sequências Confidenciais deste guia iniciando aqui: Seção 10.11.1, “Sequências Confidenciais de Segurança nos Arquivos de texto limpo”. - Adicione o seguinte bloco do código XML diretamente abaixo da linha
<security-realm name="ManagementRealm">.Copy to Clipboard Copied! Toggle word wrap Toggle overflow Certifique-se de substituir o valor secreto pela senha mascarada na etapa anterior.Nota
Quando criando um vault da senha, ela deve ser especificada num texto plano, e não no Based64 codificado.
Especifique a senha como uma propriedade do sistema.
- Adicione o seguinte bloco do código XML diretamente abaixo da linha
<security-realm name="ManagementRealm">Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Quando você especificar a senha como uma propriedade de sistema, você pode configurar o host nas seguintes maneiras:
- Inicie o servidor inserindo a senha num texto plano como o argumento da linha de comando, por exemplo:
-Dserver.identity.password=changeme
-Dserver.identity.password=changemeCopy to Clipboard Copied! Toggle word wrap Toggle overflow Nota
A senha deve ser inserida num texto plano e será visível a qualquer um que emite um comandops -ef. - Posicione a senha num arquivo de propriedades e passe o URL do arquivo das propriedades como um argumento da linha de comando.
- Adicione o par chave/valor a um arquivo de propriedades. Por exemplo:
server.identity.password=changeme
server.identity.password=changemeCopy to Clipboard Copied! Toggle word wrap Toggle overflow - Inicie o servidor como os argumentos da linha de comando.
--properties=URL_TO_PROPERTIES_FILE
--properties=URL_TO_PROPERTIES_FILECopy to Clipboard Copied! Toggle word wrap Toggle overflow
- Salve e saia do arquivo.
Reinicie o servidor.
O escravo será agora autenticado ao mestre usando o seu nome do host como o nome de usuário e a sequência criptografada como sua senha.
O seu servidor autônomo ou servidores com um grupo do servidor de um managed domain, são configurados como nós dos trabalhadores mod_cluster. Caso você implantar um aplicativo clustered, suas sessões são replicadas a todos os nós para a falha, e isto pode aceitar solicitações a partir de um servidor HTTD externo ou balanceador de carga. Cada nó do cluster descobre outros nós usando a descoberta automática, por default. Para configuração da descoberta automática e outras configurações específicas do subsistema mod_cluster, refira-se ao Configure the mod_cluster Subsystem no Administration and Configuration Guide. Para configurar o servidor HTTPD Apache, refira-se ao Use an External HTTPD as the Web Front-end for JBoss Enterprise Application Platform Applications no Administration and Configuration Guide.
Capítulo 14. Instalação de Patch Copiar o linkLink copiado para a área de transferência!
14.1. Patches e Atualizações Copiar o linkLink copiado para a área de transferência!
14.2. Mecanismos de Aplicação de Patch Copiar o linkLink copiado para a área de transferência!
- Atualizações assíncronas: patches únicos que são lançados fora do ciclo de atualização normal do produto existente. Elas podem incluir patches de segurança assim como outros patches únicos fornecidos pelo Red Hat Global Suport Services (GSS) para especificação de problemas.
- Atualizações planejadas: elas incluem patches cumulativos assim como atualizações micro, menores e maiores de um produto existente. Os patches cumulativos incluem atualizações assíncronas desenvolvidas anteriormente para a versão do produto.
Importante
14.3. Subscrição para as Listas de Correio Patch Copiar o linkLink copiado para a área de transferência!
A equipe do JBoss na Red Hat mantém uma lista de correio de segurança para comunicados de segurança sobre os produtos do Red Hat JBoss Enterprise. Este tópico descreve o que você precisa realizar para subscrever-se a esta lista.
Pré-requisitos
- Nenhum
Procedimento 14.1. Subscrição à Lista de Vigilância do JBoss
- Clique no seguinte link para ir à página de lista de correio de Vigilância do JBoss: JBoss Watch Mailing List.
- Insira o endereço de e-mail na seção Subscribing to Jboss-watch-list
- [Você pode também desejar inserir o seu nome e selecionar sua senha. Embora isto seja opcional, é também recomendado.]
- Pressione o botão para iniciar o processo de subscrição.
- Você pode navegar nos arquivos da lista de correio através do: JBoss Watch Mailing List Archives.
Após a confirmação de seu endereço de e-mail, você será subscrito a receber as novidades relacionadas à segurança da lista de correio patch do JBoss.
14.4. Instale os Patches na Forma Zip Copiar o linkLink copiado para a área de transferência!
14.4.1. O comando patch Copiar o linkLink copiado para a área de transferência!
patch é usado para aplicar os patches do zip baixados a uma instância do servidor JBoss EAP 6. Ele não pode ser usado automaticamente nas instâncias do servidor JBoss EAP 6 de patch por todo managed domain. No entanto, instâncias de servidor individual no managed domain podem sofrer o patch de forma independente.
Importante
patch. Refira-se à Seção 14.5, “Instalação de Patches na forma RPM” para atualização dos servidores do JBoss EAP 6 instalados no RPM.
Nota
patch pode ser apenas usado com patches produzidos nas versões do JBoss EAP 6.2 e mais avançadas. Para os patches de versões anteriores à versão 6.2, você deve referir-se à documentação de versão relevante disponível no https://access.redhat.com/site/documentation/.
patch pode fornecer a informação básica no estado de patches instalados e também fornecer uma maneira de reverter imediatamente o aplicativo de um patch.
patch verificará os módulos e demais arquivos que estão sendo alterados por quaisquer modificações do usuário. Caso a modificação de um usuário for detectada e uma alteração de conflito de manuseio for especificada, a ferramenta patch irá cancelar a operação e avisar que existe um conflito. O aviso incluirá uma lista de módulos e outros arquivos que estiverem em conflito. Para completar a operação, o comando patch deve ser re-executado com uma alteração especificando como resolver o conflito: tanto preservar as modificações do usuário ou substituí-las.
| Argumento ou Interruptor | Descrição |
|---|---|
apply | Aplica o patch. |
--override-all | Caso haja um conflito, a operação de patch substitui quaisquer modificações do usuário. |
--override-modules | Caso haja conflito como resultado de quaisquer módulos modificados, esta alteração substitui aquelas modificações pelos conteúdos da operação do patch. |
--override=path(,path) | Caso existam arquivos diversos apenas, isto substituirá os arquivos modificados em conflito com os arquivos na operação patch. |
--preserve=path(,path) | Para os arquivos diversos especificados apenas, isto preservará os arquivos modificados em conflito. |
info | Retorna a informação nos patches instalados no momento. |
rollback | Reverte o aplicativo de um patch. |
--reset-configuration=TRUE|FALSE | Solicitado para a reversão, isto especifica se é que restaurar os arquivos de configuração do servidor como parte da operação de reversão. |
14.4.2. Instalação de Patches na forma Zip usando o comando patch Copiar o linkLink copiado para a área de transferência!
Esta tarefa descreve como usar o comando patch para instalação de patches para o JBoss EAP 6 que estão no formato zip.
Importante
patch é um recurso que foi adiciona no JBoss EAP 6.2. Para as versões JBoss EAP antecedentes à versão 6.2, o processo de instalação de patches é diferente e você deve seguir a documentação de versão relevante no https://access.redhat.com/site/documentation/.
Pré-requisitos
- Acesso válido e subscrição do Portal do Cliente Red Hat.
- A subscrição atual ao produto JBoss instalado no formato zip.
- Acesso ao CLI de Gerenciamento para a instância do servidor a ser atualizada. Refira-se à Iniciação do CLI de Gerenciamento no Guia de Configuração e Administração.
Procedimento 14.2. Aplique o patch zip a uma instância do servidor do JBoss EAP 6 usando o comando patch
Atenção
- Realize o download do arquivo zip patch a partir do Portal do Cliente no https://access.redhat.com/downloads/
- A partir do CLI de Gerenciamento, aplique o patch com seguinte comando para o patch apropriado ao arquivo patch:
[standalone@localhost:9999 /] patch apply /path/to/downloaded-patch.zip
[standalone@localhost:9999 /] patch apply /path/to/downloaded-patch.zipCopy to Clipboard Copied! Toggle word wrap Toggle overflow A ferramentapatcho avisará se existe qualquer conflito na tentativa de aplicar o patch. Refira-se à Seção 14.4.1, “O comandopatch” para opções disponíveis sobre executar novamente o comando com o objetivo de resolver qualquer conflito. - Reinicie a instância do servidor JBoss EAP 6 para o patch tenha efeito:
[standalone@localhost:9999 /] shutdown --restart=true
[standalone@localhost:9999 /] shutdown --restart=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow
A instância do servidor JBoss EAP 6 possui patch com a última atualização.
14.4.3. Reversão do Aplicativo de um Patch na forma Zip usando o comando patch Copiar o linkLink copiado para a área de transferência!
Esta tarefa descreve o comando patch para reverter o aplicativo de um patch zip aplicado anteriormente no JBoss EAP 6.
Atenção
patch não é intencionado como uma funcionalidade de desinstalação geral. Isto é apenas intencionado a ser usado imediatamente após o aplicativo de um patch que possuia consequências indesejáveis.
Importante
patch é um recurso que foi adicionado ao JBoss EAP 6.2. Para as versões JBoss EAP antecedentes à versão 6.2, o processo de reversão de patches é diferente e você deve seguir a documentação de versão relevante no https://access.redhat.com/site/documentation/.
Pré-requisitos
- O patch que foi aplicado anteriormente usando o comando
patch. - Acesso ao CLI de Gerenciamento para a instância do servidor. Refira-se à Iniciação do CLI de Gerenciamento no Guia de Configuração e Administração.
Procedimento 14.3. Reversão de um patch a partir da instância do servidor JBoss EAP 6 usando o comando patch
- A partir do CLI de Gerenciamento, use o comando
patch infopara encontrar a ID do patch que está prestes a ser revertido.- Para os patches cumulativos, a ID do patch é o valor do primeiro
cumulative-patch-idapresentado no resultadopatch info. - A segurança única ou as IDs do patch de correção de bug estão descritas como o valor dos primeiros
patchesapresentados no resultadopatch info, com o mais recente patch único aplicado e listado primeiramente.
- A partir do CLI de Gerenciamento, reverta o patch com a ID do patch apropriado a partir da etapa anterior.
Atenção
Recomendamos cuidado ao especificar o valor da opção--reset-configuration.Caso determinado paraTRUE, o processo de reversão do patch irá reverter também os arquivos de configuração do servidor JBoss EAP 6 a seus estados de pre-patch. Quaisquer alterações realizadas aos arquivos de configuração do servidor JBoss EAP 6, após o patch ser aplicado, serão perdidas.Caso determinado paraFALSE, os arquivos de configuração do servidor não serão revertidos. Nesta situação, é possível que o servidor não inicie após a reversão, uma vez que o pacth pode ter alterado configurações tais como namespaces, que podem não ser mais válidos e necessitaram ser corrigidos manualmente.[standalone@localhost:9999 /] patch rollback PATCH_ID --reset-configuration=TRUE
[standalone@localhost:9999 /] patch rollback PATCH_ID --reset-configuration=TRUECopy to Clipboard Copied! Toggle word wrap Toggle overflow A ferramentapatcho avisará se existem quaisquer conflitos na tentativa da reversão do patch. Refira-se à Seção 14.4.1, “O comandopatch” para opções possíveis de reexecução do comando para resolver quaisquer conflitos. - Reinicie a instância do servidor JBoss EAP 6 para que a reversão do patch tenha efeito:
[standalone@localhost:9999 /] shutdown --restart=true
[standalone@localhost:9999 /] shutdown --restart=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow
O patch, e opcionalmente os arquivos de configuração do servidor, são revertidos na instância do servidor do JBoss EAP 6.
14.5. Instalação de Patches na forma RPM Copiar o linkLink copiado para a área de transferência!
Os patches do JBoss são distribuídos em duas maneiras: ZIP (para todos os produtos) e RPM (para o subconjunto de produtos). Esta tarefa descreve as etapas que você precisa para instalar os patches através do formato RPM.
Pré-requisitos
- Uma subscrição válida para o Red Hat Network.
- A subscrição atual a um produto JBoss instalado através de um pacote RPM.
Procedimento 14.4. Aplicar um patch a um produto JBoss através do método RPM.
yum.
Atenção
- Receba informação sobre o patch de segurança tanto sendo subscrito na lista de correio de vigilância do JBoss ou navegando pelos arquivos da lista de correio de vigilância do JBoss.
- Leia a errata para o patch de segurança e certifique-se de que está aplicado a um produto do JBoss em seu ambiente.
- Caso o patch de segurança é aplicado a um produto do JBoss no seu ambiente, use o seguinte link para realização do download do pacote RPM atualizado na errata.
- Usepara instalação do patch.
yum update
yum updateCopy to Clipboard Copied! Toggle word wrap Toggle overflow Importante
Quando atualizando uma instalação RPM, o seu produto JBoss é atualizado cumulativamente com todas as correções lançadas do RPM.
O produto JBoss possui patches com a atualização mais recente usando o formato RPM.
14.6. Classificação de impacto e gravidade do JBoss Security Patches (Patches de Segurança JBoss) Copiar o linkLink copiado para a área de transferência!
| Gravidade | Descrição |
|---|---|
| Crítica |
A classificação é dada para as falhas que poderiam ser facilmente exploradas por um invasor não identificado e levar a comprometer o sistema (execução de código arbitrário) sem requerer a interação do usuário. Existem tipos de vulnerabilidades que podem ser exploradas. As falhas que requerem um usuário remoto autenticado, um usuário local ou uma configuração improvável não são classificadas como impacto crítico.
|
| Importante |
A classificação é dada às falhas que podem facilmente comprometer a confidencialidade, integridade ou habilidade de recursos. Esses são tipos de vulnerabilidades que permitem usuários locais ganharem privilégios, permitir usuários remotos não autenticados a visualizarem recursos que deveriam ser protegidos pela autenticação ou permitir usuários local ou remoto a causarem uma negação de serviço.
|
| Moderada |
A classificação é dada para as falhas que poderiam ser dificilmente exploradas, mas podem comprometer a confidencialidade, integridade ou disponibilidade de recursos, sob certas circunstâncias. Existem tipos de vulnerabilidades que podem possuir um impacto crítico de falha ou impacto importante, no entanto não são exploradas com tanta facilidade devido à avalização técnica da falha ou afetam configurações comprometedoras.
|
| Baixa |
A classificação é dada a todos os demais problemas que um impacto de segurança possui. Estes são os tipos de vulnerabilidades que acredita-se requerem circunstâncias improváveis para estarem aptos a serem explorados ou onde a exploração com êxito geraria uma consequência mínima.
|
Exemplo 14.1. Métricas do CVSS v2
C:N/I:P/A:C
C:N/I:P/A:C
14.7. Gerenciamento das Atualizações de Segurança para Dependências de Agrupadas dentro dos Aplicativos Implantados no JBoss EAP Copiar o linkLink copiado para a área de transferência!
Ferramentas e Fontes de Dados
- Listas de correio do patch
- A subscrição às listas do correio patch do JBoss irão mantê-los informados a respeito das falhas de segurança que foram corrigidas nos produtos, permitindo que você verifique se é que seus aplicativos implantados são agrupados em versões vulneráveis dos componentes afetados.
- A página de consulta sobre segurança para os componentes agrupados.
- Muitos componentes do código aberto possuem sua própria página de consulta sobre segurança. Por exemplo, struts é um componente comumente usado com muitos problemas conhecidos de segurança que não são fornecidos como parte da distribuição do JBoss EAP. O struts 2 mantém uma página de consulta sobre segurança, que pode ser monitorada caso os aplicativos implantados agrupam o struts 2. Muitos componentes fornecidos comercialmente também mantém as páginas de consulta de segurança.
- Realize o scan regularmente dos aplicativos implantados para as vulnerabilidades conhecidas
- Existem diversas ferramentas comerciais disponíveis para isto. Existe também uma ferramenta de código aberto chamada Victms, que é desenvolvida pelos funcionários da Red Hat, porém não possui suporte ou garantia. O Victms fornece plugins para diversas ferramentas de integração e construção, que automaticamente escaneia aplicativos para agrupamento das dependências vulneravelmente conhecidas. Os Plugins estão disponíveis para o Maven, Ant e Jenkins. Consulte https://victi.ms/about.html para maiores informações sobre a ferramenta Victms.
Parte III. Aplicativos de Segurança Copiar o linkLink copiado para a área de transferência!
Capítulo 15. Segurança do Aplicativo Copiar o linkLink copiado para a área de transferência!
15.1. Segurança do Aplicativo Copiar o linkLink copiado para a área de transferência!
15.2. Habilitação/Desabilitação da Substituição da Propriedade baseada no Descritor Copiar o linkLink copiado para a área de transferência!
O controle finito sobre a substituição da propriedade do descritor foi introduzido no jboss-as-ee_1_1.xsd. Esta tarefa descreve as etapas de configuração do descritor baseado no descritor.
Pré-requisitos
- Inicie a instância da Plataforma do Aplicativo JBoss Enterprise.
- Inicie o CLI de Gerenciamento.
- Quando configurado para
true, as substituições da propriedade são habilitadas. - Quando configurados para
false, as substituições da propriedade são desabilitadas.
Procedimento 15.1. jboss-descriptor-property-replacement
jboss-descriptor-property-replacement é usado para habilitar ou desabilitar a substituição da propriedade nos seguintes descritores:
jboss-ejb3.xmljboss-app.xmljboss-web.xml*-jms.xml*-ds.xml
jboss-descriptor-property-replacement é true.
- No CLI de Gerenciamento, execute o seguinte comando para determinar o valor do
jboss-descriptor-property-replacement:/subsystem=ee:read-attribute(name="jboss-descriptor-property-replacement")
/subsystem=ee:read-attribute(name="jboss-descriptor-property-replacement")Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Execute o seguinte comando para configuração do comportamento:
/subsystem=ee:write-attribute(name="jboss-descriptor-property-replacement",value=VALUE)
/subsystem=ee:write-attribute(name="jboss-descriptor-property-replacement",value=VALUE)Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Procedimento 15.2. spec-descriptor-property-replacement
spec-descriptor-property-replacement é usado para habilitar ou desabilitar a substituição da propriedade nos seguintes descritores:
ejb-jar.xmlpersistence.xml
spec-descriptor-property-replacement é false.
- No CLI de Gerenciamento, execute o seguinte comando para confirmar o valor do
spec-descriptor-property-replacement:/subsystem=ee:read-attribute(name="spec-descriptor-property-replacement")
/subsystem=ee:read-attribute(name="spec-descriptor-property-replacement")Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Execute o seguinte comando para configuração do comportamento:
/subsystem=ee:write-attribute(name="spec-descriptor-property-replacement",value=VALUE)
/subsystem=ee:write-attribute(name="spec-descriptor-property-replacement",value=VALUE)Copy to Clipboard Copied! Toggle word wrap Toggle overflow
O descritor baseado nas tags de substituição da propriedade baseada no descritor foi configurado com êxito.
15.3. Segurança da Fonte de Dados Copiar o linkLink copiado para a área de transferência!
15.3.1. Segurança da Fonte de Dados Copiar o linkLink copiado para a área de transferência!
- Security Domains: Seção 4.3.3.1, “Security Domains”.
Exemplo 15.1. Amostra do Security Domain
<security> <security-domain>mySecurityDomain</security-domain> </security>
<security>
<security-domain>mySecurityDomain</security-domain>
</security>
Exemplo 15.2. Amostra do Vault de Senha
15.4. Segurança do Aplicativo EJB Copiar o linkLink copiado para a área de transferência!
15.4.1. Identidade de Segurança Copiar o linkLink copiado para a área de transferência!
15.4.1.1. Identidade de Segurança EJB Copiar o linkLink copiado para a área de transferência!
<security-identity> na configuração de segurança. Isto refere-se à identidade de outro EJB deve usar quando ele invocar os métodos nos componentes.
<use-caller-identity> está presente e no segundo caso a tag <run-as> for usada.
15.4.1.2. Determine a Identidade de Segurança de um EJB Copiar o linkLink copiado para a área de transferência!
Exemplo 15.3. Determine a identidade de segurança de um EJB a ser o mesmo ao do seu chamador
<security-identity>.
Exemplo 15.4. Determine a identidade de segurança de um EJB para uma função específica
<run-as> e <role-name> dentro da tag <security-identity>.
<run-as>, um principal nomeado anonymous é determinado para chamadas de saída. Para determinar um principal diferente, use o <run-as-principal>.
Nota
<run-as> e <run-as-principal> dentro de um elemento servlet.
Consulte também:
15.4.2. Permissões de Método EJB Copiar o linkLink copiado para a área de transferência!
15.4.2.1. Permissões do Método EJB Copiar o linkLink copiado para a área de transferência!
<method-permisison>. Essa declaração determina as funções que são permitidas a invocar os métodos da interface EJB. Você pode especificar permissões para as seguintes combinações:
- Todos os métodos da interface do componente e principal do EJB nomeado
- O método especificado da interface do componente e principal do EJB nomeado
- O método especificado com um conjunto de métodos com um nome sobrecarregado
15.4.2.2. Uso das Permissões do Método EJB Copiar o linkLink copiado para a área de transferência!
O elemento <method-permission> define as funções lógicas que são permitidas para acesso ao método EJB definido pelos elementos <method>. Diversas amostras demonstram a sintaxe do XML. As declarações de permissão do método podem estar presentes e elas possuem efeito cumulativo. O elemento <method-permission> é um filho do elemento <assembly-descriptor> do descritor <ejb-jar>.
Exemplo 15.5. Permite que funções acessem todos os métodos de um EJB
Exemplo 15.6. Permite que funções acessem apenas métodos especificados de um EJB e limitam os parâmetros de método que precisam ser passados.
Exemplo 15.7. Permite que qualquer usuário autenticado acesse os métodos do EJBs
<unchecked/> permite que qualquer usuário autenticado use os métodos especificados.
Exemplo 15.8. Exclui completamente os métodos EJB específicos de serem utilizados
Exemplo 15.9. Um <assembly-descriptor> completo contendo diversos blocos <method-permission>
15.4.3. Anotações de Segurança EJB Copiar o linkLink copiado para a área de transferência!
15.4.3.1. Anotações de Segurança EJB Copiar o linkLink copiado para a área de transferência!
- @DeclareRoles
- Declara quais funções estão disponíveis.
- @RolesAllowed, @PermitAll, @DenyAll
- Especifica quais permissões de método são permitidas. Refira-se à Seção 15.4.2.1, “Permissões do Método EJB”, para maiores informações sobre as permissões do método.
- @RunAs
- Configura a identidade de segurança propagada de um componente.
15.4.3.2. Anotações da Segurança EJB Copiar o linkLink copiado para a área de transferência!
Você pode usar tanto os descritores ou anotações XML para controlar quais funções de segurança estão aptas a chamar métodos em seu Enterprise JavaBeans (EJBs). Para maiores informações no uso dos descritores XML, refira-se à Seção 15.4.2.2, “Uso das Permissões do Método EJB”.
Anotações para Controle das Permissões de Segurança dos EJBs
- @DeclareRoles
- Use @DeclareRoles para definir quais funções de segurança verificar. Caso nenhum @DeclareRoles estiver presente, a lista é uma construção automática da anotação @RolesAllowed.
- @SecurityDomain
- Especifica o security domain para uso do EJB. Caso o EJB seja anotado para a autorização com o
@RolesAllowed, a autorização irá apenas aplicar caso o EJB esteja anotado com o security domain. - @RolesAllowed, @PermitAll, @DenyAll
- Use o @RolesAllowed para listar quais funções são permitidas para acessar um método ou métodos. Use o @PermitAll ou @DenyAll para tanto permitir ou negar todas as funções de uso um método ou métodos.
- @RunAs
- Use @RunAs para especificar uma função de um método que sempre será executado.
Exemplo 15.10. Amostra das Anotações de Segurança
WelcomeEveryone. O método GoodBye usa como função tempemployee quando realizando chamadas. Apenas a função admin pode acessar o método GoodbyeAdmin e quaisquer outros métodos sem anotação de segurança.
15.4.4. Acesso Remoto para os EJBs Copiar o linkLink copiado para a área de transferência!
15.4.4.1. Acesso de Método Remoto Copiar o linkLink copiado para a área de transferência!
Tipos de Transporte Suportados
- Socket / Socket de Segurança
- RMI / RMI sobre SSL
- HTTP / HTTPS
- Servlet / Servlet de Segurança
- Bisocket / Bisocket de Segurança
O sistema Remoting fornece também o marshalling de dados e serviços sem marshalling. O marshalling de dados refere-se à habilidade de mover com segurança os dados através dos limites da plataforma e da rede, de forma que um sistema separado pode executar trabalhos no mesmo. O trabalho é então enviado de volta ao sistema original e comporta-se como se tivesse manuseado manualmente.
Quando você realiza o design de um aplicativo diferente que usa o Remoting, você direciona o seu aplicativo à comunicar-se com o servidor pela configuração do mesmo para uso de um tipo especial de localizador de recurso chamado InvokerLocator, que é uma Sequência simples com o formato de tipo de URL. O servidor escuta por solicitações para recursos remotos num connector, que é configurado como parte do subsistema remoting. O connector manuseia a solicitação ao ServerInvocationHandler configurado. Cada ServerInvocationHandler implementa um invoke(InvocationRequest) de método, que sabe como manusear a solicitação.
Camadas do Framework do JBoss Remoting
- O usuário interage com a camada externa. No lado do cliente, a camada externa é a classe
Client, que envia as solicitações de invocação. No lado do servidor, ela é o InvocationHandler, que é implementado pelo usuário e recebe solicitações de invocação. - O transporte é controlado pela camada do invocador.
- A camada mais baixa contendo o marshaller e sem marshaller, que converte formatos de dados para formatos eletrônicos.
15.4.4.2. Retorno de Chamada Remoting Copiar o linkLink copiado para a área de transferência!
InvocationRequest ao cliente. O seu código ao lado do servidor funciona da mesma forma independente do retorno de chamada ser assíncrono ou não. Apenas o cliente precisa saber desta diferença. O InvocationRequest do servidor envia um responseObject ao cliente. Esta é a carga que o cliente solicita. Isto pode ser uma resposta direta a uma solicitação ou uma notificação de evento.
m_listeners. Ele contém uma lista de todos os ouvintes que foram adicionados ao seu manuseador do servidor. A interface ServerInvocationHandler inclui os métodos que o permitem gerenciar esta lista.
org.jboss.remoting.InvokerCallbackHandler da interface, que processa os dados do retorno da chamada. Após implementar o manuseador do retorno de chamada, você pode tanto adicionar-se como um ouvinte para o retorno de chamada pull ou implementar o servidor do retorno de chamada para o retorno de chamada push.
Para o retorno de chamada pull, o seu cliente adiciona-se à lista do servidor de ouvintes usando o método Client.addListener(). Ele então pesquisa o servidor periodicamente para a entrega assíncrona de dados do retorno de chamada. Esta pesquisa é executada usando o Client.getCallbacks().
O retorno de chamada push requer que seu aplicativo de cliente execute o seu próprio InvocationHandler. Para isto, você precisa executar um serviço Remoting ao lado do próprio cliente. Isto é chamado callback server. O servidor do retorno de chamada aceita as solicitações de entrada assíncronas e as processa para o solicitador (neste caso, o servidor). Com o objetivo de registrar o seu servidor de retorno de chamada do cliente com o servidor principal, por favor passe o InvokerLocator do servidor do retorno de chamada como segundo argumento ao método addListener.
15.4.4.3. Detecção do Servidor Remoting Copiar o linkLink copiado para a área de transferência!
15.4.4.4. Configuração do Subsistema Remoting Copiar o linkLink copiado para a área de transferência!
O JBoss Remoting possui três elementos configuráveis de nível superior: o pool thread do trabalhador, um ou mais conectores e as séries de URIs de conexão remota e local. Este tópico apresenta uma explicação de cada item configurado, amostra de comandos CLI de como configurar cada item e uma amostra XML de subsistema inteiramente configurado. Esta configuração é apenas válida ao servidor. A maioria das pessoas não irão precisar configurar o subsistema Remoting, a não ser que elas usem os conectores personalizados para os seus próprios aplicativos. Os aplicativos que atuam como clientes Remoting, tais como os EJBs, precisam de uma configuração separada para se conectarem a um conector específico.
Nota
Os comandos CLI são formulados para o managed domain, quando configurando o perfil default. Para configurar um perfil diferente, substitua o seu nome. Para o servidor autônomo, omita a parte /profile=default do comando.
Existem poucos aspetos de configurações que estão fora do subsistema remoting:
- Interface da Rede
- A interface da rede usada pelo subsistema
remotingé a interfaceunsecuredefinida nodomain/configuration/domain.xmloustandalone/configuration/standalone.xml.Copy to Clipboard Copied! Toggle word wrap Toggle overflow A definição por host da interfaceunsecureestá definida nohost.xmldo mesmo diretório ao dodomain.xmloustandalone.xml. Esta interface é também usada por diversos outros subsistemas. Recomendamos atenção ao modificá-lo.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - socket-binding
- O socket-binding default usado pelo subsistema
remotingaplica o bind ao TCP porta 4777. Refira-se à documentação sobre bindings do socket e seus grupos para maiores informações caso você precise alterá-los. - Referência de Conector Remoto para o EJB
- O subsistema EJB contém uma referência ao conector remoto para invocações de método remoto. Segue abaixo a configuração default:
<remote connector-ref="remoting-connector" thread-pool-name="default"/><remote connector-ref="remoting-connector" thread-pool-name="default"/>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Configuração de Transporte de Segurança
- Os transportes remotos usam o StratTLS para uso da conexão de segurança (HTTPS, Secure Servlet, etc) caso o cliente solicite isto. O mesmo socket binding (porta de rede) é usado para aplicar e retirar a segurança das conexões. O cliente solicita o transporte com ou sem segurança, conforme a própria necessidade. Os componentes do JBoss EAP 6 que usam o Remoting, tais como os EJBs, o ORB e o provedor JMS requerem interfaces com segurança por default.
Atenção
O pool thread é um grupo de threads que está disponível para processar trabalho que vêem através dos conectores Remoting. Ele é um <worker-thread-pool> de elemento único e leva diversos atributos. Ajuste esses atributos caso você obter intervalos de rede, não tenha mais threads ou precise limitar o uso da memória. As recomendações específicas dependem de sua situação em específico. Contate os Serviços de Suporte Global da Red Hat para maiores informações.
| Função | Descrição | Comando CLI |
|---|---|---|
| read-threads |
O número de leitura de threads para criação de trabalhador remoto. O default é
1.
| /profile=default/subsystem=remoting/:write-attribute(name=worker-read-threads,value=1)
|
| write-threads |
O número de threads de gravação para criação do trabalhador remoto. O default é
1.
| /profile=default/subsystem=remoting/:write-attribute(name=worker-write-threads,value=1)
|
| task-keepalive |
O número de milésimos de segundos para manter os threads de tarefa do trabalhador remoto sem core. O default é
60.
| /profile=default/subsystem=remoting/:write-attribute(name=worker-task-keepalive,value=60)
|
| task-max-threads |
O número máximo de threads para o pool thread de tarefa do trabalhador. O default é
16.
| /profile=default/subsystem=remoting/:write-attribute(name=worker-task-max-threads,value=16)
|
| task-core-threads |
O número de threads core para o pool thread da tarefa do trabalhador remoto. O default é
4.
| /profile=default/subsystem=remoting/:write-attribute(name=worker-task-core-threads,value=4)
|
| task-limit |
O número máximo de tarefas do trabalhador remoto a ser permitido antes da rejeição. O default é
16384.
| /profile=default/subsystem=remoting/:write-attribute(name=worker-task-limit,value=16384)
|
O conector é o elemento de configuração Remota principal. Os conectores múltiplos são permitidos. Cada um consiste de um elemento <connector> com diversos subelementos, assim como um pouco de possíveis atributos. O conector default é usado por diversos subsistemas do JBoss EAP 6. As configurações específicas para os elementos e atributos dos conectores dependem de seus aplicativos, portanto contate os Serviços de Suporte Global da Red Hat para maiores informações.
| Função | Descrição | Comando CLI |
|---|---|---|
| socket-binding | O nome do binding do socket para uso deste conector. | /profile=default/subsystem=remoting/connector=remoting-connector/:write-attribute(name=socket-binding,value=remoting)
|
| authentication-provider |
O módulo Java Authentication Service Provider Interface for Containers (JASPIC) para uso com este conector. O módulo deve estar no classpath.
| /profile=default/subsystem=remoting/connector=remoting-connector/:write-attribute(name=authentication-provider,value=myProvider)
|
| security-realm |
Opcional. O security realm que contém os usuários, senhas e funções. O Aplicativo da Web ou EJB pode autenticar em relação ao security realm. O
ApplicationRealm está disponível na instalação do JBoss EAP 6 default.
| /profile=default/subsystem=remoting/connector=remoting-connector/:write-attribute(name=security-realm,value=ApplicationRealm)
|
| Função | Descrição | Comando CLI |
|---|---|---|
| sasl |
O elemento anexo para os mecanismos de autenticação do Simple Authentication and Security Layer (SASL)
| N/A
|
| propriedades |
Contém um ou mais elementos
<property>, cada um com o atributo name e o atributo value opcional.
| /profile=default/subsystem=remoting/connector=remoting-connector/property=myProp/:add(value=myPropValue)
|
Você pode especificar os três diferentes tipos de conexão de saída:
- Conexão de saída a um URI.
- Conexão de saída local – conecta a um recurso local tal como socket.
- Conexão de saída remota – conecta a um recurso remoto e autentica usando um realm de segurança.
<outbound-connections>. Cada um dos tipos de conexão leva um atributo outbound-socket-binding-ref. A conexão de saída leva um atributo uri. A conexão de saída remota leva atributos opcionais username e security-realm para uso da autorização.
| Função | Descrição | Comando CLI |
|---|---|---|
| outbound-connection | Conexão de saída | /profile=default/subsystem=remoting/outbound-connection=my-connection/:add(uri=http://my-connection)
|
| local-outbound-connection | A conexão de saída com um esquema local:// URI implícito. | /profile=default/subsystem=remoting/local-outbound-connection=my-connection/:add(outbound-socket-binding-ref=remoting2)
|
| remote-outbound-connection |
As conexões de saída para o esquema remote:// URI usando a autenticação com o realm de segurança.
| /profile=default/subsystem=remoting/remote-outbound-connection=my-connection/:add(outbound-socket-binding-ref=remoting,username=myUser,security-realm=ApplicationRealm)
|
Antes da definição dos elementos filhos SASL, você precisa criar o elemento SASL inicial. Use o seguinte comando:
/profile=default/subsystem=remoting/connector=remoting-connector/security=sasl:add
/profile=default/subsystem=remoting/connector=remoting-connector/security=sasl:add
| Função | Descrição | Comando CLI |
|---|---|---|
| include-mechanisms |
Contém um atributo
value, que é uma lista de espaço separado dos mecanismos SASL.
|
/profile=default/subsystem=remoting/connector=remoting-connector/security=sasl:write-attribute(name=include-mechanisms,value=["DIGEST","PLAIN","GSSAPI"])
|
| qop |
Contém um atributo
value, que é uma lista de espaços separados da Qualidade SASL Quality dos valores de proteção, em ordem decrescente de preferência.
|
/profile=default/subsystem=remoting/connector=remoting-connector/security=sasl:write-attribute(name=qop,value=["auth"])
|
| strength |
Contém o atributo
value, que é uma lista de espaço separado dos valores potentes de criptografia SASL, em ordem decrescente de preferência.
|
/profile=default/subsystem=remoting/connector=remoting-connector/security=sasl:write-attribute(name=strength,value=["medium"])
|
| reuse-session |
Contém o atributo
value que é um valor booleano. Caso verdadeiro, tente reutilizar as sessões.
|
/profile=default/subsystem=remoting/connector=remoting-connector/security=sasl:write-attribute(name=reuse-session,value=false)
|
| server-auth |
Contém um atributo
value que é um valor booleano. Caso verdadeiro, o servidor autentica para o cliente.
|
/profile=default/subsystem=remoting/connector=remoting-connector/security=sasl:write-attribute(name=server-auth,value=false)
|
| política |
Um elemento anexo que contém zero ou mais dos seguintes elementos, cada qual leva um
value único.
|
/profile=default/subsystem=remoting/connector=remoting-connector/security=sasl/sasl-policy=policy:add
/profile=default/subsystem=remoting/connector=remoting-connector/security=sasl/sasl-policy=policy:write-attribute(name=forward-secrecy,value=true)
/profile=default/subsystem=remoting/connector=remoting-connector/security=sasl/sasl-policy=policy:write-attribute(name=no-active,value=false)
/profile=default/subsystem=remoting/connector=remoting-connector/security=sasl/sasl-policy=policy:write-attribute(name=no-anonymous,value=false)
/profile=default/subsystem=remoting/connector=remoting-connector/security=sasl/sasl-policy=policy:write-attribute(name=no-dictionary,value=true)
/profile=default/subsystem=remoting/connector=remoting-connector/security=sasl/sasl-policy=policy:write-attribute(name=no-plain-text,value=false)
/profile=default/subsystem=remoting/connector=remoting-connector/security=sasl/sasl-policy=policy:write-attribute(name=pass-credentials,value=true)
|
| propriedades |
Contém um ou mais elementos
<property>, cada um com o atributo name e o atributo value opcional.
|
/profile=default/subsystem=remoting/connector=remoting-connector/security=sasl/property=myprop:add(value=1)
/profile=default/subsystem=remoting/connector=remoting-connector/security=sasl/property=myprop2:add(value=2)
|
Exemplo 15.11. Configurações de Amostra
Aspectos da Configuração ainda não documentados
- Detecção Automática Multicast e JNDI
15.4.4.5. Uso dos Security Realms com os Clientes EJB Remoto Copiar o linkLink copiado para a área de transferência!
- Adicione um security realm ao domain controller ou servidor autônomo.
- Adicione os seguintes parâmetros ao arquivo
jboss-ejb-client.properties, que está no classpath do aplicativo. Esta amostra assume que a conexão é referida comodefaultpor outros parâmetros no arquivo.remote.connection.default.username=appuser remote.connection.default.password=apppassword
remote.connection.default.username=appuser remote.connection.default.password=apppasswordCopy to Clipboard Copied! Toggle word wrap Toggle overflow - Crie o conector Remoto no servidor autônomo ou domain, que usa o seu novo security realm.
- Implante o seu EJB ao grupo do servidor que é configurado para uso do perfil com o conector Remoto personalizado ou o servidor autônomo caso você não esteja usando o managed domain.
15.4.4.6. Adição do Novo Realm de Segurança Copiar o linkLink copiado para a área de transferência!
Execute o CLI de Gerenciamento.
Inicie o comandojboss-cli.shoujboss-cli.bate conecte-se ao servidor.Crie um novo realm de segurança.
Execute o seguinte comando para criar um novo security realm nomeadoMyDomainRealmno domain controller ou o servidor autônomo./host=master/core-service=management/security-realm=MyDomainRealm:add()
/host=master/core-service=management/security-realm=MyDomainRealm:add()Copy to Clipboard Copied! Toggle word wrap Toggle overflow Crie as referências ao arquivo de propriedade que irá aplicar o store na informação a respeito da nova função.
Execute o seguinte comando para criar um direcionador ao arquivo nomeadomyfile.properties, que terá as propriedades pertencentes à nova função.Nota
O arquivo de propriedade recentemente criado não é gerenciado pelos scriptsadd-user.sheadd-user.batincluídos. Ele deve ser gerenciado externamente./host=master/core-service=management/security-realm=MyDomainRealm/authentication=properties:add(path=myfile.properties)
/host=master/core-service=management/security-realm=MyDomainRealm/authentication=properties:add(path=myfile.properties)Copy to Clipboard Copied! Toggle word wrap Toggle overflow
O seu novo realm de segurança é criado. Quando você adicionar usuários e funções a este novo realm, a informação será stored num arquivo separado aos realms de segurança default. Você pode gerenciar este novo arquivo usando os seus próprios aplicativos e procedimentos.
15.4.4.7. Adição de um usuário ao Realm de Segurança Copiar o linkLink copiado para a área de transferência!
Execute o comando
add-user.shouadd-user.bat.Abra um terminal e altere os diretórios para o diretórioEAP_HOME/bin/. Caso você esteja executando o Red Hat Enterprise Linux ou outro sistema operacional UNIX, execute oadd-user.sh. Caso você execute o Microsoft Windows Server, execute oadd-user.bat.Escolha entre adicionar o Usuário de Gerenciamento ou o Usuário do Aplicativo.
Para este procedimento, digitebpara adicionar o Usuário do Aplicativo.Escolha o realm que o usuário será adicionado.
Por default, o único realm disponível é oApplicationRealm. Caso você tenha adicionado um realm personalizado, você pode digitar o seu nome.Digite o nome do usuário, senha e funções quando solicitado.
Digite o nome do usuário, senha e funções quando solicitado. Verifique sua escolha digitandoyesou digitenopara cancelar as alterações. As alterações são gravadas a cada um dos arquivos de propriedade para o realm de segurança.
15.4.4.8. Acesso EJB Remoto usando a Criptografia SSL Copiar o linkLink copiado para a área de transferência!
15.5. Serviços do Aplicativo JAX-RS Copiar o linkLink copiado para a área de transferência!
15.5.1. Habilitação de Segurança baseada na Função para um Serviço da Web RESTEasy JAX-RS Copiar o linkLink copiado para a área de transferência!
O RestEasy suporta as anotações @RolesAllowed, @PermitAll e @DenyAll nos métodos JAX-RS. No entanto, ele não reconhece essas anotações por default. Siga essas etapas para configurar o arquivo web.xml e habilitar a segurança baseada na função.
Atenção
Procedimento 15.3. Habilitação de Segurança baseada na Função para um Serviço da Web RESTEasy JAX-RS
- Abra o arquivo
web.xmlpara o aplicativo num editor de texto. - Adicione o seguinte <context-param> ao arquivo com as tags
web-app:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Declare todas as funções usadas com o arquivo RESTEasy JAX-RS WAR usando as tags <security-role>:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Autorize o acesso a todos os URLs manuseados pelo período de execução JAX-RS para todas as funções:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
A segurança baseada na função foi habilitada com o aplicativo, com um conjunto de funções definidas.
Exemplo 15.12. Amostra de Configuração de Segurança baseada na Função
15.5.2. Aplique a Segurança no Serviço da Web JAX-RS usando Anotações Copiar o linkLink copiado para a área de transferência!
Este tópico descreve as etapas para segurar o serviço da web JAX-RS usando as anotações de segurança suportadas.
Procedimento 15.4. Aplique a Segurança do Serviço da Web JAX-RS usando as Anotações de Segurança Suportada
- Habilite a segurança baseada na função. Para maiores informações refira-se à Seção 15.5.1, “Habilitação de Segurança baseada na Função para um Serviço da Web RESTEasy JAX-RS”
- Adicione anotações de segurança ao serviço da web JAX-RS. O RESTEasy suporta as seguintes anotações:
- @RolesAllowed
- Define quais funções podem acessar o método. Todas as funções devem ser definidas no arquivo
web.xml. - @PermitAll
- Permite todas as funções definidas no arquivo
web.xmlpara acessar o método. - @DenyAll
- Nega todos os acessos ao método.
Capítulo 16. Single Sign On (SSO - Assinatura Única) Copiar o linkLink copiado para a área de transferência!
16.1. Single Sign On (SSO - Assinatura única) para Aplicativos da Web Copiar o linkLink copiado para a área de transferência!
O Single Sign On (SSO) permite a autenticação a um recurso para autorizar o acesso aos demais recursos.
O SSO sem cluster limita o compartilhamento da informação de autorização aos aplicativos de mesmo host virtual. Além disso, não existe resiliência num evento de falha do host. Os dados SSO com cluster podem ser compartilhados entre aplicativos em hosts virtuais múltiplos e são resilientes à falha. Além disso, o SSO com cluster está apto a receber solicitações a partir do balanceador de carga.
Caso um recurso não esteja protegido, o usuário não é solicitado a autenticá-lo. Caso um usuário acesse um recurso protegido, o usuário é solicitado a autenticá-lo.
Limitações do SSO
- Nenhuma propagação sob os limites de terceiros.
- O SSO pode ser apenas usado entre aplicativos implantados com os contêineres do JBoss EAP 6.
- Autenticação gerenciada apenas pelo contêiner.
- Você deve usar os elementos de autenticação gerenciados pelo contêiner tais como
<login-config>no seuweb.xmldo aplicativo. - Cookies solicitadas.
- O SSO é mantido através de cookies do navegador e a regravação do URL não é suportada.
- Realm e limitações do security-domain
- A não ser que o parâmetro
requireReauthenticationseja configurado paratrue, todos os aplicativos da web configurados na mesma válvula SSO devem compartilhar a mesma configuração Realm noweb.xmle o mesmo security domain.Você pode aninhar o elemento Realm dentro do elemento Host ou o elemento Mecanismo ao redor, mas não dentro do elemento context.xml para um dos aplicativos da web envolvidos.O<security-domain>configurado nojboss-web.xmldeve ser consistente em todos os aplicativos da web.Todas as integrações de segurança devem aceitar os mesmos credenciais (por exemplo, nome do usuário e senha).
16.2. Single Sign On (SSO - Assinatura Única) com Cluster para Aplicativos da Web Copiar o linkLink copiado para a área de transferência!
jboss-web.xml do aplicativo.
- Apache Tomcat ClusteredSingleSignOn
- Apache Tomcat IDPWebBrowserSSOValve
- SPNEGO-based SSO fornecido pelo PicketLink
16.3. Escolha da Correta Implementação SSO Copiar o linkLink copiado para a área de transferência!
Caso sua organização já use um sistema de autorização e autenticação baseado no Kerberos, tal como o Microsoft Active Directory, você pode usar os mesmos sistemas para autenticar de maneira clara os seus aplicativos enterprise executando no JBoss EAP 6.
Caso você necessite propagar a informação de segurança sobre os aplicativos que executam com o mesmo grupo ou instância do servidor, você pode usar um SSO sem cluster. Isto apenas envolve a configuração à válvula no seu descritor jboss-web.xml do aplicativo.
Caso você precise propagar a informação de segurança entre os aplicativos sendo executados num ambiente com cluster por todas as instâncias do JBoss EAP 6, você pode usar a válvula SSO com cluster. Isto está configurado em seu jboss-web.xml do aplicativo.
16.4. Uso do Single Sign On (SSO - Assinatura Única) num Aplicativo da Web Copiar o linkLink copiado para a área de transferência!
As capacidades do Single Sign On (SSO) são fornecidas pelos sistemas da web e Infinispan. Use este procedimento para configurar o SSO nos aplicativos da web.
Pré-requisitos
- Você precisa possuir um security domain configurado do qual manuseia a autenticação e autorização.
- O subsistema
infinispanprecisa estar presente. Ele está presente no perfilfull-hapara um managed domain ou pelo uso da configuraçãostandalone-full-ha.xmlnum servidor autônomo. - O
webcache-containere o contêiner SSO cache devem estar presentes. Os arquivos de configuração inicial já contém o contêinerwebcache e algumas das configurações já contém o contêiner SSO cache também. Use os seguintes comandos para verificar e habilitar o contêiner SSO cache. Perceba que esses comandos modificam o perfilhado managed domain. Você pode alterar os comandos para uso do perfil diferente ou remover a porção/profile=hado comando para o servidor autônomo.Exemplo 16.1. Verificação do
webcache-containerOs perfis e configurações mencionados acima incluem owebcache-container por default. Use os seguintes comandos para verificar sua presença. Caso você use um perfil diferente, substitua este nome porha./profile=ha/subsystem=infinispan/cache-container=web/:read-resource(recursive=false,proxies=false,include-runtime=false,include-defaults=true)
/profile=ha/subsystem=infinispan/cache-container=web/:read-resource(recursive=false,proxies=false,include-runtime=false,include-defaults=true)Copy to Clipboard Copied! Toggle word wrap Toggle overflow Caso o resultado forsuccess, o subsistema está presente. Do contrário, você precisa adicioná-lo.Exemplo 16.2. Adição do
webcache-containerUse os três seguintes comandos para habilitar owebcache-container a sua configuração. Modifique o nome do perfil, conforme apropriado, assim como outros parâmetros. Esses parâmetros são aqueles usados na configuração default./profile=ha/subsystem=infinispan/cache-container=web:add(aliases=["standard-session-cache"],default-cache="repl",module="org.jboss.as.clustering.web.infinispan")
/profile=ha/subsystem=infinispan/cache-container=web:add(aliases=["standard-session-cache"],default-cache="repl",module="org.jboss.as.clustering.web.infinispan")Copy to Clipboard Copied! Toggle word wrap Toggle overflow /profile=ha/subsystem=infinispan/cache-container=web/transport=TRANSPORT:add(lock-timeout=60000)
/profile=ha/subsystem=infinispan/cache-container=web/transport=TRANSPORT:add(lock-timeout=60000)Copy to Clipboard Copied! Toggle word wrap Toggle overflow /profile=ha/subsystem=infinispan/cache-container=web/replicated-cache=repl:add(mode="ASYNC",batching=true)
/profile=ha/subsystem=infinispan/cache-container=web/replicated-cache=repl:add(mode="ASYNC",batching=true)Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemplo 16.3. Verificação do
SSOcache-containerExecute o seguinte comando CLI de Gerenciamento:/profile=ha/subsystem=infinispan/cache-container=web/:read-resource(recursive=true,proxies=false,include-runtime=false,include-defaults=true)
/profile=ha/subsystem=infinispan/cache-container=web/:read-resource(recursive=true,proxies=false,include-runtime=false,include-defaults=true)Copy to Clipboard Copied! Toggle word wrap Toggle overflow Busque por um resultado parecido com:"sso" => {Caso você não possa encontrá-lo, o SSO cache-container não está presente em sua configuração.Exemplo 16.4. Adição do
SSOcache-container/profile=ha/subsystem=infinispan/cache-container=web/replicated-cache=sso:add(mode="SYNC", batching=true)
/profile=ha/subsystem=infinispan/cache-container=web/replicated-cache=sso:add(mode="SYNC", batching=true)Copy to Clipboard Copied! Toggle word wrap Toggle overflow - O subsistema
webprecisa ser configurado para uso do SSO. O seguinte comando habilita o SSO no servidor virtual chamadodefault-hoste o cookie domaindomain.com. O nome do cache ésso, e a reautenticação está desabilitada./profile=ha/subsystem=web/virtual-server=default-host/sso=configuration:add(cache-container="web",cache-name="sso",reauthenticate="false",domain="domain.com")
/profile=ha/subsystem=web/virtual-server=default-host/sso=configuration:add(cache-container="web",cache-name="sso",reauthenticate="false",domain="domain.com")Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Cada aplicativo que compartilhará a informação SSO precisa ser configurado para uso do mesmo <security-domain> em seu descritor de implantação
jboss-web.xmle do mesmo Realm em seu arquivo de configuraçãoweb.xml.
O SSO com Cluster permite o compartilhamento da autenticação entre hosts separados, enquanto o SSO sem cluster não permite isto. As válvulas SSO com e sem cluster são configuradas da mesma maneira, mas o SSO com cluster inclui os parâmetros cacheConfig, processExpiresInterval e maxEmptyLife, que controlam a replicação do cluster dos dados persistidos.
Exemplo 16.5. A amostra da Configuração SSO com Cluster
tomcat.
| Opções | Descrição |
|---|---|
| cookieDomain |
O domain do host a ser usado para o SSO cookies. O default é
/. Para permitir que o app1.xyz.com e app2.xyz.com compartilhem o SSO cookies, você pode determinar o cookieDomain para xyz.com.
|
| maxEmptyLife |
O SSO com cluster apenas. O número máximo de segundos que uma válvula SSO sem sessões será usada por uma solicitação, antes da expiração. Uma válvula positiva permite um manuseamento próprio de encerramento de um nó, caso seja o único com sessão ativa anexada à válvula. Caso o maxEmptyLife seja configurado para
0, a válvula termina ao mesmo tempo que as cópias de sessão local, porém as cópias de backup das sessões a partir dos aplicativos com cluster são disponibilizadas aos outros nós. A permissão à válvula de permanecer ativa além da atividade das sessões gerenciadas permite que o usuário pare para realizar outra solicitação que pode então falhar a um nó diferente, onde isto ativa a cópia de backup da sessão. O default é de 1800 (30 minutos).
|
| processExpiresInterval |
Apenas SSO com cluster. O número mínimo de segundos entre os esforços pela válvula para encontrar e invalidar as instâncias SSO que expiraram o intervalo
MaxEmptyLife. O default é 60 (1 minute).
|
| requiresReauthentication |
Caso verdadeiro, cada solicitação usa os credenciais para reautenticar o realm de segurança. Caso falso (o default), o SSO cookie válido é suficiente para a válvula autenticar cada nova solicitação.
|
Um aplicativo pode invalidar de forma programática uma sessão invocando o método javax.servlet.http.HttpSession.invalidate().
16.5. Kerberos Copiar o linkLink copiado para a área de transferência!
16.6. SPNEGO Copiar o linkLink copiado para a área de transferência!
16.7. Microsoft Active Directory Copiar o linkLink copiado para a área de transferência!
- O Lightweight Directory Access Protocol (LDAP), para informação de aplicação de store sobre usuários, computadores, senhas e outros recursos.
- O Kerberos para fornecimento da autenticação de segurança sobre a rede.
- O Domain Name Service (DNS) para fornecimento de mapeamentos entre os endereços IP e nomes do host dos computadores e outros dispositivos na rede.
16.8. Configuração do Kerberos ou Microsoft Active Directory Desktop SSO para os Aplicativos da Web Copiar o linkLink copiado para a área de transferência!
Para autenticar os seus aplicativos EJB ou da web usando sua infraestrutura da autorização e autenticação baseado no Kerberos existente de sua organização, tal como o Microsoft Active Directory, você pode usar as capacidades do JBoss Negotiation construídas no JBoss EAP 6. Caso você configure o seu aplicativo da web de maneira apropriada, um login da rede ou desktop é suficiente para autenticar o seu aplicativo da web, de forma que nenhuma solicitação de login adicional é requerida.
Existem poucas diferenças notáveis entre o JBoss EAP 6 e as versões anteriores:
- Os security domains são configurados centralmente, para cada perfil de um managed domain ou de cada servidor autônomo. Eles não fazem parte da implantação. O security domain que uma implantação deve usar está nomeado no arquivo
jboss-web.xmloujboss-ejb3.xml. - As propriedades de segurança são configuradas como parte do security domain, como parte de sua configuração central. Elas não fazem parte da implantação.
- Você não precisa mais substituir os autenticadores como parte de sua implantação. No entanto, você pode adicionar uma válvula ao seu descritor
jboss-web.xmlpara atingir o mesmo efeito. A válvula continua requerendo os elementos<security-constraint>e<login-config>a serem definidos noweb.xml. Eles são usados para decidir quais recursos são assegurados. No entanto, o método de autorização escolhido será substituído pela válvula do NegotiationAuthenticator nojboss-web.xml. - Os atributos
CODEnos security domains agora usam o nome simples ao invés de um nome de classe inteiramente qualificado. As seguintes tabelas apresentam os mapeamentos entre as classes usadas para o JBoss Negotiation e suas classes.
| Nome Simples | Nome da Classe | Propósito |
|---|---|---|
| Kerberos | com.sun.security.auth.module.Krb5LoginModule | Módulo de login Kerberos |
| SPNEGO | org.jboss.security.negotiation.spnego.SPNEGOLoginModule | Os mecanismos que habilitam seus aplicativos da Web para autenticar o seu servidor de autenticação Kerberos. |
| AdvancedLdap | org.jboss.security.negotiation.AdvancedLdapLoginModule | Usado para os servidores LDAP além do Microsoft Active Directory. |
| AdvancedAdLdap | org.jboss.security.negotiation.AdvancedADLoginModule | Usado com os servidores Microsoft Active Directory LDAP. |
O JBoss Negotiation Toolkit é uma ferramenta de depuração que está disponível para download a partir do https://community.jboss.org/servlet/JiveServlet/download/16876-2-34629/jboss-negotiation-toolkit.war. Isto é fornecido como uma ferramenta extra para ajudá-lo a depurar e testar os mecanismos de autenticação antes da introdução de seu aplicativo à produção. Isto é uma ferramenta não suportada, porém é considerada de muita ajuda, uma vez que o SPNEGO pode ser difícil de ser configurado para os aplicativos da web.
Procedimento 16.1. Configuração da Autenticação SSO para os seus Aplicativos EJB
Configure um security domain para representar a identidade do servidor. Determine as propriedades caso seja necessário.
O primeiro security domain autentica o próprio contêiner ao serviço do diretório. Ele precisa usar um módulo de login que aceita algum tipo de mecanismo de login estático, uma vez que o usuário real não está envolvido. Esta amostra usa um principal estático e referencia um arquivo keytab que contém o credencial.O código XML é gerado aqui para clareza, porém você deve usar o Console de Gerenciamento ou CLI de Gerenciamento para configuração de seus security domains.Copy to Clipboard Copied! Toggle word wrap Toggle overflow Configure o segundo security domain para assegurar o aplicativo da web ou aplicativos. Determine as propriedades do sistema caso seja necessário.
O segundo security domain é usado para autenticar o usuário individual ao Kerberos ou servidor de autenticação SPNEGO. Você precisa de pelo menos um módulo de login para autenticação do usuário e outro para buscar as funções a serem aplicadas ao usuário. O seguinte código XML apresenta um modelo de autorização para mapeamento das funções no próprio servidor de autenticação.Copy to Clipboard Copied! Toggle word wrap Toggle overflow Especifique o security-constraint e login-config no
web.xmlO descritorweb.xmlcontém informação sobre as restrições de segurança e configuração de login. Segue abaixo algumas amostras de valores para cada uma.Copy to Clipboard Copied! Toggle word wrap Toggle overflow Especifique o security domain e outras configurações no descritor
jboss-web.xml.Especifique o nome do security domain ao lado do cliente (a segunda amostra) no descritorjboss-web.xmlde sua implantação para direcionar o seu aplicativo para uso de seu security domain.Você não pode mais substituir os autenticadores diretamente. Ao invés disto, você pode adicionar o NegotiationAuthenticator como um valor ao seu descritorjboss-web.xml, caso seja necessário. O<jacc-star-role-allow>permite você usar o caractere (*) de asterisco para coincidir com os nomes de função múltiplos e é opcional.Copy to Clipboard Copied! Toggle word wrap Toggle overflow Adicione uma dependência ao seu
MANIFEST.MFdo aplicativo para localizar as classes de Negociação.O aplicativo da web precisa de uma dependência noorg.jboss.security.negotiationda classe a ser adicionada ao manifesto doMETA-INF/MANIFEST.MFda implantação, com o objetivo de localizar as classes do JBoss Negotiation. Segue abaixo uma entrada propriamente formatada.Manifest-Version: 1.0 Build-Jdk: 1.6.0_24 Dependencies: org.jboss.security.negotiation
Manifest-Version: 1.0 Build-Jdk: 1.6.0_24 Dependencies: org.jboss.security.negotiationCopy to Clipboard Copied! Toggle word wrap Toggle overflow
O seu aplicativo da web aceita e autentica os credenciais em relação ao Kerberos, Microsoft Directory ou outro serviço do diretório compatível com o SPNEGO. Caso o usuário executar o aplicativo a partir de um sistema que já está conectado ao serviço do diretório, e onde as funções solicitadas já são aplicadas ao usuário, o aplicativo da web não solicita a autenticação e as capacidade SSO são atingidas.
Capítulo 17. Segurança baseada na Função nos Aplicativos Copiar o linkLink copiado para a área de transferência!
17.1. Arquitetura de Extensão de Segurança Copiar o linkLink copiado para a área de transferência!
A primeira parte da infraestrutura é o JAAS API. O JAAS é um framework plugável que fornece uma camada de abstração entre a sua infraestrutura de segurança e seu aplicativo.
org.jboss.security.plugins.JaasSecurityManager, que implementa as interfaces AuthenticationManager e RealmMapping. O JaasSecurityManager integra o EJB e camadas do contêiner da web, baseado no elemento <security-domain> do descritor de implantação do componente correspondente.
JaasSecurityManagerService MBean
O serviço JaasSecurityManagerService MBean coordena os gerenciadores de segurança. Embora seu nome inicie com Jaas, os gerenciadores de segurança que este serviço gerencia não precisam usar o JAAS em suas implementações. O nome reflete o fato de que a implementação do gerenciador de segurança default é o JaasSecurityManager.
JaasSecurityManagerService é externalizar a implementação do gerenciador de segurança. Você pode alterar a implementação do gerenciador de segurança fornecendo uma implementação alternativa das interfaces AuthenticationManager e RealmMapping.
JaasSecurityManagerService é fornecer uma implementação JNDI javax.naming.spi.ObjectFactory para permitir um gerenciamento simples sem código do binding entre o nome JNDI e a implementação do gerenciador de segurança. Para habilitar a segurança, especifique o nome JNDI da implementação do gerenciador de segurança através do elemento descritor de implantação <security-domain>.
JaasSecurityManagerService efetua o bind no next naming system reference, nomeando-se como JNDI ObjectFactory sob o nome java:/jaas. Isto permite uma convenção de nomeação na forma de java:/jaas/XYZ como valor para o elemento <security-domain> e que a instância do gerenciador de segurança para o security domain XYZ seja criada conforme o necessário. Tudo isto, pela criação de uma instância de classe especificada pelo atributo SecurityManagerClassName, usando um construtor que leva o nome do security domain.
Nota
java:/jaas em seu descritor da implantação. No entanto, você poderá incluí-lo para compatibilidade reversa, porém isto é ignorado.
O org.jboss.security.plugins.JaasSecurityDomain é uma extensão do JaasSecurityManager que adiciona a noção de um KeyStore, KeyManagerFactory e um TrustManagerFactory para suporte do SSL e outros de uso de criptografia.
Por favor refira-se à Seção 17.3, “Java Authentication and Authorization Service (JAAS)” para maiores informações e exemplos práticos sobre a arquitetura de segurança.
17.2. Java Authentication and Authorization Service (JAAS) Copiar o linkLink copiado para a área de transferência!
17.3. Java Authentication and Authorization Service (JAAS) Copiar o linkLink copiado para a área de transferência!
Os grupos do servidor (num managed domain) e servidores (no servidor autônomo) incluem a configuração para os security domains. O security domain inclui a informação a respeito da combinação da autenticação, autorização, mapeamento e módulos de auditoria com detalhes de configuração. Um aplicativo especifica qual security domain ele requer, pelo nome no próprio jboss-web.xml.
A configuração específica do aplicativo assume um ou mais dos seguintes arquivos:
| Arquivo | Descrição |
|---|---|
| ejb-jar.xml |
O descritor da implantação para o aplicativo Enterprise JavaBean (EJB) localizado no diretório
META-INF do EJB. Use o ejb-jar.xml para especificar as funções e as mapeie aos principals no nível do aplicativo. Você pode também limitar os métodos específicos e as classes de certas funções. Isto é também utilizado para outra configuração específica do EJB não relacionada à segurança.
|
| web.xml |
O descritor de implantação do aplicativo da web Java Enterprise Edition (EE). Use o
web.xml para declarar o security domain que o aplicativo usa para autenticação e autorização, assim como restrições de transporte e recurso para o aplicativo, tais como a limitação dos tipos de solicitações HTTP permitidas. Você pode configurar uma autenticação baseada na web simples neste arquivo. Isto é também usado para outra configuração específica do aplicativo não relacionada com a segurança.
|
| jboss-ejb3.xml |
Contém as extensões específicas do JBoss para o descritor
ejb-jar.xml.
|
| jboss-web.xml |
Contém as extensões específicas do JBoss ao descritor
web.xml.
|
Nota
ejb-jar.xml e web.xml estão definidos na especificação do Java Enterprise Edition (Java EE). O jboss-ejb3.xml fornece extensões específicas do JBoss para o ejb-jar.xml e o jboss-web.xml fornece extensões específicas do JBoss para o web.xml.
O Java Authentication and Authorization Service (JAAS) é um framework para segurança à nível do usuário nos aplicativos Java, usando os pluggable authentication modules (PAM - módulos de autenticação plugáveis). Ele está integrado no Java Runtime Environment (JRE). O componente ao lado do contêiner é o org.jboss.security.plugins.JaasSecurityManager MBean no JBoss EAP 6. Ele fornece as implementações default das interfaces AuthenticationManagere RealmMapping.
O JaasSecurityManager usa os pacotes JAAS para implantar o comportamento da interface do AuthenticationManager e RealmMapping. Na realidade, seu comportamento deriva da execução das instâncias do módulo de login que são configuradas no security domain pelo qual o JaasSecurityManager foi determinado. Os módulos de login implementam a autenticação principal do security domain e comportamento de mapeamento de função. Você pode usar o JaasSecurityManager por todos os security domains pelo plugging em configurações para os domains.
EJBHome. O EJB já foi implantado no servidor e seus métodos de interface EJBHome foram assegurados usando os elementos <method-permission> no descritor ejb-jar.xml. Ele usa o security domain jwdomain, que é especificado no elemento <security-domain> do arquivo jboss-ejb3.xml. A imagem abaixo apresenta as etapas que serão explicadas mais tarde:
Figura 17.1. Etapas da Invocação do Método EJB com Segurança
- O cliente executa o login JAAS para estabelecer o principal e credenciais para autenticação. Isto é o Client Side Login rotulado na figura. Isto pode ser também executado na forma de JNDI.Para executar um login JAAS, você cria uma instância de LoginContext e passa o nome de configuração para uso. Neste caso, o nome da configuração é
other. Este login associa de uma vez só o principal do login e credenciais com todas as invocações de método EJB subsequente. Este processo não autentica o usuário necessariamente. A natureza do login ao lado do cliente depende da configuração do módulo de login que o cliente usa. Nesta amostra, a entrada da configuração de login ao lado do clienteotherusa o módulo de loginClientLoginModule. Este módulo efetua o bind no nome do usuário e senha à camada de invocação EJB para autenticação mais tarde no servidor. A autenticação do cliente não é autenticado no cliente. - O cliente obtém o método
EJBHomee o invoca no servidor. A invocação inclui os argumentos do método passados ao cliente, juntamente com a identidade do usuário e credenciais a partir do login JAAS ao lado do cliente. - No lado do servidor, o servidor de segurança autentica o usuário que invocou o método. Isto envolve outro login JAAS.
- O security domain na parte inferior determina a escolha dos módulos de login. O nome do security domain é passado ao construtor
LoginContextcomo o nome de entrada da configuração do login. O security domain éjwdomain. Caso a autenticação for bem sucedida, o JAAS Subject é criado. O JAAS subject inclui PrincipalSet, que inclui os seguintes credenciais:- A instância
java.security.Principalque corresponde à identidade do cliente a partir do ambiente de segurança da implantação. - Um
java.security.acl.GroupchamadoRolesque contém os nomes da função do domain do aplicativo do usuário. Os objetosorg.jboss.security.SimplePrincipaldo tipo representam os nomes da função. Essas funções validam o acesso aos métodos EJB de acordo com as restrições noejb-jar.xmle implementação do métodoEJBContext.isCallerInRole(String). - O
java.security.acl.Groupopcional nomeadoCallerPrincipal, que contém umorg.jboss.security.SimplePrincipalúnico que corresponde à identidade do chamador do domain do aplicativo. O associado do grupo CallerPrincipal é o valor retornado pelo métodoEJBContext.getCallerPrincipal(). Este mapeamento permite que o Principal no ambiente de segurança operacional mapeie um Principal conhecido pelo aplicativo. Na ausência do mapeamento CallerPrincipal, o principal operacional é o mesmo do principal do domain do aplicativo.
- O servidor verifica que o usuário chamando o método EJB possui permissão. A execução desta autorização envolve as seguintes etapas:
- Obtém os nomes de funções para acesso do método EJB a partir do contêiner EJB. Os nomes de funções são determinados pelos elementos <role-name> do descritor
ejb-jar.xmlde todos os elementos <method-permission> contendo o método invocado. - Caso nenhuma das funções seja determinada ou o método especificado num elemento de lista exclusivo, o acesso ao método é negado. Do contrário, o método
doesUserHaveRoleé invocado no gerenciador de segurança pelo interceptor de segurança para verificar se o chamador possui um dos nomes de função determinado. Esse método interage através dos nomes de função e verifica se o grupoSubject Rolesdo usuário autenticado contém um SimplePrincipal com o nome da função determinado. O acesso é permitido caso o nome da função seja um associado do grupo Funções. O acesso é negado caso nenhum dos nomes de função seja associado. - Caso o EJB use um proxy de segurança personalizado, a invocação do método é delegada do proxy. Caso o proxy de segurança negar acesso ao chamador, ele lança um
java.lang.SecurityException. Do contrário, o acesso ao método EJB é permitido e a invocação do método passa ao próximo interceptor do contêiner. O SecurityProxyInterceptor manuseia esta checagem e este interceptor não é apresentado. - Para as solicitações da conexão, o servidor da web verifica as restrições de segurança definidas no
web.xmlque combinam com o recurso solicitado e o método HTTP acessado.Caso a restrição existir para a solicitação, o servidor da web chama o JaasSecurityManager para executar a autenticação principal, que em troca garante que as funções do usuário são associadas com o objeto principal.
17.4. Uso do Security Domain em seu Aplicativo Copiar o linkLink copiado para a área de transferência!
Para uso de um security domain em seu aplicativo, primeiro você precisa configurar o domain tanto no arquivo de configuração do servidor ou arquivo descritor do aplicativo. Então, você deve adicionar as anotações requeridas ao EJB que usam isto. Este tópico descreve as etapas solicitadas para uso de um security domain em seu aplicativo.
Procedimento 17.1. Configure o seu Aplicativo para Uso de um Security Domain
Definição do Security Domain
Você pode definir o security domain tanto no arquivo de configuração do servidor ou arquivo descritor aplicativo.Configuração do security domain no arquivo de configuração do servidor.
O security domain é configurado no subsistemasecuritydo arquivo de configuração do servidor. Caso a instância do JBoss EAP 6 estiver sendo executada num managed domain, este é o arquivodomain/configuration/domain.xml. Caso a instância do JBoss EAP 6 estiver sendo executada como um servidor autônomo, este é o arquivostandalone/configuration/standalone.xml.Os security domainsother,jboss-web-policyejboss-ejb-policysão fornecidos por default no JBoss EAP 6. A seguinte amostra XML foi copiada a partir do subsistemasecurityno arquivo de configuração do servidor.Copy to Clipboard Copied! Toggle word wrap Toggle overflow Você pode configurar os security domains adicionais conforme seja necessário usando o Console de Gerenciamento ou CLI.Configuração do security domain no arquivo do descritor do aplicativo
O security domain é especificado no elemento filho<security-domain>do elemento<jboss-web>no arquivoWEB-INF/jboss-web.xmldo aplicativo. A seguinte amostra configura o security domain nomeadomy-domain.Copy to Clipboard Copied! Toggle word wrap Toggle overflow Esta é uma das muitas configurações que você pode especificar no descritorWEB-INF/jboss-web.xml.
Adição da Anotação Requerida para o EJB
Você configura a segurança no EJB usando as anotações@SecurityDomaine@RolesAllowed. A seguinte amostra de código EJB limita o acesso ao security domainotherpor usuários na funçãoguest.Copy to Clipboard Copied! Toggle word wrap Toggle overflow Para maiores amostras de código, consulte oejb-securityquickstart do pacote do JBoss EAP 6 Quickstarts, disponível a partir do Portal do Cliente Red Hat.
17.5. Uso da Segurança baseada na Função nos Servlets Copiar o linkLink copiado para a área de transferência!
jboss-web.xml do WAR.
Antes de você usar a segurança baseada na função num servlet, o security domain usado para autenticar e autorizar o acesso precisa ser configurado no contêiner do JBoss EAP 6.
Procedimento 17.2. Adição da Segurança baseada na Função aos Servlets
Adição dos mapeamentos entre os padrões servlets e URL.
Use os elementos<servlet-mapping>noweb.xmlpara mapear os servlets individuais aos padrões URL. A seguinte amostra mapeia o servlet chamadoDisplayOpResultao/DisplayOpResultdefault de URL.Copy to Clipboard Copied! Toggle word wrap Toggle overflow Adição das restrições de segurança nos padrões URL.
Para mapear o default URL a uma restrição de segurança, use o<security-constraint>. A seguinte amostra de acesso às restrições a partir do/DisplayOpResultdefault de URL a ser acessado pelos principals com oeap_adminda função. A função necessita estar presente no security domain.Copy to Clipboard Copied! Toggle word wrap Toggle overflow Você precisa especificar o método de autenticação, que pode ser qualquer um dos seguintes:BASIC, FORM, DIGEST, CLIENT-CERT, SPNEGO.Essa amostra usa a autenticaçãoBASIC.Especificação do security domain no
jboss-web.xmldo WAR.Adicione o security domain aojboss-web.xmldo WAR com o objetivo de conectar os servlets ao security domain configurado, que sabe como autenticar e autorizar os principals em referências de segurança. A seguinte amostra usa o security domain chamadoacme_domain.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Exemplo 17.1. Amostra web.xml com a Segurança configurada baseada na função
17.6. Uso do Sistema de Autenticação de Terceiros no seu Aplicativo Copiar o linkLink copiado para a área de transferência!
Nota
context.xml. As válvulas são configuradas diretamente no descritor jboss-web.xml. O context.xml é agora ignorado.
Exemplo 17.2. Válvula de Autenticação Básica
Exemplo 17.3. Conjunto de Atributos do Cabeçalho com a Válvula Personalizada
A gravação de seu próprio autenticador não encontra-se no contexto desta documentação. No entanto, o seguinte código Java é fornecido como uma amostra.
Exemplo 17.4. GenericHeaderAuthenticator.java
Capítulo 18. Migração Copiar o linkLink copiado para a área de transferência!
18.1. Configuração das Alterações de Segurança do Aplicativo Copiar o linkLink copiado para a área de transferência!
Nas versões anteriores do JBoss EAP, os arquivos de propriedades posicionados no diretório EAP_HOME/server/SERVER_NAME/conf/ estavam no classpath e poderiam ser facilmente encontrados pelo UsersRolesLoginModule. No JBoss EAP 6, a estrutura do diretório foi alterada. Os arquivos da propriedade devem ser empacotados com aplicativo para disponibilizá-los no classpath.
Importante
security-domains para o standalone/configuration/standalone.xml ou o arquivo de configuração do servidor domain/configuration/domain.xml:
${jboss.server.config.dir} refere-se ao diretório EAP_HOME/standalone/configuration/. Caso a instância estiver executando num managed domain, o ${jboss.server.config.dir} refere-se ao diretório EAP_HOME/domain/configuration/.
Os security domains não usam mais o prefixo java:/jaas/ em seus nomes no JBoss EAP 6.
- Você deve remover esse prefixo das configurações do security domain para os aplicativos da Web no
jboss-web.xml. - Você deve remover esse prefixo das configurações do security domain para os aplicativos Enterprise no
jboss-web.xml. Esse arquivo foi substituído pelojboss.xmlno JBoss EAP 6.
Apêndice A. Referência Copiar o linkLink copiado para a área de transferência!
A.1. Módulos de Autenticação Incluídos Copiar o linkLink copiado para a área de transferência!
Role com o nome Code.
Code ou o nome completo (pacote qualificado) para referir-se ao module.jaa
Módulos de Autenticação
| Código | Classe | Descrição |
|---|---|---|
| Cliente | Classe | O módulo de login é designado a estabelecer credenciais e a identidade do chamador quando o JBoss EAP 6 estiver agindo como cliente. Isto nunca deve ser usado como parte de um security domain usado na autenticação do servidor atual. |
| Remoto | N/A | O módulo de login é usado para verificar se a solicitação sendo autenticada no momento é uma solicitação recebida numa conexão Remota. Neste caso, a identidade que foi criada durante o processo de autenticação é usado e associado com a solicitação atual. Caso a solicitação não chegar numa conexão Remota, este módulo não realiza nada e permite que o JAAS baseado no login continue ao próximo módulo. |
| RealmDirect | N/A | O módulo de login RealmDirect faz uso do realm de segurança para autenticar a solicitação atual. Caso isto não ocorra no módulo de login Remoto, o realm será usado para carregar as funções dos usuários. Por default, este módulo de login assume que o realm use o ApplicationRealm nomeado, embora outros nomes possam ser substituídos. A vantagem desta abordagem é que toda a configuração store de backup pode ser deixada no realm com o security domain delegando o realm. |
| Opções | Tipo | Default | Descrição |
|---|---|---|---|
multi-threaded | true ou false
| false
|
Configure para verdadeiro caso cada thread possua o próprio storage credencial e principal. Configure para falso para indicar que todos os threads na MV compartilham a mesma identidade e credencial.
|
password-stacking
| useFirstPass ou false
| false
|
Configure para useFirstPass para indicar que este módulo de login deve buscar por informações stored no LoginContext para uso como a identidade. Esta opção pode ser usada quando empilhando outros módulos de login com este.
|
restore-login-identity
| true ou false
| false
|
Configure para verdadeiro caso a identidade e credencial vistos no início do método login() devem ser restaurados após o método logout() ser invocado.
|
| Código | Certificate
|
| Classe | org.jboss.security.auth.spi.BaseCertLoginModule
|
| Descrição |
Este módulo de login é designado a autenticar os usuários baseados no
X509 Certificates. Um caso de usuário sobre isto é a autenticação CLIENT-CERT de um aplicativo da web.
|
| Opções | Tipo | Default | Descrição |
|---|---|---|---|
securityDomain
| faixa |
nenhum
|
Nome do security domain que possui a configuração JSSE para o truststore que contém os certificados trusted.
|
verifier
| Classe |
nenhum
|
Nome de clouds para uso em importações.
org.jboss.security.auth.certs.X509CertificateVerifier
|
| Código | CertificateUsers
|
| Classe | org.jboss.security.auth.spi.UsersRolesLoginModule
|
| Descrição |
Isto usa os recursos das propriedades. O primeiro mapeia os nomes dos usuários para senhas e o segundo mapeia os nomes do usuário para funções.
|
| Opções | Tipo | Default | Descrição |
|---|---|---|---|
unauthenticatedIdentity
| Sequência |
nenhum
|
Define o nome principal que deve ser determinado para solicitações que não contém informação da autenticação. Isto pode permitir que servlets não protegidos invocarem métodos nos EJBs que não requerem uma função específica. Tal principal não possui funções associadas e pode apenas acessar tanto métodos EJB ou EJBs que são associados com uma restrição
unchecked permission.
|
password-stacking
| useFirstPass ou false
| false
|
Configure para
useFirstPass para indicar que esse módulo de login deve buscar pela informação stored no LoginContext para uso como identidade. Esta opção pode ser usada quando empilhando outros módulos com este.
|
hashAlgorithm | Sequência |
nenhum
|
O nome do algoritmo
java.security.MessageDigest para efetuar o hash da senha. Não há default para isto, de forma que esta opção deve ser configurada explicitamente para habilitação do hash. Quando o hashAlgoritm for especificado, a senha de texto obtido do CallbackHandler obtém o hash antes de ser passada ao UsernamePasswordLoginModule.validatePassword como argumento inputPassword. O expectedPassword stored no arquivo users.properties deve possuir hash comparáveis. Refira-se ao http://docs.oracle.com/javase/6/docs/api/java/security/MessageDigest.html para informações sobre o java.security.MessageDigest e algoritmos que essa classe suporta.
|
hashEncoding
| base64 ou hex
| base64
|
O formato desta sequência para a senha com hash, caso o
hashAlgorithm seja também configurado.
|
hashCharset
| Sequência |
A codificação default configurada no ambiente do contêiner.
|
A codificação usada para converter a senha de texto limpo para um byte array.
|
usersProperties
|
O caminho de arquivo inteiramente qualificado e nome do arquivo ou recurso de propriedades.
| users.properties
|
O arquivo contendo os mapeamentos entre os usuários e senhas. Cada propriedade no arquivo possui o formato
username=password.
|
rolesProperties
| O caminho de arquivo inteiramente qualificado e nome do arquivo ou recurso de propriedades. | roles.properties
|
O arquivo contendo os mapeamentos entre os usuários e funções. Cada propriedade do arquivo possui o formato
username=role1,role2,...,roleN.
|
ignorePasswordCase
| true ou false
| false
|
Se é que a comparação da senha deve ignorar o caso. Isto é útil para a codificação de senha com hash onde o caso da senha com hash não é significante.
|
principalClass
| O nome da classe inteiramente qualificado. |
nenhum
|
A classe de implementação
Principal que contém um condutor que leva um argumento de Sequência para o nome principal.
|
roleGroupSeparator
|
Um caractere único
| . (um período único)
|
O caractere usado para separar o nome do usuário a partir do nome do grupo de função no arquivo
rolesGroup.
|
defaultUsersProperties
| faixa | defaultUsers.properties
|
O nome do recurso ou arquivo de retrocedência caso o arquivo usersProperties não possa ser encontrado.
|
defaultRolesProperties
| faixa | defaultRoles.properties
|
O nome do recurso ou arquivo de retrocedência caso o arquivo
rolesProperties não possa ser encontrado.
|
hashUserPassword
| true ou false
| true
|
Se é que efetuar o hash na senha inserida pelo usuário, quando o
hashAlgorithm for especificado. O default é true.
|
hashStorePassword
| true ou false
| true
|
Se é que a senha do store retornada do
getUsersPassword() deve possuir o hash, quando o hashAlgorithm for especificado.
|
digestCallback
| O nome da classe inteiramente qualificado. |
nenhum
|
O nome da classe da implementação
org.jboss.crypto.digest.DigestCallback que inclui o conteúdo de resumo pré ou pós tal como valores salt. Isto é apenas usado caso o hashAlgorithm seja especificado.
|
storeDigestCallback
| O nome da classe inteiramente qualificado. |
nenhum
|
O nome da classe da implementação
org.jboss.crypto.digest.DigestCallback que inclui o conteúdo de resumo pré/pós como salts para o hashing da senha stored. Isto é apenas usado caso o hashStorePassword for verdadeiro e o hashAlgorithm for especificado.
|
callback.option.STRING
| Diversos | nenhum |
Todas as opções pré-fixadas com
callback.option. são passadas para o método DigestCallback.init(Map). O nome do usuário inserido é sempre passado através da opção javax.security.auth.login.name e a senha de entrada/store é passada através da opção javax.security.auth.login.password ao digestCallback ou storeDigestCallback.
|
| Código | CertificateRoles
|
| Classe | org.jboss.security.auth.spi.CertRolesLoginModule
|
| Descrição |
O módulo de login estende o módulo de login do certificado para adicionar as capacidades de mapeamento de função a partir do arquivo de propriedades. Isto leva tudo de mesmas opções como o módulo de login do Certificado e adiciona as seguintes opções:
|
| Opções | Tipo | Default | Descrição |
|---|---|---|---|
rolesProperties
| Sequência | roles.properties
|
O nome do recurso ou arquivo contendo as funções para determinação de cada usuário. O arquivo de propriedades de função no formato username=role1,role2 onde o nome do usuário é o DN do certificado, escapando qualquer sinal de
= (igual) e caracteres com espaço. A seguinte amostra está no formato correto:
CN\=unit-tests-client,\ OU\=Red\ Hat\ Inc.,\ O\=Red\ Hat\ Inc.,\ ST\=North\ Carolina,\ C\=US=JBossAdmin
|
defaultRolesProperties
| Sequência | defaultRoles.properties
|
O nome do recurso ou arquivo de retrocedência caso o arquivo
rolesProperties não possa ser encontrado.
|
roleGroupSeparator
| Um caractere único | . (um período único)
|
Qual caractere de uso conforme o separador de grupo de função no arquivo
roleProperties.
|
| Código | Database |
| Classe | org.jboss.security.auth.spi.DatabaseServerLoginModule
|
| Descrição |
O módulo de login baseado no JDBC que suporta o mapeamento de função e autenticação. Isto é baseado em duas tabelas lógicas, com as seguintes definições:
|
| Opções | Tipo | Default | Descrição |
|---|---|---|---|
dsJndiName
| Recurso JNDI |
nenhum
|
O nome do storing do recurso JNDI da informação de autenticação. Esta opção é requerida.
|
principalsQuery
| Uma declaração SQL preparada | select Password from Principals where PrincipalID=?
|
A fila SQL preparada para obtenção da informação sobre o principal.
|
rolesQuery
| Uma declaração SQL preparada | select Role, RoleGroup from Roles where PrincipalID=?
|
A fila SQL preparada para obtenção da informação sobre as funções. Isto deve ser equivalente ao
select Role, RoleGroup from Roles where PrincipalID=?, onde Role (Função) é o nome da Função e o valor de coluna RoleGroup deve sempre ser tanto Roles com letra maiúscula R ou CallerPrincipal.
|
| Código | DatabaseCertificate
|
| Classe | org.jboss.security.auth.spi.DatabaseCertLoginModule
|
| Descrição |
O módulo de login estende o módulo de login do Certificado para adicionar as capacidades de mapeamento de função a partir da tabela da fonte de dados. Isto possui as mesmas opções, além das opções adicionais:
|
| Opções | Tipo | Default | Descrição |
|---|---|---|---|
dsJndiName
| Recurso JNDI |
|
O nome do storing do recurso JNDI da informação de autenticação. Esta opção é requerida.
|
rolesQuery
| Uma declaração SQL preparada | select Role,RoleGroup from Roles where PrincipalID=?
|
A declaração preparada SQL a ser executada em ordem das funções a serem mapeadas. Isto deve ser equivalente ao
select Role, RoleGroup from Roles where PrincipalID=?, onde Role (Função) é o nome da Função e o valor de coluna RoleGroup deve sempre ser tanto Roles com letra maiúscula R ou CallerPrincipal.
|
suspendResume
| true ou false
| true
|
Se é que a transação JTA existente deve ser suspendida durante as operações de fonte de dados.
|
| Código | Identity
|
| Classe | org.jboss.security.auth.spi.IdentityLoginModule
|
| Descrição |
Associa o principal especificado nas opções de módulo com qualquer assunto autenticado em relação ao módulo. O tipo de classe Principal usado é
org.jboss.security.SimplePrincipal.. Caso nenhuma opção seja especificada, um principal com o nome de guest será usado.
|
| Opções | Tipo | Default | Descrição |
|---|---|---|---|
principal
| Sequência | guest
|
O nome a ser usado pelo principal.
|
roles
| A lista de vírgula separada das sequências |
nenhum
|
A lista de vírgula delimitada das funções a serem determinadas ao assunto.
|
| Código | Ldap
|
| Classe | org.jboss.security.auth.spi.LdapLoginModule
|
| Descrição |
Autentica em relação ao servidor LDAP, quando o nome do usuário e senha forem stored num servidor LDAP que é acessível usando um provedor JNDI LDAP. Muitas das opções não são requeridas, uma vez que elas são determinadas pelo provedor LDAP ou o ambiente.
|
| Opções | Tipo | Default | Descrição |
|---|---|---|---|
java.naming.factory.initial
| nome da classe | com.sun.jndi.ldap.LdapCtxFactory
|
O nome da classe de implementação
InitialContextFactory.
|
java.naming.provider.url
| ldap:// URL
|
nenhum
|
URL para o servidor LDAP.
|
java.naming.security.authentication
| none, simple, ou o nome do mecanismo SASL
| simple
|
O nível de segurança para uso para efetuar o bind no servidor LDAP.
|
java.naming.security.protocol
| O protocolo de transporte |
Caso não especificado, determinado pelo provedor.
|
O protocolo de transporte para uso do acesso de segurança, tal como o SSL.
|
java.naming.security.principal
| Sequência |
nenhum
|
O nome do principal para autenticação do chamador para o serviço. Isto é construído a partir de outras propriedades descritas abaixo.
|
java.naming.security.credentials
| O tipo de credencial |
nenhum
|
O tipo de credencial usado pelo esquema de autenticação. Alguns exemplos, incluindo a senha com hash, senha de texto limpo, chave ou certificado. Caso a propriedade não estiver especificada, o comportamento é determinado pelo provedor do serviço.
|
principalDNPrefix
| Sequência |
nenhum
|
O prefixo adicionado para o nome do usuário para formar o DN. Você pode solicitar o nome do usuário e construir o DN inteiramente qualificado usando o
principalDNPrefix e principalDNSuffix.
|
principalDNSuffix
| faixa |
|
O sufixo adicionado para o nome do usuário para formar o DN. Você pode solicitar o nome do usuário e construir o DN inteiramente qualificado usando o
principalDNPrefix e principalDNSuffix.
|
useObjectCredential
| true ou false
|
falso
|
Se é que o credencial deve ser obtido como um Objeto Opaco usando o tipo
org.jboss.security.auth.callback.ObjectCallback de Callback ao invés de uma senha char[] usando um JAAS PasswordCallback. Isto permite a passagem de informação de credencial non-char[] ao servidor LDAP.
|
rolesCtxDN
| Um DN inteiramente qualificado |
nenhum
|
O DN inteiramente qualificado para o contexto para busca das funções do usuário.
|
userRolesCtxDNAttributeName
|
Atributo
|
nenhum
|
O atributo no objeto do usuário que contém o DN para o contexto para pesquisa das funções do usuário. Isto difere-se do
rolesCtxDN no que se refere ao contexto de busca das funções do usuário, que poderão ser únicas para cada usuário.
|
roleAttributeID
| Atributo | roles
|
Nome do atributo contendo funções do usuário.
|
roleAttributeIsDN
| true ou false
| false
|
Se é que o
roleAttributeID contém o DN inteiramente qualificado do objeto da função. Caso seja falso, o nome da função é obtida do valor do atributo roleNameAttributeId do nome do contexto. Certos esquemas do diretório, tais como o Microsoft Active Directory, requerem que este atributo seja configurado para true.
|
roleNameAttributeID
| Atributo | group
|
O nome do atributo com o contexto
roleCtxDN que contém o nome da função. Caso a propriedade roleAttributeIsDN seja configurada para true, esta propriedade será usada para buscar o atributo do nome do objeto de função.
|
uidAttributeID
| Atributo | uid
|
O nome do atributo no
UserRolesAttributeDN que corresponde à ID do usuário. Isto é usado para localizar as funções do usuário.
|
matchOnUserDN
| true ou false
| false
|
Se é que a busca das funções do usuário devem coincidir com o DN inteiramente distinguido do usuário ou apenas nome do usuário. Caso seja
true, o DN completo de usuário é usado como valor de combinação. Caso seja false, apenas o nome do usuário é usado para combinar o valor em referência ao atributo uidAttributeName.
|
allowEmptyPasswords
| true ou false
| true
|
Se é que permitir as senhas vazias. A maioria dos servidores LDAP tratam senhas vazias com tentativas de login anônimas. Configure isto para falso, com o objetivo de rejeitar senhas vazias.
|
| Código | LdapExtended
|
| Classe | org.jboss.security.auth.spi.LdapExtLoginModule
|
| Descrição |
Uma implementação de módulo de login que usa buscas para localizar o usuário bind e funções associadas. A fila das funções segue recursivamente os DNs para navegar a uma estrutura de função hierárquica. Isto usa as mesmas opções
java.naming como o módulo Ldap e usa as seguintes opções ao invés de outras opções do módulo Ldap.
A autenticação acontece em duas etapas:
|
| Opções | Tipo | Default | Descrição |
|---|---|---|---|
baseCtxDN
| Um DN inteiramente qualificado |
nenhum
|
O DN fixado do contexto de nível superior para iniciar a busca do usuário.
|
bindDN
| Um DN inteiramente qualificado |
nenhum
|
O DN usado para efetuar o bind no servidor LDAP para as solicitações de funções e dos usuários. Este DN precisa ler e buscar permissões nos valores
baseCtxDN e rolesCtxDN.
|
bindCredential
| Uma sequência, opcionalmente criptografada |
nenhum
|
A senha armazenada como texto plano para o
bindDN, ou carregada externamente usando o comando EXT. Essa senha pode ser criptografada usando o mecanismo vault. Você pode usar os seguintes formatos:
Refira-se ao seguinte tópico para maiores informações sobre as sequências confidenciais de criptografia: Seção 10.11.2, “Criação do Java Keystore para Sequências Confidenciais do Store”
|
baseFilter
| Sequência do filtro LDAP |
nenhum
|
O filtro de busca para localizar o contexto do usuário para autenticação. O nome do usuário ou userDN obtido da chamada de retorno do módulo de login é substituído no filtro em qualquer local onde uma expressão
{0} for usada. Uma amostra comum de busca do filtro é (uid={0}).
|
rolesCtxDN
| DN inteiramente qualificado |
nenhum
|
O DN fixado do contexto de busca para as funções do usuário. Este não é o DN onde as funções atuais se encontram, mas o DN onde os objetos contendo as funções do usuário estão. Por exemplo, num servidor Microsoft Active Directory, este é o DN onde a conta do usuário se encontra.
|
roleFilter
| Sequência do filtro LDAP |
|
A busca do filtro usada para localizar as funções associadas com o usuário de autenticação. O nome do usuário de entrada ou userDN obtido pela chamada de retorno do módulo de login é substituído no filtro em qualquer local onde a expressão
{0} for usada. O uderDN autenticado é substituído no filtro em qualquer lugar onde um {1} for usado. Uma amostra da busca do filtro que combina com o nome do usuário de entrada é (member={0}). Uma alternativa que combina com o userDN autenticado é o (member={1}).
|
roleAttributeIsDN | true ou false
| false
|
Se é que o
roleAttributeID contém o DN inteiramente qualificado do objeto da função. Caso seja falso, o nome da função é obtida do valor do atributo roleNameAttributeId do nome do contexto. Certos esquemas do diretório, tais como o Microsoft Active Directory, requerem que este atributo seja configurado para true.
|
defaultRole
|
Nome da função
|
nenhum
|
A função incluída para todos os usuários autenticados.
|
parseRoleNameFromDN
| true ou false
| false
|
O sinalizador indicando se o DN retornado por uma fila contém o roleNameAttributeID. Caso configurado para
true, o DN é checado pelo roleNameATtributeID. Caso configurado para false, o DN não é checado pelo roleNameAttributeID. Este sinalizador pode melhorar o desempenho das filas LDAP.
|
parseUsername
| true ou false
| false
|
Um sinalizador indicando se o DN deve ser pesquisado pelo nome do usuário. Caso configurado para
true, o DN pelo nome do usuário. Caso configurado para false o DN pelo nome do usuário. Esta opção é usada juntamente com o usernameBeginString e usernameEndString.
|
usernameBeginString
|
uma sequência
|
nenhum
|
Define a sequência que está prestes a ser removida a partir do início do DN para revelar o nome do usuário. Esta opção é usada juntamente com o
usernameEndString.
|
usernameEndString
|
uma sequência
|
nenhum
|
Define a sequência que está prestes a ser removida a partir do final do DN para revelar o nome do usuário. Esta opção é usada juntamente com o
usernameBeginString.
|
roleNameAttributeID
| Atributo | group
|
O nome do atributo com o contexto
roleCtxDN que contém o nome da função. Caso a propriedade roleAttributeIsDN seja configurada para true, esta propriedade será usada para buscar o atributo do nome do objeto de função.
|
distinguishedNameAttribute
| Atributo | distinguishedName
|
O nome do atributo na entrada do usuário que contém o DN do usuário. Isto deve ser necessário caso o próprio DN do usuário conter caracteres especiais (barra invertida, por exemplo) que previne o mapeamento do usuário correto. Caso o atributo não existir, o DN de entrada será usado.
|
roleRecursion
| O número | 0
|
Os números de níveis de recursão de busca da função serão inferiores ao do contexto de combinação. Desabilite a recursão configurando-a para
0.
|
searchTimeLimit
| O número | 10000 (10 segundos)
|
O intervalo em milésimos de segundos para buscas do usuário e funções.
|
searchScope
|
Um dos:
OBJECT_SCOPE, ONELEVEL_SCOPE, SUBTREE_SCOPE
| SUBTREE_SCOPE
|
O escopo de busca para uso.
|
allowEmptyPasswords
| true ou false
| true
|
Se é que permitir as senhas vazias. A maioria dos servidores LDAP tratam senhas vazias com tentativas de login anônimas. Configure isto para falso, com o objetivo de rejeitar senhas vazias.
|
| Código | RoleMapping
|
| Classe | org.jboss.security.auth.spi.RoleMappingLoginModule
|
| Descrição |
Mapeia a função que é o resultado final do processo de autenticação a uma função declarativa. Este módulo deve ser sinalizado como
optional quando você adicioná-lo ao security domain.
|
| Opções | Tipo | Default | Descrição |
|---|---|---|---|
rolesProperties
| O caminho de arquivo inteiramente qualificado e nome do arquivo ou recurso de propriedades. | roles.properties
|
O caminho do arquivo inteiramente qualificado e nome do arquivo de propriedades ou recurso que mapeia funções para substituição das funções. O formato é
original_role=role1,role2,role3.
|
replaceRole
| true ou false
| false
|
Se é que adicionar às funções atuais ou substituir as funções atuais pelas mapeadas. Isto é substituído caso configurado para
true.
|
| Código | RunAs
|
| Classe | Class: org.jboss.security.auth.spi.RunAsLoginModule
|
| Descrição |
O módulo ajudante que envia uma função
run as à pilha para a duração da fase de login da autenticação e tira a função run as da pilha tanto na fase de confirmação ou anulação. Este módulo de login fornece uma função para os demais módulos que devem acessar os recursos de segurança com o objetivo de executar suas autenticações, tais como o módulo de login que acessa o EJB de segurança. O RunAsLoginModule deve ser configurado antes dos módulos de login que requerem a função run as a ser estabelecida.
|
| Opções | Tipo | Default | Descrição |
|---|---|---|---|
roleName
| Nome da função | nobody
|
O nome da função de uso como a função
run as durante a fase de login.
|
| Código | Simple
|
| Classe | org.jboss.security.auth.spi.SimpleServerLoginModule
|
| Descrição |
O módulo para montagem rápida de segurança para propósitos de testes. Ele implementa o seguinte algoritmo simples:
|
Simple
O módulo Simple não possui opções.
| Código | ConfiguredIdentity
|
| Classe | org.picketbox.datasource.security.ConfiguredIdentityLoginModule
|
| Descrição |
Associa o principal especificado nas opções do módulo com qualquer assunto autenticado em referência ao módulo. O tipo de classe Principal usada é
org.jboss.security.SimplePrincipal.
|
| Opções | Tipo | Default | Descrição |
|---|---|---|---|
principal
| Nome do principal. | none
|
O principal que será associado com qualquer assunto autenticado em referência ao módulo.
|
| Código | SecureIdentity
|
| Classe | org.picketbox.datasource.security.SecureIdentityLoginModule
|
| Descrição |
Este módulo é fornecido para propósitos de legacia. Isto permite você criptografar a senha e então usar a senha criptografada com um principal estatístico. Caso o seu aplicativo usar
SecureIdentity, considere o uso de um mecanismo vault da senha.
|
| Opções | Tipo | Default | Descrição |
|---|---|---|---|
username
| faixa | nenhum | O nome do usuário para autenticação. |
password
| sequência criptografada | nenhum |
A senha de uso para autenticação. Para criptografar a senha, use o módulo diretamente na linha de comando.
java org.picketbox.datasource.security.SecureIdentityLoginModule password_to_encrypt
Copie o resultado deste comando no campo do valor da opção do módulo.
|
managedConnectionFactoryName
| Recurso JCA | nenhum |
O nome da conexão JCA para a fonte de dados.
|
| Código | PropertiesUsers
|
| Classe | org.jboss.security.auth.spi.PropertiesUsersLoginModule
|
| Descrição |
Usa o arquivo das propriedades para aplicar o store dos nomes do usuário e senhas para autenticação. Nenhuma autorização (mapeamento de função) é fornecido. Este módulo é apenas apropriado para testes.
|
| Código | SimpleUsers
|
| Classe | org.jboss.security.auth.spi.SimpleUsersLoginModule
|
| Descrição |
O módulo de login efetua o store do nome do usuário e senha de texto limpo no arquivo de propriedades Java. Isto está incluído para testes apenas e não é apropriado para um ambiente de produção.
|
| Opções | Tipo | Default | Descrição |
|---|---|---|---|
username
| faixa | nenhum | O nome de usuário para uso da autenticação. |
password
| faixa | nenhum | A senha de texto limpo para uso da autenticação. |
| Código | LdapUsers
|
| Classe | org.jboss.security.auth.spi.LdapUsersLoginModule
|
| Descrição |
O módulo
LdapUsers é substituído pelos módulos ExtendedLDAP e AdvancedLdap.
|
| Código | Kerberos
|
| Classe | com.sun.security.auth.module.Krb5LoginModule
|
| Descrição |
Executa a autenticação de login do Kerberos, usando GSSAPI. Este módulo faz parte do framework de segurança a partir do API fornecido pelo Sun Microsystems. Maiores informações podem ser encontradas no http://docs.oracle.com/javase/1.4.2/docs/guide/security/jaas/spec/com/sun/security/auth/module/Krb5LoginModule.html. Este módulo precisa ser emparelhado com outro módulo que manuseia o mapeamento de funções e autenticação.
|
| Opções | Tipo | Default | Descrição |
|---|---|---|---|
storekey
| true ou false
| falso |
Se é que ou não adicionar o
KerberosKey aos credenciais privados do assunto.
|
doNotPrompt
| true ou false
| falso |
Caso configurado para
true, não haverá solicitação de senha ao usuário.
|
useTicketCache
|
Valor Booliano de
. true ou false
| falso |
Caso
true, o GTG é obtido a partir do cache do tíquete. Caso false, o cache do tíquete não será usado.
|
ticketcache
| Um arquivo ou recurso representando um cache de tíquete Kerberos. |
O default depende do sistema operacional em que você está utilizando.
| A localização do cache do tíquete do cache. |
useKeyTab
| true ou false
| falso | Se é que obter a chave principal a partir de um arquivo de tabela de chave. |
keytab
| O arquivo ou recurso representando o Kerberos keytab. |
a localização do arquivo de configuração Kerberos do sistema operacional ou
/home/user/krb5.keytab
| A localização do arquivo da tabela da chave. |
principal
| Sequência | nenhum |
O nome do principal. Isto pode ser tanto um nome de usuário ou um nome de serviço tal como
host/testserver.acme.com. Use isto ao invés de obter o principal a partir da tabela chave ou quando a tabela chave conter mais de um principal.
|
useFirstPass
| true ou false
| falso |
Se é que recuperar o nome do usuário e senha a partir do estado compartilhado do módulo, usando o
javax.security.auth.login.name e javax.security.auth.login.password como chaves. Caso a autenticação falhar, nenhuma nova tentativa é realizada.
|
tryFirstPass
| true ou false
| falso |
O mesmo ao do
useFirstPass, mas se a autenticação falhar, o módulo usa o CallbackHandler para recuperar uma nova senha e nome do usuário. Caso uma segunda autenticação falhar, a falha é relatada ao aplicativo de chamada.
|
storePass
| true ou false
| falso |
Se é que realizar o store no nome do usuário e senha no estado compartilhado do módulo. Isto não acontece caso as chaves já existirem no estado compartilhado ou se a autenticação falhar.
|
clearPass
| true ou false
| falso |
Defina isto para
true para limpar o nome do usuário e senha do estado compartilhado após ambas as fases de autenticação forem completadas.
|
| Código | SPNEGOUsers
|
| Classe | org.jboss.security.negotiation.spnego.SPNEGOLoginModule
|
| Descrição |
Permite a autenticação SPNEGO ao servidor Microsoft Active Directory ou de outro ambiente que suporta o SPNEGO. O SPNEGO pode levar as credenciais do Kerberos. Este módulo precisa ser emparelhado com outro módulo que manuseia o mapeamento de função e autenticação.
|
| Opções | Tipo | Default | Descrição |
|---|---|---|---|
storeKey
| true ou false
| false
|
Se é que ou não aplicar o store na chave.
|
useKeyTab
| true ou false
| false
|
Se é que usar uma tabela de chave.
|
principal
|
Sequência representando o principal para a autenticação Kerberos.
|
nenhum
|
O nome do principal para autenticação.
|
keyTab
|
O arquivo ou recurso de representação da keytab.
| none
|
A localização da tabela da chave.
|
doNotPrompt
| true ou false
| false
|
Se é que solicitar a senha.
|
debug
| true ou false
| false
|
Se é que gravar as mensagens mais verbosas para propósitos de depuração.
|
| Código | AdvancedLdap |
| Classe | org.jboss.security.negotiation.AdvancedLdapLoginModule
|
| Descrição |
O módulo que fornece funcionalidade adicional, tal como SASL e uso do security domain JAAS.
|
| Opções | Tipo | Default | Descrição |
|---|---|---|---|
bindAuthentication
|
faixa
|
nenhum
|
O tipo de autenticação SASL para uso do binding para o servidor do diretório.
|
java.naming.provider.url
| string
|
nenhum
|
O URI do servidor do diretório.
|
baseCtxDN
|
O Distinguished Name (DN - Nome Distinguido) inteiramente qualificado.
|
nenhum
|
O nome distinguido para uso como base para as pesquisas.
|
baseFilter
|
A sequência representando um filtro de busca LDAP.
|
nenhum
|
O filtro para uso para diminuir os resultados de busca.
|
roleAttributeID
|
Uma sequência representando um atributo LDAP.
|
nenhum
|
O atributo LDAP que contém os nomes das funções de autorização.
|
roleAttributeIsDN
| true ou false
| false
|
Se é que o atributo da função é um Distinguished Name (DN - Nome Distinguido).
|
roleNameAttributeID
|
A sequência representando um atributo LDAP.
|
nenhum
|
O atributo contido com o
RoleAttributeId que contém o atributo de função atual.
|
recurseRoles
| true ou false
| false
|
Se é que buscar de recursivamente o
RoleAttributeId para funções.
|
| Código | AdvancedADLdap |
| Classe | org.jboss.security.negotiation.AdvancedADLoginModule
|
| Descrição |
Este módulo estende o módulo de login
AdvancedLdap e adiciona parâmetros extra que são relevantes ao Microsoft Active Directory.
|
| Código | UsersRoles |
| Classe | org.jboss.security.auth.spi.UsersRolesLoginModul
|
| Descrição |
O módulo de login simples que suporta usuários múltiplos e funções de usuários stored em dois arquivos de propriedades diferentes.
|
| Opções | Tipo | Default | Descrição |
|---|---|---|---|
usersProperties
|
Caminho a um arquivo ou recurso.
| users.properties
|
O arquivo ou recurso que contém os mapeamentos do usuário-à-senha. O formato do arquivo é
user=hashed-password
|
rolesProperties
|
Caminho a um arquivo ou recurso.
| roles.properties
|
O arquivo ou recurso que contém os mapeamentos do usuário-à-função. O formato do arquivo é
username=role1,role2,role3
|
password-stacking
| useFirstPass ou false
| false
|
O valor do
useFirstPass indica que este módulo de login deve primeiramente observar a informação stored no LoginContext para a identidade. Esta opção pode ser usada quando empilhando outros módulos de login com este.
|
hashAlgorithm
|
A sequência representando um algoritmo hashing da senha.
| none
|
O nome do algoritmo
java.security.MessageDigest para efetuar o hash na senha. Não há default de forma que esta opção deve ser explicitamente configurada para habilitar o hashing. Quando o hashAlgorithm for especificado, a senha de texto limpo obtido a partir do CallbackHandler contém hash antes de ser passado ao UsernamePasswordLoginModule.validatePassword como um argumento inputPassword. A senha stored no arquivo users.properties deve ser um hash comparável.
|
hashEncoding
| base64 ou hex
| base64
|
O formato da sequência para a senha com hash, caso o hashAlgoritmo for também configurado.
|
hashCharset
|
Sequência
|
A codificação default determinada no ambiente do período de execução do contêiner.
|
A codificação usada para converter a senha de texto limpo para um byte array.
|
unauthenticatedIdentity
|
O nome principal
|
nenhum
|
Define o nome principal determinado para solicitações que não contém informação de autenticação. Isto pode permitir que servlets não protegidos invoquem métodos nos EJBs que não solicitem uma função específica. Tal principal não possui funções associadas e podem apenas acessar métodos EJB e EJBs que são associados com a restrição
unchecked permission.
|
Os módulos de autenticação são implementações do javax.security.auth.spi.LoginModule. Refira-se à documentação API para maiores informações sobre a criação de um módulo de autenticação personalizado.
A.2. Módulos de Autorização Incluída Copiar o linkLink copiado para a área de transferência!
| Código | Classe |
|---|---|
| DenyAll | org.jboss.security.authorization.modules.AllDenyAuthorizationModule |
| PermitAll | org.jboss.security.authorization.modules.AllPermitAuthorizationModule |
| Delegação | org.jboss.security.authorization.modules.DelegatingAuthorizationModule |
| Web | org.jboss.security.authorization.modules.WebAuthorizationModule |
| JACC | org.jboss.security.authorization.modules.JACCAuthorizationModule |
A.3. Módulos de Mapeamento de Segurança Incluída Copiar o linkLink copiado para a área de transferência!
| Código | Classe |
|---|---|
| PropertiesRoles | org.jboss.security.mapping.providers.role.PropertiesRolesMappingProvider |
| SimpleRoles | org.jboss.security.mapping.providers.role.SimpleRolesMappingProvider |
| DeploymentRoles | org.jboss.security.mapping.providers.DeploymentRolesMappingProvider |
| DatabaseRoles | org.jboss.security.mapping.providers.role.DatabaseRolesMappingProvider |
| LdapRoles | org.jboss.security.mapping.providers.role.LdapRolesMappingProvider |
A.4. Módulos do Fornecedor de Auditoria de Segurança Incluídos Copiar o linkLink copiado para a área de transferência!
| Código | Classe |
|---|---|
| LogAuditProvider | org.jboss.security.audit.providers.LogAuditProvider |
A.5. Referência da Configuração jboss-web.xml Copiar o linkLink copiado para a área de transferência!
O jboss-web.xml é um arquivo com o seu diretório WEB-INF ou META-INF da implantação. Ele contém informação de configuração sobre os recursos que o contêiner do JBoss Web adiciona à especificação Servlet 3.0. As configurações específicas à especificação Servlet 3.0 são posicionadas no web.xml do mesmo diretório.
jboss-web.xml é o elemento <jboss-web>.
Muitos dos requerimentos de mapeamento da configuração disponíveis configurados no web.xml do aplicativo aos recursos locais. As explicações das configurações web.xml podem ser encontradas no http://docs.oracle.com/cd/E13222_01/wls/docs81/webapp/web_xml.html.
web.xml solicitar o jdbc/MyDataSource, o jboss-web.xml poderá mapear o java:/DefaultDS da fonte de dados global para preencher esta necessidade para o jdbc/MyDataSource.
| Função | Descrição |
|---|---|
| env-entry |
O mapeamento a um
env-entry solicitado pelo web.xml.
|
| ejb-ref |
O mapeamento a um
ejb-ref solicitado pelo web.xml.
|
| ejb-local-ref |
Um mapeamento a um
ejb-local-ref solicitado pelo web.xml.
|
| service-ref |
O mapeamento a um
service-ref solicitado pelo web.xml.
|
| resource-ref |
O mapeamento a um
resource-ref solicitado pelo web.xml.
|
| resource-env-ref |
O mapeamento a um
resource-env-ref solicitado pelo web.xml.
|
| message-destination-ref |
O mapeamento a um
message-destination-ref solicitado pelo web.xml.
|
| persistence-context-ref |
O mapeamento a um
persistence-context-ref solicitado pelo web.xml.
|
| persistence-unit-ref |
O mapeamento a um
persistence-unit-ref solicitado pelo web.xml.
|
| post-construct |
O mapeamento a um
post-context solicitado pelo web.xml.
|
| pre-destroy |
O mapeamento a um
pre-destroy solicitado pelo web.xml.
|
| data-source |
O mapeamento a um
data-source solicitado pelo web.xml.
|
| context-root | O contexto raiz do aplicativo. O valor default é o nome da implantação sem o sufixo .war. |
| virtual-host | O nome do host virtual HTTP que o aplicativo aceita as solicitações. Isto refere-se aos conteúdos do cabeçalho HTTP Host. |
| anotação | Descreve uma anotação usado pelo aplicativo. Refira-se ao <annotation> para maiores informações. |
| listener (ouvinte) | Descreve um ouvinte usado pelo aplicativo. Refira-se ao <listener> para maiores informações. |
| session-config | O elemento preenche a mesma função ao do elemento <session-config> do web.xml e é incluído apenas para compatibilidade. |
| válvula | Descreve a válvula usada pelo aplicativo. Refira-se ao <valve> para maiores informações. |
| overlay | O nome da sobreposição para adição ao aplicativo. |
| security-domain | O nome do security domain usado pelo aplicativo. O próprio security domain é configurado no console baseado na web ou no CLI de gerenciamento. |
| security-role | Este elemento preenche a mesma função como o elemento <security-role> do web.xml e é incluído apenas para a compatibilidade. |
| use-jboss-authorization | Caso este elemento estiver presente e conter o valor de inconfiabilidade do caso como "verdadeiro", a pilha de autorização do JBoss web será usada. Caso ele não estiver presente ou conter qualquer valor que não é "verdadeiro", apenas os mecanismos da autorização especificados nas especificações do Java Enterprise Edition serão usados. Este elemento é novo para o JBoss EAP 6. |
| disable-audit | Caso este elemento vazio estiver presente, a auditoria de segurança da web será desabilitada. Do contrário, isto será habilitado. A auditoria de segurança da web não faz parte da especificação do Java EE. Este elemento é novo no JBoss EAP 6. |
| disable-cross-context | Caso false, o aplicativo está apto a chamar outro contexto de aplicativo. O default é true. |
Descreve uma anotação usada pelo aplicativo. A seguinte tabela lista os elementos filho de um <annotation>.
| Função | Descrição |
|---|---|
| class-name |
Nome da classe de anotação
|
| servlet-security |
O elemento, tal como
@ServletSecurity, que representa a segurança servlet.
|
| run-as |
O elemento, tal como
@RunAs, que representa a informação run-as.
|
| multi-part |
O elemento, tal como
@MultiPart, que representa a informação múltipla em partes.
|
Descreve um ouvinte. A seguinte tabela lista os elementos filhos de um <listener>.
| Função | Descrição |
|---|---|
| class-name |
O nome da classe do ouvinte.
|
| listener-type |
Lista os elementos
condition que indicam qual o tipo de ouvinte deve ser adicionado ao Contexto do aplicativo. As escolhas válidas são:
|
| module |
O nome do módulo contendo a classe ouvinte.
|
| param |
O parâmetro. Isto contém dois elementos filhos,
<param-name> e <param-value>.
|
Descreve a válvula do aplicativo. Ele contém os mesmos elementos de configuração como o <listener>.
A.6. Referência do Parâmetro de Segurança EJB Copiar o linkLink copiado para a área de transferência!
| Elemento | Descrição |
|---|---|
<security-identity>
|
Contém elementos filhos relativos à identidade de segurança de um EJB.
|
<use-caller-identity />
|
Indica que o EJB usa a mesma identidade de segurança à do chamador.
|
<run-as>
|
Contém um elemento
<role-name>.
|
<run-as-principal>
|
Caso presente, indica o principal assinalado para chamadas de saída. Caso não esteja presente, as chamadas de saída são determinadas a um principal nomeado
anonymous.
|
<role-name>
|
Especifica que a função do EJB deve ser executada.
|
<description>
|
Descreve a função nomeada no
. <role-name>
|
Exemplo A.1. Amostras da identidade de segurança
<session>.
Apêndice B. Histórico de Revisão Copiar o linkLink copiado para a área de transferência!
| Histórico de Revisões | |||
|---|---|---|---|
| Revisão 1.0.0-1 | Wed Jul 02 2014 | ||
| |||