martes, 30 de mayo de 2023

playbook Ansible copiar un archivo de un lado a otro

 Hace tiempo que tengo abandonado este blog y me gustaría retomar un poco de lo que he aprendido y esperando sinceramente que a alguien mas le sirva lo poco o mucho que pueda aportar.

hoy les traigo algunas notas rápidas de ansible, aprendidas durante algunos cursos online, paginas distintas y experiencia propia

-  revisando un poco como funciona ansible : recordemos que ansible no depende de agentes (agentless) y por lo tanto configurando ssh entre el servidor controlador y el cliente debería de ser suficiente, aunado a instalar la ultima version de python y configurar apropiadamente el inventario ansible

instalacion de ansible guia oficial en ingles

 hoy traigo uno de los playbooks más sencillo parte de la guia oficial, pero que utilizo mucho y a manera de recordatorio personal decidí agregarlo por aquí y explicarlo paso a paso.

observaciones:

1.- Ansible utiliza yaml para interpretar las instrucciones

2.- la indentación es clave dentro de yaml hay que revisar bien los espacios

3.- los permisos y la configuración de ansible es algo que me gustaría abarcar en otro post

4.- explicare punto por punto con comentarios entre // doble diagonal //  pueden quitarlas en su playbook

5.- espero que de algo de luz o ideas de como funcionan los playbooks con este tipo de ejemplos 

enjoy!!! :-) 

---  //da inicio al playbook//

- name: Copy file to a destination // le damos nombre al playbook //

  hosts: all 

 // especificamos el inventario o todos los hosts donde se va a ejecutar //

  become: yes // elevamos privilegios necesarios a root //

  tasks: //inicio de las tareas //

   

   - name: Copy file // nombre de la primera tarea //

     copy: // módulo de ansible al que vamos a llamar //

   src: /opt/salt/healthy.sh // ruta del archivo fuente que vamos a copiar //

   dest: /usr/local/cbin/healthy.sh // ruta destino a donde se va a copiar el archivo //

   owner: root // quien sera el owner del archivo //

   group: root // quien sera el grupo del archivo //

   mode: 755 // permisos que contendrá el archivo destino //



 


martes, 31 de marzo de 2020

redireccionar todos los comandos de bash de los usuarios al log messages (syslog) ( centos7 y centos 6 y derivados)

Un problema bien común, es que aveces no encontramos los comandos que ejecuto algún usuario dentro del log messages o bien secure o audit de una forma rápida o sencilla y es complicado hacer el tracking con bash history

Para esto hay varias formas de resolverlo

En centos 7 tenermos el siguiente comando (variable) 
[root@localhost ~]# shopt -s syslog_history
 
 para deshabilitara podemos usar : use shopt -u syslog_history 

  • Para hacer el cambio persistente en todas las sesiones de bash es necesario agregar al final del archivo /etc/bashrc file: shopt -s syslog_history

Hay otro método para copiar todos los comandos ejecutados por los usuarios a  syslog.
La cual es utilizar "trap" como parte de la programación de bash, personalmente es mi metodo preferido

  • Hay que agregar las siguientes lineas ya sea en el bash profile; ~/.bash_profile y/o en /etc/profile para que sea de forma global, personalmente lo realice cree el archivo dentro en /etc/profile.d/user-activity.sh  a manera de script y se agregan las siguentes lineas:
PORT=`who am i | awk '{ print $5 }' | sed 's/(//g' | sed 's/)//g'`
logger -p local7.notice -t "bash $LOGNAME $$" User $LOGNAME logged from $PORT
function history_to_syslog
{
declare cmd
declare p_dir
declare LOG_NAME
cmd=$(history 1)
cmd=$(echo $cmd |awk '{print substr($0,length($1)+2)}')
p_dir=$(pwd)
LOG_NAME=$(echo $LOGNAME)
if [ "$cmd" != "$old_command" ]; then
logger -p local7.notice -- SESSION = $$, from_remote_host = $PORT,  USER = $LOG_NAME,  PWD = $p_dir, CMD = "${cmd}"
fi
old_command=$cmd
}
trap history_to_syslog DEBUG || EXIT
 
bien otra forma seria la siguiente donde cambia el orden de los eventos
 
function bash_syslog
{
   declare COMMAND
   declare HOSTNAME
   declare IP_ADDR
   COMMAND=\$(fc -ln -0)
   HOSTNAME=\$(hostname)
   IP_ADDR=\$(ip addr show | grep "inet " | grep -v 127.0.0. | head -1 | cut -d" " -f6 | cut -d/ -f1)

   logger -p local4.info -t bash_syslog -i -- "\$HOSTNAME:\$IP_ADDR:\${USER}:\${SUDO_USER}:\${COMMAND}"
}
trap bash_syslog DEBUG 
 
Nota: Esta solución  creara un nuevo proceso por cada comando que se ejecute por lo cual pudiera afectar ligeramente el perfomance del servidor, para salvar el log messages en un archivo de log particular , agregaremos la siguiente linea en  /etc/syslog.conf (para RHEL4/5) o /etc/rsyslog.conf (para RHEL6):

local7.notice                           /var/log/cmd.log
  • Esto tambien manda a log todos los comandos a /var/log/messages .
  • To para evitar que  los comandos se vayan a  /var/log/messages , agrega la siguiente linea a /etc/syslog.conf (para RHEL4/5) or /etc/rsyslog.conf (para RHEL6/7):
*.info;mail.none;authpriv.none;cron.none;local7.!notice                     /var/log/messages
  • esto evitara que los mensajes con prioridad notice o mas altar se vayan al log /var/log/messages .
# service syslog restart
  • Centos 6
# service rsyslog restart
 
articulo original y traducido de :
https://access.redhat.com/solutions/20707
license GPL  

lunes, 10 de febrero de 2020

Cómo reparar el sistema de archivos en modo de rescate para centos,linux o bien xfs y ext4

Hay varios metodos recientemente vi el link para recuperar el grub o los filesystems 
les dejo el link: https://www.supergrubdisk.org/

pero que pasa con los sistemas de archivos como XFS o EXT
Nota: Asegurate de tener una copia de seguridad 
de los datos presentes en el sistema de archivos, 
antes de realizar la reparación del sistema de archivos 
 
 Para ejecutar el sistema de reparación en EXT o XFS 

 1. Iniciar el sistema desde el DVD o el disco de inicio o bien en modo single user

○ Para RHEL6: seleccione Rescate del sistema instalado. Luego ir al paso 2.

Rescate el sistema instalado <--- Seleccione

○ Para RHEL7 y 8: seleccione Solución de problemas, 
luego Rescate un sistema Red Hat Enterprise Linux. 
Luego vaya al Paso 4. 
El siguiente ejemplo es para RHEL 7, pero también se aplica a RHEL8


Solución de problemas <--- Seleccionar

Rescatar un sistema Red Hat Enterprise Linux <--- Seleccionar

2. Cuando se solicite el idioma y el teclado, 
proporcione la información pertinente para el sistema.
3. Cuando se  solicite habilitar los dispositivos de red en el sistema,
  selecciona: No
4. Selecciona Omitir después.
5. Si utiliza RAID de software, hay que inicializar primero RAID.

#mdadm --assemble --scan
 
6. Si se usa LVM, hay que activar los volúmenes para escanearlos.

sh-3.1 # lvm vgchange -ay

7. Finalmente hay que ejecutar la verificación en el dispositivo 
que contiene el sistema de archivos.
(este es el paso que repara el sistema de archivos)
 
 ○ Para el sistema de archivos EXT

sh-3.1 # e2fsck -fv / dev / mapper / <vg> - <lv> o bien /dev/mapper/rhel-home
por poner un ejemplo o
sh-3.1 # e2fsck -fv / dev / <dispositivo SD> --- AQUI IRIA EL DEVICE COMO SDA1
 
 ○ y es casi el mismo caso para el sistema de archivos XFS

sh-4.2 # xfs_repair / dev / mapper / <vg> - <lv> /dev/mapper/rhel-home
o
sh-4.2 # xfs_repair / dev / <dispositivo SD>


Nota: puede ser que se tenga que volver a crear el registro si xfs_repair
 no se ejecuta. Esto se puede hacer ejecutando xfs_repair -L.

8. salimos del modo rescate con exit y reiniciamos de forma normal



cambiar la zona horaria en red hat 8 / centos 8

Saludos
es muy sencillo cambiar la zona horaria y ver la configuracion y sincronizacion
el comando aplica para red hat 7 y red hat 8 y sus derivados y algunas otras distros linux
para saber el estatus actual utilizaremos el comando timedatectl

y para encontrar nuestra zona horaria tzselect,
el primer comando nos va a mostrar la configuración actual y en el segundo nos llevara por una serie de opciones encontrar nuestra zona horaria, en mi caso México
seria opcion 2 --> opcion 32 y luego opcion 1 para la zona centro 


al final nos va arrojar  America/Mexico_City



Ahora bien ya que tenemos nuestra zona seleccionada debemos cambiarla en el sistema utilizando
timedatectl set-timezone America/Mexico_City







Si tenemos servicio de NTP o chorny activo también se vera reflejado para efectos de la sincronizacion via NTP