Mostrando entradas con la etiqueta configuracion. Mostrar todas las entradas
Mostrando entradas con la etiqueta configuracion. Mostrar todas las entradas

martes, 20 de noviembre de 2018

Clonando y cambiando partición root en Linux

Contexto:
Sucede que mis particiones de root siempre las hago alrededor de los 20GB. Usualmente esto me da espacio suficiente para soportar mucho tiempo antes de la próxima reinstalación.
 Pero esta vez no, cuando trate de dimensionar root, me dio errores. Entonces tome la decisión de clonar root y cambiarlo.

Nota:
De momento ha funcionado bien y sin problemas.

Pasos:
  1. Utilizando un Live CD en mi caso use Kubuntu 14.02 (Viejo). Entro en en modo "Probar sin instalar".
  2.  Dentro entro al gestor de particiones de KDE. Comando:
    partitionmanager




  • Dentro encontré: 

    • /dev/sda7 como root (20GB), 
    • /dev/sda5 como home(350GB). 
    • Simplemente lo que hice fue hacer algo de espacio para la nueva partición que superara su tamaño original. Esta fue asignada con 90GB y quedo como /dev/sda8




  • Lo siguiente que debemos hacer es clonar sda7 (Viejo root) en /dev/sda8 (Nuevo root). Usando el comando: 
    dd if=/dev/sda7 of=/dev/sdb8 bs=64K conv=noerror,sync
  •  El siguiente paso fue montar /dev/sda7 y el /dev/sda8 para poder editar el fstab. Usando Dolphin es solo cuestión de darle un par de clicks.
  •  Debemos editar el /etc/fstab de ambas particiones. Quedaría algo como esto: Nota: Soy de vieja escuela y siempre me ha parecido mejor usar particiones que UUID. Sin embargo en el final de este post encontraras como cambiar los UUID de la vieja partición.
  • Como se logra ver en la imagen anterior, antes se usaba la UUID del /dev/sda7. Pero ahora directamente lo cambie para /dev/sda8. Y esto para no tener que lidear con NADA mas. Sino tendriamos que actualizar un monton de cosas entre ellas grub.(Recortar cambiar el FSTAB DE AMBAS PARTICIONES)
  • Para este punto ya podemos reiniciar (Dejar de usar el LiveCD
  • Con la nueva partición corriendo, si ejecutamos el
    df -h
    se puede notar  que la partición aun tiene 20Gb de espacio. Esto es porque se clono de forma que la tabla de particiones se duplico. Lo que debemos hacer es ejecutar este comando:
    sudo resize2fs /dev/sda8 
    de esta forma se actualiza y ahora si me marca los 90GB de espacio. 

  • Epilogo
    Como editar el UUID de un disco duro con comandos?

    Contexto:
    Como se duplico la vieja root, también duplico el UUID y esto no es recomendable.

    Es tan sencillo como generar un nuevo UUID y actualizarlo:

    uuidgen
    #bbef6868-6903-456e-ad5e-2784154dfb9a
    tune2fs /dev/sda7 -U bbef6868-6903-456e-ad5e-2784154dfb9a
    

    miércoles, 1 de marzo de 2017

    Seguridad con SpringBoot y CSRF

    La seguridad con con Springboot es realmente sencilla.
    Para activar la Basic Html, simplemente creamos un conjunto de clases de esta forma:

    @EnableWebSecurity
    @Configuration
    @EnableSpringHttpSession
    public class SecurityConfig extends WebSecurityConfigurerAdapter {
    
        @Value("${com.pmj.dyo.configuration.security.user}")
        private String user;
    
        @Value("${com.pmj.dyo.configuration.security.password}")
        private String password;
        
        @Value("${com.pmj.dyo.configuration.csrf.login}")
        private String loginPage;
        
        @Value("${com.pmj.dyo.configuration.csrf.allow}")
        private String[] patterns;
    
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http.authorizeRequests().antMatchers(patterns).permitAll().and().csrf().disable().httpBasic().and()
                    .addFilterAfter(csrfFilter(patterns), FilterSecurityInterceptor.class)
                    .addFilterAfter(new CsrfGrantingFilter(loginPage), CsrfFilter.class);
        }
    
        private Filter csrfFilter(String[] patterns) {
            CsrfFilter csrfFilter = new CsrfFilter(csrfTokenRepository());
            csrfFilter.setRequireCsrfProtectionMatcher(csrfProtectionMatcher(patterns));
            return csrfFilter;
        }
    
        private NoAntPathRequestMatcher csrfProtectionMatcher(String[] patterns) {
            return new NoAntPathRequestMatcher(patterns);
        }
    
        private CsrfTokenRepository csrfTokenRepository() {
            HttpSessionCsrfTokenRepository repository = new HttpSessionCsrfTokenRepository();
            repository.setHeaderName(X_XSRF_TOKEN);
            return repository;
        }
    
        /**
         * bCryptPasswordEncoder
         * 
         * @return
         */
        @Bean
        public BCryptPasswordEncoder bCryptPasswordEncoder() {
            return new BCryptPasswordEncoder();
        }
    
        /**
         * configureGlobal
         * 
         * @param auth
         * @throws Exception
         */
        @Autowired
        public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
            auth.inMemoryAuthentication().withUser(user).password(password).roles("USER");
        }
    
        /**
         * sessionRepository
         * 
         * @return
         */
        @Bean
        @SuppressWarnings("rawtypes")
        public SessionRepository sessionRepository() {
            return new MapSessionRepository();
        }
    
        /**
         * sessionStrategy
         * 
         * @return
         */
        @Bean
        public HeaderHttpSessionStrategy sessionStrategy() {
            return new HeaderHttpSessionStrategy();
        }
    
        /**
         * @return the user
         */
        public String getUser() {
            return user;
        }
    
        /**
         * @param user
         *            the user to set
         */
        public void setUser(String user) {
            this.user = user;
        }
    
        /**
         * @return the password
         */
        public String getPassword() {
            return password;
        }
    
        /**
         * @param password
         *            the password to set
         */
        public void setPassword(String password) {
            this.password = password;
        }
    }
    
    ////////////////////////////////////////////////////////////////////////////////////////////
    
    
    public class CsrfGrantingFilter implements Filter {
    
        public static final String X_XSRF_TOKEN = "X-XSRF-TOKEN";
    
        private String loginPage;
    
        private final Logger log = LoggerFactory.getLogger(this.getClass());
    
        /**
         * Login Page injection
         * @param loginPage
         */
        public CsrfGrantingFilter(String loginPage) {
            this.loginPage = loginPage;
        }
    
        @Override
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
                throws IOException, ServletException {
            CsrfToken csrf = (CsrfToken) servletRequest.getAttribute(CsrfToken.class.getName());
            String token = csrf.getToken();
            if (token != null && isAuthenticating(servletRequest)) {
                servletRequest.setAttribute(X_XSRF_TOKEN, true);
            } else {
                servletRequest.setAttribute(X_XSRF_TOKEN, false);
            }
            filterChain.doFilter(servletRequest, servletResponse);
        }
    
        private boolean isAuthenticating(ServletRequest servletRequest) {
            HttpServletRequest request = (HttpServletRequest) servletRequest;
            return request.getRequestURI().equals(loginPage);
        }
    
        @Override
        public void destroy() {
            LogUtil.info(log, this.toString());
        }
    
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
            LogUtil.info(log, filterConfig.toString());
        }
    }
    
    ///////////////////////////////////////////////////////////////////////////////
    
    @RequestMapping(method = POST, path = "", produces = APPLICATION_JSON_VALUE)
        public Map login(@RequestBody UserEntry userEntry, ServletRequest servletRequest,
                ServletResponse servletResponse) {
            boolean xsrfAvailable = (boolean) servletRequest.getAttribute(X_XSRF_TOKEN);
            Authorization aut = client.login(userEntry);
            Map resolve = new HashMap(); 
            if (aut != null && aut.isAccepted() && xsrfAvailable) {
                CsrfToken csrf = (CsrfToken) servletRequest.getAttribute(CsrfToken.class.getName());
                String token = csrf.getToken();
                HttpServletResponse response = (HttpServletResponse) servletResponse;
                Cookie cookie = new Cookie(X_XSRF_TOKEN, token);
                cookie.setPath("/");
                cookie.setSecure(true);
                response.addCookie(cookie);
                resolve.put(STATUS, AUTHORIZED);
                resolve.put(USERNAME, username);
                resolve.put(PASSWORD, password);
                resolve.put(ROLE, aut.getRole());
                resolve.put(TOKEN, token);
            } else {
                resolve.put(STATUS, UNAUTHORIZED);
            }
            return resolve;
        }
    


    Básicamente lo que sucede en este ejemplo es lo siguiente:
    1.  El punto de control que genera el Cross Site Request Forgery es /login
    2. Si el login no es efectivo el CSRF no aparece como set en el cookie
    3. Ahora bien el toque esta en que el body también presenta el basic autentification y el CSRF. De esta forma es mas sencillo que el Javascript almacene los datos.
    4. Cada nuevo request debe enviar los Basic Login y el CSRF.
    Dentro de la aplicacion pasa esto:
    1.  La aplicacion fija el toking en el login. 
    2. Si cualquier otro request que no este en la lista de permitidos es invocada. Revisa el Basic Aut y el CSRF toking. La clase que genera los toking es CsrfGrantingFilter.

    miércoles, 6 de abril de 2016

    Provar en local enviar correos con Postman

    Creo que esto podría servir para cualquier tecnología. Pero me voy a enfocar en el plugin de Postman para wordpress en PHP.

    Pasos:

    1.) Debemos instalar Python con todos los utilitarios.

    2.) Ejecutar el comando en una terminal
    Nota: La terminal mostrara en consola todo los correos que se envíen a este servidor de pruebas.

    sudo python -m smtpd -n -c DebuggingServer localhost:45
    

    3.) Debemos ir a la configuración del postman del wordpress.
    Luego en Configuración manual.



    Dentro es simplemente de poner:

    Outgoing mail server hostname:......127.0.0.1
    Outgoing mail server port:................45
    Security:..............................................None
    Authentication:...................................None


    4.) Enviamos un mail de pruebas.


    5.) Este correo lo podremos ver en la terminal.



    AEM hablemos del arquetipo 11

    Cuando creamos un proyecto con AEM. Siempre es importante saber que arquetipo estamos usando. Pues esto me determinara que source, herramien...