Mecanismos de autenticación en la capa de transporte:
<local default-user="$local" skip-group-loading="true"/>
<properties path="mgmt-users.properties" relative-to="jboss.server.config.dir"/>
<properties path="mgmt-groups.properties" relative-to="jboss.server.config.dir"/>
<local default-user="$local" allowed-users="*" skip-group-loading="true"/>
<properties path="application-users.properties" relative-to="jboss.server.config.dir"/>
<properties path="application-roles.properties" relative-to="jboss.server.config.dir"/>
<module-option name="password-stacking" value="useFirstPass"/>
<module-option name="password-stacking" value="useFirstPass"/>
<policy-module code="Delegating" flag="required"/>
<policy-module code="Delegating" flag="required"/>
...
<pattern-formatter pattern="%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%E%n"/>
<file relative-to="jboss.server.log.dir" path="audit.log"/>
<suffix value=".yyyy-MM-dd"/>
<append value="true"/>
<level name="TRACE"/>
<handler name="AUDIT"/>
username=HEX(MD5(username ':' realm ':' password))
experto=579f4faae456fd4b742f89e35fa935e2
admin=c22052286cd5d72239a90fe193737253
experto=Users
admin=Administrators
Login module Database
CREATE TABLE USERS (
principal_id VARCHAR(64) primary key,
password VARCHAR(64));
;
CREATE TABLE ROLES (
principal_id VARCHAR(64) primary key,
user_role VARCHAR(64),
;
ALTER TABLE ROLES
ADD CONSTRAINT FK1_PRINCIPLES
FOREIGN KEY ( principal_id)
REFERENCES USERS (principal_id)
ON DELETE CASCADE
;
# Crear un nuevo security domain con seguridad basada en base de datos
batch
connect
# Configure the security domain
/subsystem=security/security-domain=seguridad-db/:add(cache-type=default)
/subsystem=security/security-domain=seguridad-db/authentication=classic:add(login-modules=[{"code"=>"Database", "flag"=>"required", "module-options"=>[("dsJndiName"=>"java:jboss/datasources/seguridad"),("principalsQuery"=>"SELECT PASSWORD FROM USERS WHERE principal_id = ?"), ("rolesQuery"=>"SELECT user_role, 'Roles' FROM ROLES where principal_id = ?")]}])
# Run the batch commands
run-batch
# Reload the server configuration
:reload
<module-option name="password-stacking" value="useFirstPass"/>
<module-option name="hashAlgorithm" value="MD5"/>
<module-option name="hashEncoding" value="hex"/>
Servlet habilitado para roles específicos:
@WebServlet("/listado")
@ServletSecurity(@HttpConstraint(rolesAllowed = { "rol_usuario","rol_administrador" }))
public class ConsultaServlet extends HttpServlet {
@Resource(mappedName = "jdbc/seguridad")
DataSource segDS;
protected void processRequest(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
web.xml
30
index.jsp
BASIC
Mi dominio de seguridad
<description />
rol_usuario
<description />
rol_administrador
Descriptor específico de WildFly jboss-web.xml, en la carpeta WEB-INF.
/intranet
mi-dominio
Especificamos el Security Domain a utilizar.
sudo apt-get update
sudo apt-get -y install slapd ldap-utils
sudo dpkg-reconfigure slapd
Preguntas | Respuestas |
---|---|
Omit OpenLDAP server configuration | ua.es |
Organization name | jtech |
Administrator password | expertojavajs |
Database backend to use | HDB |
Do you want the database to be purged? | yes |
Move old database | yes |
Allow LDAPv2 protocol | no |
Script LDIF
#grupo de usuarios
dn: ou=users,dc=ua,dc=es
objectClass: organizationalUnit
ou: users
#grupo de roles
dn: ou=roles,dc=ua,dc=es
objectClass: organizationalUnit
ou: roles
#alumno1
dn: uid=alu1,ou=users,dc=ua,dc=es
objectclass: top
objectclass: uidObject
objectClass: inetOrgPerson
objectclass: person
uid: alu1
cn: Cuenta de alu1
sn: alu1
userPassword: alu1
mail: alu1@ua.es
#alumno2
dn: uid=alu2,ou=users,dc=ua,dc=es
objectclass: top
objectclass: uidObject
objectClass: inetOrgPerson
objectclass: person
uid: alu2
cn: Cuenta de alu2
sn: alu2
userPassword: alu2
mail: alu2@ua.es
#profesor1
dn: uid=prof1,ou=users,dc=ua,dc=es
objectclass: top
objectclass: uidObject
objectClass: inetOrgPerson
objectclass: person
uid: prof1
cn: Cuenta de prof1
sn: prof1
userPassword: prof1
mail: prof1@ua.es
#definir rol_usuario y miembros
dn: cn=rol_usuario,ou=roles,dc=ua,dc=es
objectclass: top
objectclass: groupOfNames
cn: rol_usuario
description: grupo de alumnos
member: uid=alu1,ou=users,dc=ua,dc=es
member: uid=alu2,ou=users,dc=ua,dc=es
#definir rol_administrador y miembros
dn: cn=rol_administrador,ou=roles,dc=ua,dc=es
objectclass: top
objectclass: groupOfNames
cn: rol_administrador
description: grupo de profesores
member: uid=prof1,ou=users,dc=ua,dc=es
sudo ldapadd -x -D cn=admin,dc=ua,dc=es -W -f directorio.ldif
<module-option name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory"/>
<module-option name="java.naming.provider.url" value="ldap://localhost:389"/>
<module-option name="java.naming.security.authentication" value="simple"/>
<module-option name="bindDN" value="cn=admin,dc=ua,dc=es"/>
<module-option name="bindCredential" value="expertojavajs"/>
<module-option name="baseCtxDN" value="ou=users,dc=ua,dc=es"/>
<module-option name="baseFilter" value="(uid={0})" />
<module-option name="rolesCtxDN" value="ou=roles,dc=ua,dc=es" />
<module-option name="roleFilter" value="(member={1})" />
<module-option name="roleAttributeID" value="cn" />
<module-option name="searchScope" value="ONELEVEL_SCOPE" />
<module-option name="allowEmptyPasswords" value="true" />
Perfil | Permisos |
---|---|
Monitor | Consulta de la información en tiempo de ejecución. |
Operator | Monitor + además parar/arrancar instancias, activar/desactivar colas JMS y liberar conexiones de BBDD |
Maintainer | Operator + modificar la configuración: desplegar nuevas aplicaciones y recursos. |
Deployer | Como Maintainer pero restringidosal despliegue de aplicaciones. |
Perfil | Descripción |
---|---|
Administrator | Maintainer + ver y modificar datos sensibles (como la seguridad). Sin acceso al sistema de auditoria de administración (audit logging system). |
Auditor | Administrator + consultar/modificar el audit loggin system). |
Super User | Tiene todos los permisos, equivalente al usuario Administrator de versiones anteriores. |
<user name="$local"/>
<user alias="experto" name="experto" />