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


sábado, 9 de julio de 2016

Escaneo de Redes con Nmap

En un proceso completo de pruebas de penetración, existen instancias previas a ejecutar esta herramienta pero, para dar los primeros pasos, probablemente sea la mejor forma de comenzar. Nmap es una herramienta de escaneo de redes que permite identificar qué servicios se están ejecutando en un dispositivo remoto, así como la identificación de equipos activos, sistemas operativos en el equipo remoto, existencia de filtros o firewalls, entre otros.

En palabras sencillas, cuando se va a atacar un servidor o dispositivo, el atacante podrá realizar distintas arremetidas en función del servicio: no es lo mismo dañar un servidor web, un servidor de base de datos o un router perimetral. Por lo tanto, en cualquier despliegue, el primer paso será identificar los servicios en la infraestructura, para decidir cómo avanzar y, considerando que en una prueba de penetración se “imitan” los pasos de un atacante, también se iniciará de la misma manera.

Nmap es una herramienta de línea de comandos (existen algunas interfaces gráficas pero, personalmente, no las recomiendo, aunque es una cuestión de gustos) donde se debe indicar cuál será el o los objetivos y la serie de parámetros que afectarán la forma en que se ejecuten las pruebas y los resultados que se obtienen. Puede instalarse tanto en Linux, Windows, Mac u otros sistemas operativos.

En su forma tradicional, una línea de comando sería la siguiente:

> nmap 172.16.1.1

En donde nmap es el comando en sí mismo y 172.16.1.1 es el objetivo (que también puede ser indicado con un nombre de dominio). La respuesta a estos comandos será un listado de los puertos abiertos o cerrados en dicha dirección. La ejecución sin parámetros ejecuta un escaneo sencillo a los 1000 puertos más comunes (véase que en la imagen se muestra uno abierto y 999 cerrados), realizando anteriormente un ping para ver si el equipo está vivo (si el equipo no responde al ping, no se realizará el test de los puertos).

Cuando agregas parámetros puedes obtener mejores resultados. Algunos parámetros comunes para tener en cuenta son:

[-iL] puedes indicar una lista de equipos o redes a escanear. > nmap –iL hosts.txt
[-sP] solo escanea con un ping. Es una buena forma de ver cuántas direcciones IP se pueden checar. Una vez que se tienen enlistadas, se podrá ir solo con las que están vivas.
[-P0] es la forma de omitir el ping e ir directo al escaneo de puertos. Muchos sistemas no responden el ping como método de seguridad, por lo que, escanearlos de todas formas, también puede ser útil en entornos más reales (no es necesario para los entornos de aprendizaje inicial).
[-p] lista los puertos que se desean escanear. > nmap –iL hosts.txt –p 22,25,80,445
[-sV] intenta determinar la versión del servicio en el objetivo.
[-O] informa el sistema operativo en el objetivo.
Una vez ejecutado Nmap, ya se conocen cuáles son los servicios (al menos los identificados) que se están ejecutando en el blanco de la prueba de penetración. Ahora ya se puede pasar a las siguientes etapas, en donde se utilizará esta información para comenzar la búsqueda de vulnerabilidades en la infraestructura y en los servicios identificados.


jueves, 7 de julio de 2016

Buscar archivos en Linux/Ubuntu usando el comando find

Busca el archivo deseado con el comando find siguiendo la siguiente estructura:

sudo find nombre_directorio -name nombre_archivo

Ejemplos de uso del comando find:

  1. sudo find /home/nombre_usuario/Escritorio -name “*.jpg”: Busca todos los archivos del Escritorio con extensión .jpg.
  2. sudo find . -name “*hola*”: Busca todos los archivos que contienen la palabra “hola” en el nombre.
  3. sudo find . ! -name “*hola*”: Busca todos los archivos que NO contienen la palabra “hola” en el nombre.
  4. sudo find . -name “*servidor*” -a “*correo*”: Busca todos los archivos que contienen la palabra “servidor” y “correo” en el nombre.
  5. sudo find . -name “*servidor*” -a “*correo*”: Busca todos los archivos que contienen la palabra “servidor” y “correo” en el nombre.
  6. sudo find . -iname “*hola*”: Busca todos los archivos que contienen la palabra “hola” en el nombre tanto en mayúsculas como en minúsculas.
  7. sudo find . -user nombre_usuario: Busca todos los archivos de un usuario determinado (nombre_usuario).
  8. sudo find . -size +1000k: Busca todos los archivos de tamaño mayor a 1000 kb.
  9. sudo find . -amin -30: Busca todos los archivos a los que se accedió en los últimos 30 minutos.
  10. sudo find . -atime 365: Busca todos los archivos a los que se accedió hace un año exactamente.
  11. sudo find . -name “*.jpg” -exec rm {} \;: Busca todos los archivos con extensión .jpg y los borra.

Almacena el resultado de la búsqueda en un archivo de texto.

Si el resultado de la búsqueda anterior te ha proporcionado una gran cantidad de información, te va a resultar mucho más cómodo almacenar el resultado de la búsqueda en un fichero de texto para poder revisarlo posteriormente.

Para guardar el resultado de la búsqueda en un archivo de texto en tu Escritorio tienes que realizar la búsqueda de la siguiente manera:

sudo find nombre_directorio -name nombre_archivo > /home/nombre_usuario/Escritorio/Lista.txt

miércoles, 6 de julio de 2016

Verificar si un servidor tiene registro PTR en el DNS

Un Registro PTR

El registro PTR es el registro de recurso (RR) de un dominio que define las direcciones IP de todos los sistemas en una notación invertida. Esta inversión permite que se pueda buscar una IP en el DNS ya que a la notación de la IP invertida se le añade el dominio in-addr.arpa, convirtiendo la IP en un nombre de dominio.

Un Registro A

A = Address – (dirección) Este registro se usa para traducir nombres de servidores de alojamiento a direcciones IP

Usaremos el dominio de google.com.ve como ejemplo

Verificando desde un terminal por nombre de dominio
# host -t A google.com.ve
google.com.ve has address 172.217.1.196

Verificando desde un terminal por IP
host -t PTR 172.217.1.196
196.1.217.172.in-addr.arpa domain name pointer iad23s26-in-f4.1e100.net.

Aquí se puede observar que si no tiene un registro de dominio PTR, con el siguiente mensaje arrojado nos daremos.

# host -t PTR 172.217.1.196
Host 196.1.217.172.in-addr.arpa. not found: 3(NXDOMAIN)