Script: Grabar Back Ups en DVD’s


 

#!/bin/bash
#20130328. hvivani. graba backups en DVD. 
#Genera una imagen .iso con los archivos que coloquemos en ./grabar/ 
#Abre la grabadora, solicita el disco y graba el iso

cd /backup/userdata/
echo
echo Generando imagen a grabar del contenido del directorio grabar:
echo

if [ -f userdata.iso ];
then
   echo "ya existe archivo iso, lo borramos y creamos uno nuevo"
   rm userdata.iso
fi
genisoimage -allow-limited-size -o userdata.iso -J ./grabar/

echo
echo Abriendo la lectora:
eject
echo

while true
do
  # (1) pregunta al usuario y lee respuesta en linea de comandos
  read -p "pusiste el disco virgen en la lectora ? " answer

  # (2) handle the input we were given
  case $answer in
   [sS]* ) eject -t
           wodim -v -eject dev=/dev/scd0 userdata.iso
           break;;

   [nN]* )
           echo Donde queres que grabe ?? me voy !!
           exit;;

   * )     echo "Capo, ingresa solo S o N, no pongas boludeces.";;
  esac
done

echo Listo el pollo...

 

MySQL: resetting root password


Dato muy interesante para cuando perdemos la password de root de una base de datos MySQL (gracias Cameron):

1) Detenemos el servicio mysqld y restarteamos con la opción –skip-grant-tables. Opcionalmente podemos añadir la opción –skip-networking para evitar la conección de clientes remotos.

# service mysqld stop
# mysqld_safe --skip-grant-tables&

2) Conectamos al servidor por consola:

# mysql

3) Ejecutamos la siguiente sentencia:

mysql> update mysql.user set password=PASSWORD('nuevapassword') where user='root';
mysql> flush privileges;

La sentencia flush le dice al servidor que vuelva a cargar en memoria las grant tables a fin de notificarse del cambio de password.

Luego detenemos el servicio y lo volvemos a inciar normalmente.

# service mysqld stop
# service mysql start

 

Permisos especiales: Sticky Bit, SUID, SGID


Hay una serie de permisos especiales sobre el sistema de archivos de Linux que pueden resultarnos útiles para determinadas tareas o para organizar directorios colaborativos entre diferentes usuarios.

Sticky bit

El Sticky bit se utiliza para permitir que cualquiera pueda escribir y modificar sobre un archivo o directorio, pero que solo su propietario o root pueda eliminarlo. Un ejemplo de uso es el directorio /tmp, que debe tener permisos para ser utilizado por cualquier proceso, pero solo el dueño o root puede eliminar los archivos que crea.

Para aplicar el Sticky bit a un directorio:

[hvivani@test archivos]$ chmod 1755 dirtest/
[hvivani@test archivos]$ ls -l
total 8
drwxr-xr-t. 2 hvivani group 4096 sep  6 09:32 dirtest

Al directorio con el Sticky Bit aplicado se le agrega la t al final del descriptor de permisos.

SUID

El bit SUID activo en un archivo significa que el que lo ejecute va a tener los mismos permisos que el que creó el archivo. Esto puede llegar a ser muy util en algunas situaciones pero hay que utilizarlo con cuidado, dado que puede generar grandes problemas de seguridad.

Para que sea efectivo el archivo debe tener permisos de ejecución.

Para activarlo:

[hvivani@test ~]$ chmod 4775 kk.sh 
[hvivani@test ~]$ ls -l kk.sh 
-rwsrwxr-x. 1 hvivani group 133 ago 27 08:25 kk.sh
[hvivani@test ~]$ chmod -x kk.sh 
[hvivani@test ~]$ ls -l kk.sh 
-rwSrw-r--. 1 hvivani group 133 ago 27 08:25 kk.sh

Vean que en la ultima línea le saqué el permiso de ejecución al archivo y en los permisos se reemplaza la s por la S. En este caso no tiene efecto el bit.

SGID

El SGID es lo mismo que en el SUID, pero a nivel de grupo. Es decir, todo archivo que tenga activo el SGID, al ser ejecutado, tendrá los privilegios del grupo al que pertenece.

Esto es muy usado cuando queremos configurar un directorio colaborativo: si aplicamos este bit al directorio, cualquier archivo creado en dicho directorio, tendrá asignado el grupo al que pertenece el directorio.

[hvivani@test tmp]$ chmod 2775 dirtest/
[hvivani@test tmp]$ ll
total 8
drwxrwsr-x. 2 hvivani grupo 4096 sep  6 09:32 dirtest
[hvivani@test tmp]$ su usuario1
Contraseña: 
[usuario1@test tmp]$ cd dirtest/
[usuario1@test dirtest]$ touch nn.txt
[usuario1@test dirtest]$ ll
total 0
-rw-r--r--. 1 usuario1 grupo 0 Sep  6 09:50 nn.txt

Al igual que con el SUID, aparece una s o una S reemplazando la x en los permisos del grupo.

KVM: Administrando máquinas virtuales por consola / KVM with virsh


Listar las Máquinas Virtuales

[root@test ~]# virsh list
 Id    Name                           State
----------------------------------------------------
 1     w2003                        running
 2     centos                       running
 4     fedora                       running

Apagar Máquina Virtual

# virsh shutdown centos

Reiniciar Máquina Virtual

# virsh reboot centos

Forzar / Detener Máquina Virtual

# virsh destroy centos

Obtener Información acerca de la Máquina Virtual

# virsh dominfo centos

Obtener información acerca del Nodo

[root@test ~]# virsh nodeinfo
CPU model:           x86_64
CPU(s):              24
CPU frequency:       1596 MHz
CPU socket(s):       1
Core(s) per socket:  6
Thread(s) per core:  2
NUMA cell(s):        2
Memory size:         32814444 kB

Editar Configuración de Máquina Virtual

# virsh edit centos

Instalar Máquina Virtual CenOS 5.5 utilizando un mirror http:

Con 512Mb de RAM, 4GB de espacio en disco y utilizando la interfaz de red br0 (bridged network).

# virt-install \
 -n centos \
 -r 512 \
 --vcpus=1 \
 --os-variant=rhel5.4 \
 --accelerate \
 -v \
 -l http://mirrors.kernel.org/centos/5.5/os/x86_64/ \
 -w bridge:br0 \
 --vnc \
 --disk path=/tmp/centos.img,size=4 

Podemos conectarnos a dicha máquina virtual haciendo un:

# virt-viewer centos

Ubicación de archivos log:

$HOME/.virtinst/virt-install.log
$HOME/.virt-manager/virt-manager.log
/var/log/libvirt/qemu

Ubicación de archivos de configuración:

/etc/libvirt/qemu/centos.xml

Otras herramientas que podemos utilizar para resolver problemas:

ps, pstree, top
vmstat, iostat, lsof
tcpdump, brctl, ip, ifconfig

entre otras.

 

 

Script: Añadir prefijo o sufijo a cada linea de archivo / Add prefix or postfix to each line of a file


Supongamos que tenemos un archivo de texto kk.txt con las siguientes lineas:

linea1
linea2
linea3

y queremos agregarle un prefijo a cada línea de ese archivo.

Opción 1: con sed

[hvivani@test ~]$ sed -e 's/^/prefix/' kk.txt
prefixlinea1
prefixlinea2
prefixlinea3

Opción 2: con nl

[hvivani@test ~]$ nl -s prefix kk.txt |cut -c7-
prefixlinea1
prefixlinea2
prefixlinea3

Opción 3: con awk

[hvivani@test ~]$ awk '{print "prefix"$0}' kk.txt 
prefixlinea1
prefixlinea2
prefixlinea3

Opción 4: con shell script

#!/bin/bash
prefix="prefijo"
file="kk.txt"
while read -r line
do
 echo "${prefix}$line"
done <$file > renombrado
mv renombrado $file

Si queremos agregarle un sufijo o postfijo a cada línea de ese archivo:

[hvivani@test ~]$ sed -e 's/$/prefix/' kk.txt
linea1prefix
linea2prefix
linea3prefix

Conectando a instancia de Maquina Virtual de Amazon AWS EC2


Hace un tiempo hice unas pruebas con las máquinas virtuales que ofrece Amazon AWS. Hay una opción interesante de servicio gratuito durante un año para pruebas o para ingresar al producto, y por eso me puse a explorar sus alternativas.

Lo que hay que tener muy en cuenta es que, inclusive para probar, hay que ingresar los datos de una tarjeta de crédito (Microsoft Azure hace lo mismo), y luego del año de prueba se comienza a facturar en función de la demanda (ojo con eso).

En el proceso de creación de la instancia de la maquina virtual, debemos crear una clave .pem que luego nos servirá para ingresar al servidor.

Una vez creada la instancia, en el panel de control, debemos localizar la IP o el nombre DNS de dicha instancia.

Pantallazo-15Luego, utilizaremos el certificado .pem descargado al crear la máquina virtual y conectaremos del siguiente modo:

[usuario@host ~]$ ssh -i usuario_aws.pem ec2-user@ec2-54-242-160-64.compute-1.amazonaws.com

Para estas pruebas yo di de alta un Linux RHEL 6.4

Bloqueo de Gnome Panel


Muchas veces, en equipos que cumplen tareas especiales, es necesario bloquear el panel de gnome a fin de que los usuarios no agreguen o eliminen applets.

Ejecutamos:

$ gconf-editor

y allí, modificamos la siguiente opción:

apps -> panel -> global -> locked_down

Si está tildada esta opción, el panel quedará bloqueado.

Qmail Server: Actualización de Antivirus Clamav por RPM


Para los que tengan un servidor de mail qmail con escaneo de correo por clamav via qmail-scanner, acá va un pequeño ayuda memoria para aquellas ocasiones en que debemos actualizar la versión del antivirus. Esto es algo que debemos revisar cada cierto tiempo, dado que el antivirus puede quedar obsoleto por falta de actualización.

Primero descargamos los RPM de nuestra versión de sistema operativo. Puede ser desde acá:

http://pkgs.repoforge.org/clamav/

Para una instalación eh RHEL 4 de 32 bits, necesitaremos los siguientes paquetes:

clamav-0.97.7-1.el4.rf.i386.rpm

clamav-db-0.97.7-1.el4.rf.i386.rpm

clamav-devel-0.97.7-1.el4.rf.i386.rpm

clamd-0.97.7-1.el4.rf.i386.rpm

Una vez que los tenemos descargados, procedemos:

1) Detenemos qmail y clamd:

# qmailctl stop
# service clamd stop

2) Desinstalamos la version de clamav que tengamos instalada:

2.1) Verificamos las versiones instaladas:

# rpm -qa |grep clam
clamav-devel-0.96.2-2.el4.rf
clamd-0.96.2-2.el4.rf
clamav-db-0.96.2-2.el4.rf
clamav-0.96.2-2.el4.rf

2.2) Desinstalamos:

# rpm -e --nodeps clamd-0.96.2-2.el4.rf 
# rpm -e --nodeps clamav-devel-0.96.2-2.el4.rf
# rpm -e --nodeps clamav-db-0.96.2-2.el4.rf
# rpm -e --nodeps clamav-0.96.2-2.el4.rf

3) Instalamos la nueva versión

# rpm -ivh clamd-0.96.2-2.el4.rf clamav-db-0.96.2-2.el4.rf clamav-0.96.2-2.el4.rf clamd-0.96.2-2.el4.rf

4) Ahora, editamos el /etc/clamd.conf y en la linea donde dice:

User clamav

modificamos por

User qscand

5) Ahora, editamos el /etc/freshclam.conf y en la linea donde dice:

DatabaseOwner clamav

modificamos por

DatabaseOwner qscand

Esto es para que utilice el usuario del qmail-scanner para el antivirus. Ojo con algunas instalaciones de Qmailrocks que sugerían utilizar el clamdscan para escanear y consumen enormes cantidades de recursos en el servidor. Gracias JSimpson por esta info.

6) Luego, verificamos los permisos en los archivos que puedan existir de versiones anteriores:

# chown -R qscand:qscand /var/lib/clamav
# chown -R qscand:qscand /var/run/clamav
# chown -R qscand:qscand /var/log/clamav

7) Iniciamos nuevamente los servicios:

# service clamd start 
# qmailctl start

That’s All Folks !

GRUB 2 Cambiando configuración / Change Settings


En Fedora 18, si tenemos instalado el boot dual en un equipo, seguramente nos planteemos como ampliar el tiempo de delay antes del booteo o cuál es el sitema operativo que arranca por defecto.

1) Editamos el archivo de configuración de grub2 en /etc/default/grub

GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=”Windows7(loader) on /dev/sda1
GRUB_CMDLINE_LINUX="rd.lvm.lv=fedora/swap nomodeset rd.md=0 rd.dm=0 $([ -x /usr/sbin/rhcrashkernel-param ] && /usr/sbin/rhcrashkernel-param || :) vconsole.keymap=fr rd.luks=0 rd.lvm.lv=fedora/root rhgb quiet"
GRUB_DISABLE_RECOVERY="true"
GRUB_THEME="/boot/grub2/themes/system/theme.txt"

2) Para que el cambio tenga efecto, debemos ejecutar:

# grub2-mkconfig -o /boot/grub2/grub.cfg

Con este comando podremos ver todas las entradas disponibles para booteo:

# grep ^menuentry /boot/grub2/grub.cfg | cut -d "'" -f2

Con este comando podremos ver cuál es la entrada seteada en este momento por defecto:

# grub2-editenv list

Y alternativamente, podríamos utilizar este comando para establecer una determinada entrada por default para booteo:

# grub2-set-default <menu entry title>

Ojo que de todas maneras, deberemos ejecutar el comando del punto 2) para que el cambio tenga efecto.