martes, 19 de noviembre de 2019

Desactivar Ctrl + Alt + Del en CentOS 7

Control-Alt-Delete es la combinación de teclas que permite el reinicio de servidores, el mismo debe ser desahabilidado con la finalizar de evitar un reinicio no deseado del equipo.

Para esto debemos realizar lo siguiente: 

Verificamos el archivo cat /etc/inittab
El contenido del archivo es el siguiente
Inittab ya no maneja la funcion init que añadia el Ctrl-Alt-Delete, por lo tanto uno debe decirle al systemd que lo debe desactivar, esto se hace con el siguiente comando.
systemctl mask ctrl-alt-del.target

Listar los paquetes instalados en Linux CentOS

Aquí mostrare como se listan paquetes instalados en la distribución de CentOS, para listar los paquetes instalados en  Debían, se debe hacer con el comando aptitude search + el nombre del paquete o también usando el comando dpkg, a diferencia de centos se debe realizar de dos maneras.
1- rpm
# rpm -aq | grep paquete

2- yum
# yum list installed | grep wget

lunes, 14 de octubre de 2019

Como prohibir el acceso root a conexion por ssh

Lo primero que vamos a hacer es aprender a editar el siguiente archivo /etc/ssh/sshd.config, el cual permite el acceso al equipo como usuario root utilizando SSH
Vamos a ver como inicia estos pasos:

Ahora procedemos a configurar el servidor ssh, modificando el archivo nano /etc/ssh/sshd.config y ubicamos la directiva #PermitRootLogin y se debe des comentar y colocar como no



 

 Una vez modificado, guardamos los cambios y salimos del terminal para realizar la prueba de ingreso como usuario root

Como restringir el acceso root a los usuarios de Linux

Lo primero que vamos a hacer es aprender a editar el siguiente archivo /etc/securetty, el cual permite el acceso al equipo como usuario root a las consolas que nosotros indiquemos.
Vamos a ver como inicia estos pasos:

 

En esta imagen observamos la lista de terminales desde los cuales se permiten los accesos directos  como usuario root.
Vamos a trabajar con el dispositivo TTY para explicarlo.

Inicialmente se abre el archivo con un editor como nano y comenta la entrada tty1:

#nano /etc/securetty 

console
vc/1
vc/2
vc/3
vc/4
vc/5
vc/6
vc/7
vc/8
vc/9
vc/10
vc/11
#tty1
tty2
tty3
tty4
tty5
tty6
tty7
tty8
tty9
tty10
tty11
Una vez comentado el TTY1 procedemos a guardar la modificación y salir de la edición.
Una vez que salimos cambiamos al primer TTY de la siguiente manera CTRL + alt + 1
e intentamos iniciar sesión como root, tendremos el siguiente resultado
 
 

Es importante que sepas que esto no afectara el inicio de sesión como usuario root cuando utilices SSH.

Para restringir el acceso como root desde la conexión de ssh ver aquí .



jueves, 10 de octubre de 2019

Los archivos que deberíamos eliminar de WordPress

En la raíz de la web solo deberíamos tener archivos con extensión php y el archivo .htaccess
El resto de archivos, con extensiones txt o html deberían ser eliminados, a menos que los hayamos añadido nosotros para algún cometido en particular, o se hayan instalado con algún plugin (normalmente ningún plugin debería dejar archivos en la raíz, pero puede que haya excepciones).

Los archivos que deberíamos eliminar son los siguientes (puede que no lo tengas todos):

license.txt
licencia.txt
readme.html
 
Si, por seguridad, no los quieres eliminar, puedes crear un directorio nuevo donde mover estos archivos o también puedes renombrarlos. 
Por ejemplo, puedes cambiar el nombre license.txt por license_oculto.txt.
En todo caso, sin estos archivos tu WordPress también funcionará perfectamente.

Importante: También se ha de tener en cuenta que cada vez que actualicemos WordPress a una nueva versión es posible que estos archivos eliminados se vuelvan a añadir, por lo que deberemos estar atentos, una vez finalizada la actualización, si es necesario volver a borrar los ficheros sobrantes.

Ver como ocultar archivos sensibles de WordPress

Ocultar archivos sensibles de WordPress

Pasemos ahora a los archivos que pueden contener información sensible.
Serían los archivos
wp-config.php 
.htaccess 

Ambos situados en la ráiz de nuestro WordPress. 

El archivo wp-config.php contiene diversa información de la configuración de WordPress, como el nombre de la base de datos que se está utilizando o el usuario y contraseña que se utiliza para conectarse, además de otra información que conviene mantener segura.

El archivo .htaccess también es importante porque puede ser utilizado por los atacantes para debilitar la seguridad de nuestra web.
 

Estos archivos no serían accesibles para usuarios externos, pero nunca viene mal añadir una capa de seguridad adicional. Para ello deberemos editar el archivo .htaccess y añadir al principio del mismo el siguiente código:

# proteger wpconfig.php
<files wp-config.php>
order allow,deny
deny from all
</files>

# proteger htaccess
<files .htaccess>
order allow,deny
deny from all
</files>

De esta manera, indicamos que se bloquee el acceso a ambos archivos de forma externa, solo siendo accesibles desde el propio servidor, que es justo lo que necesitamos.

Ocultar la versión PHP de WordPress

Si tenemos acceso al archivo php.ini, donde se guarda la configuración de PHP, nos originaria un problema por el cual se debe mejorar de la siguiente forma.

Se debe agregar la siguiente linea
expose_php = Off. 

En caso de que ya tuvieras la línea con el valor On
expose_php = On 
Se debe cambiar el valor On a Off

Esta la posibilidad que no se tenga acceso a la configuracion de php debido que se este contratando un hosting que son la mayoria de los casos, deberemos solicitar este cambio a los proveedores del servicio.
 
En caso de que no se pueda contactar los administradores del hosting, podemos añadir unas líneas de código en el archivo .htaccess de la raíz de la web para evitar que se muestre la versión de PHP.

Ocultar la versión PHP con las siguientes lineas en el
.htaccess:

ServerTokens Prod
ServerSignature Off
RewriteCond %{QUERY_STRING} \=PHP[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12} [NC]
RewriteRule .* - [F]


En este caso que modificamos el
.htaccess, estas líneas no evitarán que en las cabeceras HTTP siga saliendo la versión de PHP que se ejecuta, por lo que la solución correcta sería el cambio en el archivo php.ini anteriormente comentado.

De esta forma estaremos algo más protegidos.
Aunque este tema no se puede considerar una agujero de seguridad grave, nunca está de más ocultar esta información.

Ocultar listado de ficheros en directorios WordPress

Se debe añadir el siguiente texto al inicio de tu fichero .htaccess:

Options -Indexes

Si en lugar de Apache usas Nginx, has de abrir el fichero de configuración de tu VirtualHost y añadir algo así:


location / {
autoindex off;
}


Con esta sencilla medida mostrada anteriormente, si alguien intenta listar los directorios de tu web, obtendrá un bonito mensaje 403 Forbidden (Prohibido)

jueves, 3 de octubre de 2019

Como limpiar logs sin borrar el archivo

Primero ingresamos al directorio
$su
#cd /var/log

Una vez que estamos dentro del directorio listamos los archivos
#lsanaconda           btmp-20191001  dmesg.old              grubby_prune_debug  messages            secure            spooler-20190922
audit              chrony         fail2ban.log           iptraf-ng           messages-20190908   secure-20190908   spooler-20190929
boot.log           cron           fail2ban.log-20190519  lastlog 


Posteriormente verificamos cuanto es el peso de los directorios y archivos con el siguiente comando 
du 
-s  Con esta opción indicamos que solo tome en consideración los archivos especificados
(* para todos los archivos)
-c  Muestre el total del espacio consumido.
-h  Mejorar la legibilidad de los datos presentados al agregar el tamaño de los archivos en kb, mb, gb.

-csh * lista archivos y muestra el total del peso
-csh * | grep G lista archivos y muestra el total del peso que contengan la letra G
-cs * | sort -nr  ver los archivos desde el más pesado al más liviano (ordenados)
-cs * | sort -nr | head -3 ver los 3 archivos más pesado

#du -csh *
 0         tallylog
20K     tuned
860K   wtmp
44M     yum.log
55M     total


vamos a proceder a limpiar el archivo mas pesado yum.log 

#shred -vfzu yum.log






martes, 1 de octubre de 2019

Guardar y restaurar container de Docker

Resultado de imagen para container de docker exportar
En este espacio voy a explicar como se exporta un container de docker, luego enviarlo a otro servidor y por ultimo importarlo en el mismo

Entramos al terminal, iniciamos como súper usuario (root)
 y verificamos los ID de los container

#docker ps -a
CONTAINER ID        IMAGE                       COMMAND                     CREATED             STATUS                   PORTS

e9fba9a80bff        jenkins:2.179       "/sbin/tini -- /usr/…" 3 months ago    Up 3 months       8080

1-Una vez que conocemos el ID del container procedemos a preparar la exportacion
Sintaxis
#docker export ID_CONTAINER > /ruta/donde/seva/exportar/file.tar

Ejecución del comando
#docker export e9fba9a80bff  > /home/usuario/jenkins.tar

2-Ya creamos el .tar de nuestro container ahora procedemos a moverlo de un servidor a otro con el siguiente comando
Sintaxis
scp nombre_archivo.ext usuario_remoto@ip_destino:/ruta/destino

Ejecución del comando
#scp jenkins.tar root@10.10.0.2:/home/usuario
   
3-Por ultimo importamos en el servidor destino el container que acabamos de pasar via scp
Sintaxis
cat /ruta/donde/exportar/container.tar | docker import - some-name:latest

Ejecución del comando
#cat /home/usuario/jenkins.tar | docker import - jenkins:latest

lunes, 16 de septiembre de 2019

Que es un DockerFile

El DockerFile nos permitirá definir las funciones basicas del contenedor partiendo
de la construccion de una imagen.
Debemos crearlo dentro de la carpeta site, junto con el source del sitio en Jenkins
............................

Ingredientes de un DockerFile

FROM: Define una imagen base para crear nuestra nueva imagen con DockerFile
-FROM repositorio:tag
-FROM Ubuntu:16:04

MANTAINER: Hace referencia al creador de la receta
-MANTAINER user mail@cuenta.comandos
-MANTAINER kimberling pikim@gmail.com

RUN: Nos permite ejecutar comandos en la imagen base antes de ser creada dentro del contenedor
-RUN apt-get update && apt-get install app
-RUN apt-get update && apt-get install apache2

ADD/COPY: Nos permite agregar o copiar archivos desde el equipo local a la imagen
-ADD FILE.ext /DIR/DIR/DIR
-ADD index.html /var/www/html

EXPOSE: Nos permite exponer por defecto un puerto para el contenedor
-EXPOSE NUM-PUERTO
-EXPOSE 8080

CDM: Ejecutar una sentencia o accion por defecto (FOREGROUND) al crear el contenedor es finalidad
-CDM ["/usr/sbin/apache2", "-D", "FOREGROUND"]

Crear imagen en Docker a partir de un DockerFile

En este espacio voy a detallar como se crea una imagen a apartir de un archivo DockerFile

Primero entramos en un terminal y creamos un directorio donde vamos a crear nuestro archivo
#cd /home/usuario/
#mkdir testdocker

Entramos en el directorio creado anteriormente


#cd testdocker/

Procedemos a creamos el archivo Dockerfile
#nano Dockerfile

Y agregamos el siguiente contenido del DockerFile
FROM ubuntu:latest

RUN apt-get -y update; \
    apt-get -y upgrade; \
    apt-get -y install apt-utils \
    nano \
    htop;
RUN apt-get -y install dstat

CMD ["bash"]



Una vez guardado el Dockerfile procedemos a crear la imagen con el siguiente comando

Ejemplo sintaxis
#docker build -t "nameimage:dockerfile"

Creacion de la Imagen
#docker build -t "imgubuntu:dockerfile"


Para verificar la cracion de la imagen colocamos
#docker images

Ahora vamos a crear un container a a partir de la imagen creada con un dockerfile con el siguiente comando

Ejemplo sintaxis
#docker run -dti --name name-container ID-imagen

Creación del container
#docker run -dti --name contubuntu 02f37139ae36


Consultamos el container
#docker ps
INER ID                  IMAGE               COMMAND         CREATED             STATUS              PORTS          NAMES
c83e738fb69e        02f37139ae36        "bash"           22 seconds ago      Up 19 seconds                            contubuntu



Vamos acceder al contenedor y verificar las aplicaciones instaladas

Sintaxis
#docker exec -i -t name-container /bin/bash

Acceder al container
#docker exec -i -t contubuntu /bin/bash

Una vez dentro del container consultamos con un comando su instalacion 
#dstat

viernes, 13 de septiembre de 2019

Como obtener informacion de un container Docker

Para obtener información de los container de docker como ID, fecha de creación, estado del container, imagen que utiliza, IP, etc, se debe correr el siguiente comando

#docker inspect CONTAINER_ID

#docker inspect CONTAINER_ID | grep "campo_a_consultar"

#docker inspect CONTAINER_ID | grep "IPAddress"

Guardar y restaurar una imagen en Docker

En este articulo vamos a ver como podemos guardar una imagen de docker y restaurarla en otro servidor

Primero procedemos a listar las imágenes que tenemos actualmente en nuestro servidor docker
#docker images

arrojaría lo siguiente


GUARDAR
Procedemos a comprimir la imagen, vamos a trabajar la imagen de nginx,
entramos al directorio donde guardamos las imágenes y con el siguiente comando la comprimimos
#cd /var/lib/docker/images

Y corremos el siguiente comando 
#docker save nombre-de-imagen | gzip > nombre-de-imagen.tar.gz

Ahora procedemos a guardar el container
#docker save -o  /ruta/nombre-del-container.tar nombre-del-container

Puedes utilizar este comando 
#docker save nombre-del-container > /ruta/nombre-del-container.tar

RESTAURAR
Como ultimo paso vamos a restaurar la copia en el servidor que deseamos con el siguiente comando
#docker load -i /ruta/nombre-del-container.tar

Puedes utilizar este comando  
#docker load < /ruta/nombre-del-container.tar

Debemos ubicarnos en el directorio donde guardamos las imágenes con el siguiente comando
#cd /var/lib/docker/images

Y ejecutar el siguiente comando
#docker load -i nombre-de-imagen.tar.gz

viernes, 6 de septiembre de 2019

Como instalar Docker en Debian

Verificamos la version del kernel
#uname -rm 

Verificamos la version del sistema operativo
#lsb_release –a

Actualizar el índice de paquetes
#apt-get update

Instalacion de paquetes complementarios
#apt-get install -y --no-install-recommends \
    linux-image-extra-$(uname -r) \
    linux-image-extra-virtual
   
IMPORTANTE : Al usar comandos con la opción -y todas las preguntas interactivas se
contestan automáticamente con “Sí”. La opción --no-install-recommends impide que Linux
instale de forma automática los paquetes recomendados.   

Instalacion de herramientas basicas
apt-get install htop multitail aptitude locate net-tools open-vm-tools ssh

Instalacion de herramientas necesarias para instalar docker
apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common

Asignando permisos al usuario en el grupo de docker
usermod -aG docker username 

Instalamos la clave del repositorio oficial de docker en nuestro gestor de paquetes para posteriormente proceder a la descarga del software
curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -

Verificación de la clave con
apt-key fingerprint 0EBFCD88

El resultado que podemos esperar es el siguiente
pub   4096R/0EBFCD88 2017-02-22
      Key fingerprint = 9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
uid                  Docker Release (CE deb) <docker@docker.com>
sub   4096R/F273FCD8 2017-02-22

Ahora añadimos el repositorio en el fichero de sources de apt del sistema
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"

Actualizar el índice de paquetes
apt-get update

Procedemos con la instalación de docker con el comando
apt-get install docker-ce docker-ce-cli containerd.io


Una vez finalizada la instalacion procedemos con el registro en hub.docker
-> https://hub.docker.com/

Al tener usuario y password en https://hub.docker.com/ se procede a ir nuevamente al terminal y acceder de la siguiente forma para ingresar las credenciales
docker login

Luego de ingresar procedemos a crear nuestro primer container de pruebas
 docker run hello-world

Debe arrojar lo siguiente: 

# docker run hello-world
 
Hello from Docker!
This message shows that your installation appears to be working correctly.
 
To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.
 

jueves, 5 de septiembre de 2019

Creando un pipeline usando dockerfile en un jenkinsfile

Mediante este ejemplo basico te explicare como crear un pipeline en jenkins utilizando un dockerfile 




Primero creamos el archivo dockerfile
nano /proyect/dockerfile

Incorporamos el contenido del archivo
FROM ubuntu:16.04

MANTAINER khernandez khernandez@gmail.comandos

RUN apt-get update
RUN apt-get -y install apache2
RUN apt-get install wget
RUN apt-get unzip
RUN wget http://github.com/proyecto/directorio/archivos/file.zip
RUN unzip file.zip
RUN cp -a /directorio/archivos/* var/www/html

EXPOSE 82

CDM /usr/sbin/apache2ctl -D FOREGROUND

Luego creamos el archivo jenkinsfile
nano /proyect/jenkinsfile


EJEMPLO :
pipeline {
    agent any
    stage {
        stage ('Example') {
            steps {
                echo 'Hello world'
            }
        }
    }
}
Colocamos el contenido del archivo, incorporamos el agente dockerfile en el archivo jenkinsfile

pipeline {
    agent {
        dockerfile true
    }
    stage {
        stage ('Prueba') {
            steps {
                echo 'Verificando archivo'
                sh 'cat /var/www/html'
            }
        }
    }
}



jueves, 11 de julio de 2019

Cómo especificar cache de navegador

Cuando realizamos análisis de velocidad de carga de sitio web, análisis de SEO, PageSpeed, observamos que las herramientas de Google nos indican que debemos Aproveche el caché del navegador, bueno aquí les coloco el código que deben colocar al final del archivo .htaccess


<FilesMatch "\.(css|js|ico|pdf|jpg|jpeg|png|gif|swf|mp3|mp4|woff)$">
Header set Cache-Control "public"
Header set Expires "Thu, 11 Jul 2021 20:00:00GMT"
</FilesMatch>

Una vez que se coloca el código y guardamos el archivo, procedemos a realizar nuevamente el análisis del sitio y debería de salir almacenamiento de cache optimo

jueves, 4 de abril de 2019

Como saber que IP se han conectado por SSH

Primero antes de mostrar como saber que IP se han conectado por SSH, debemos saber donde se guardan todos los log, pues estos se guardan en el directorio /var/log/.

Debemos entrar a este directorio /var/log/ y luego entrar mostrar contenido del archivo auth, como lo indica su nombre este archivo se encarga de guardar todo lo referente a autenticacion, esto se hace de la siguiente manera.

#cat /var/log/auth* | grep Accepted

Si se quiere mostrar solo la fecha en que se realizo la conexion, el usuario que la realizo y desde la IP desde donde realizaron la conexion se pueden realizar los filtros de la siguiente manera con los parámetros de awk

#cat /var/log/auth* | grep Accepted | awk '{print $1 " " $2 "\t" $3 "\t" $11 "\t" $9 }'

viernes, 22 de marzo de 2019

Como instalar entorno grafico en Debian 9

Al instalar Debian 9 netinstall suele suceder que el entorno gráfico no se instala de forma automática, si no debemos instalar el entorno gráfico en Debian 9 de forma manual.

Aquí les explico como se instala

primero actualizamos con:
apt update

luego procedemos a instalar los paquetes necesarios:
En este caso yo instale entorno gráfico cinnamon en Debian 9 
apt install xorg cinnamon-desktop-environment libcinnamon-desktop-dev libcinnamon-desktop4

para instalar el entorno gráfico mate en Debian 9 el siguiente comando
apt install xorg mate-desktop mate-desktop-environment mate-desktop-environment-core mate-desktop-environment-extra mate-desktop-environment-extras

miércoles, 27 de febrero de 2019

Como conocer a que grupos pertenece un usuario en linux

Conoce 4 maneras distintas de conocer a que grupos pertenece un usuario en un sistema linux.

1.- id nom_usuario
2.- lid nom_usuario      (Esta opcion se debe utilizar como root)
3.- groups nom_usuario
4.- grep nom_usuario /etc/group

martes, 19 de febrero de 2019

Instalación de VirtualBox en Debian 9



Agregue la siguiente línea a su /etc/apt/sources.list
Para esto ingresamos de la siguiente manera nano /etc/apt/sources.list

deb http://download.virtualbox.org/virtualbox/debian stretch contrib


Agregamos la llave
apt-key agregar oracle_vbox_2016.asc

apt-key add oracle_vbox.asc

Podemos combinar la descarga y el registro
wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | Sudo apt-key add -

wget -q https://www.virtualbox.org/download/oracle_vbox.asc -O- | Sudo apt-key add -

Por ultimo actualizamos el sistema 
aptitude update 

Instalamos las dependencias de Virtual Box 
aptitude install cpp-6 gcc-6 gcc-6-base:i386 libasan3 libcc1-0 libgcc-6-dev libisl15 libmpx2 libsdl-ttf2.0-0 linux-compiler-gcc-6-x86 linux-headers-4.9.0-8-amd64 linux-headers-4.9.0-8-common linux-headers-amd64 linux-kbuild-4.9 build-essential

Y luego instalamos VirtualBox 6.0
aptitude install virtualbox-6.0