viernes, 31 de marzo de 2017

1. Interfaz de la Línea de Comandos (CLI) de Linux


La terminal CLI es una poderosa herramienta que suele ser el método primario usado para administrar los pequeños dispositivos de baja potencia, servidores de cómputo extremadamente potentes, y todo lo demás. Un entendimiento básico del terminal es esencial para diagnosticar y corregir la mayoría de los sistemas basados en Linux.

Comando

Un comando es un programa de software que al ejecutarlo en la CLI ejecuta un proceso en el sistema operativo, y entonces causa que la computadora realice un trabajo. Cuando se escribe un comando, el sistema operativo ejecuta un proceso que puede leer una entrada, manipular datos y producir la salida. 
Para ejecutar un comando, se debe introducir el nombre del comando en la shell. Por ejemplo si se usa el comando ls, el resultado del proceso mostrará todos los archivos y carpetas del directorio actual:

La mayoría de los comandos sigue un patrón simple de sintaxis:
comando [opciones…] [argumentos…]
Las opciones alteran el comportamiento del comando y los argumentos son elementos o valores para el comando a actuar.









miércoles, 29 de marzo de 2017

Raspberry PI 3 vista remota a través de SSH

¿Qué es SSH?


SSH (Secure Shell) es un protocolo que facilita las comunicaciones seguras entre dos sistemas usando una arquitectura cliente/servidor y que permite a los usuarios conectarse a un host remotamente. A diferencia de otros protocolos de comunicación remota tales como FTP o Telnet, SSH encripta la sesión de conexión, haciendo que alguien pueda obtener contraseñas no encriptadas.

Características

  • El cliente transmite su información de autenticación al servidor usando una encriptación robusta de 128 bits.
  • Todos los datos enviados y recibidos durante la sesión se transfieren por medio de encriptación de 128 bits, lo cual los hacen extremamente difícil de descifrar y leer.
  • El cliente tiene la posibilidad de reenviar aplicaciones X11 desde el servidor. Esta técnica, llamada reenvío por X11, proporciona un medio seguro para usar aplicaciones gráficas sobre una red.

Descargar Putty


Putty es un cliente SSH y Telnet que brinda la posibilidad de conectarse a servidores remotos iniciando sesión para luego ejecutar comandos en ellos. Para usar Putty descargamos del enlace. Escoger el sistema operativo y su arquitectura correspondiente.


Descargar xmig

Xming se usa en implementaciones de SSH para asegurar sesiones X11 en otras computadoras. En este caso se usará para obtener una vista remota del Raspberry PI al conectarse por SSH con el software Putty.
Descargar xming del enlace https://sourceforge.net/projects/xming/

Conexión SSH al Raspberry PI 3 - Kali Linux

Para poder realizar la conexión hace falta saber la dirección IP que tiene el Raspberry PI. Se debe tener en cuenta que la máquina que hará la conexión debe estar dentro de la misma red que el Raspberry PI. 
Una vez conocida la dirección IP del Raspberry seguir los siguientes pasos:

Ejecutar el instalador del xmig


Al finalizar la instalación ejecutar el software xming y en caso de una alertar del fireware permitir su acceso. Como no existe ninguna conexión SSH no se abrirá ninguna ventana, pero se encuentra en ejecución.

Ejecutar Putty a la izquierda abrir la pestaña de SSH, luego seleccionar X11 y habilitar la casilla Enable X11 forwarding


Seleccionar la categoría de Session, colocar la dirección IP del Raspberry y seleccionar conexión SSH.



Hacer clic en Open y se abrirá una ventana de comandos donde se deberá colocar el usuario y contraseña, si no se ha cambiado usar los que viene por defecto en Kali Linux para Raspberry: 
  • usuario: root
  • password: toor


Luego de iniciar sesión ejecutar el comando:

startlxde
Con este comando se iniciaría la vista remota del Raspberry PI en el xmig, si da como salida un error; se podría solucionar instalando el paquete de lxde con el comando;

sudo apt-get install lxde-core xserver-xorg xinit

Ejecutar nuevamente el comando:

startlxde

Inmediatamente el xmig cargaría la vista remota del Raspberry PI, en esta ocasión el sistema operativo es Kali Linux.


Referencias




jueves, 23 de marzo de 2017

9. Amenazas internas y externas de seguridad

Amenazas de seguridad interna

Los ataques pueden ser originadas desde dentro o fuera de la organización. Un usuario interno, tales como un socio o empleado contratado, puede accidentalmente o intencionalmente:

  • Administrar mal los datos confidenciales
  • Poner en peligro el funcionamiento de los servidores internos o dispositivos de infraestructura de red
  • Facilitar ataques externos mediante la conexión de un dispositivo USB infectados en el sistema informático corporativo
  • Accidentalmente invitar a malware en la red a través de correo electrónico o sitios web maliciosos
Las amenazas internas también tienen el potencial de causar un daño mayor que las amenazas externas, ya que los usuarios internos tienen acceso directo al edificio y sus dispositivos de infraestructura. Los empleados también tienen conocimiento de la red de la empresa, sus recursos y sus datos confidenciales, así como los diferentes niveles de privilegios de administrador o usuario.

Amenazas de seguridad externa

Las amenazas externas de aficionados o atacantes expertos pueden explotar las vulnerabilidades en los dispositivos de la red, o utilizar la ingeniería social para obtener acceso.

Referencia

Introduction to Cybersecurity

8. Tipos de atacantes en la red


Los atacantes son individuos o grupos que intentan explotar la vulnerabilidad para obtener beneficios personales o financieros. Los atacantes están interesados ​​en todo, desde tarjetas de crédito hasta cualquier cosa de valor.

Amateurs

Por lo general son atacantes con poca o ninguna habilidad, a menudo utilizando las herramientas existentes o instrucciones que se encuentran en Internet para lanzar ataques. Algunos de ellos son simplemente curiosos, mientras que otros están tratando de demostrar sus habilidades y causar daño.

Hackers

Este grupo de atacantes se basa en ordenadores o redes para obtener acceso. Dependiendo de la intención del robo, estos atacantes se clasifican como sombreros blancos, grises o negros
  • Los atacantes de sombrero blanco se rompen en las redes o sistemas informáticos para descubrir los puntos débilesEstos se llevan a cabo con el permiso previo y cualesquiera resultados se presentan a su dueño.
  • Los atacantes de sombrero negro se aprovechan de cualquier vulnerabilidad para beneficio personal, financiera o política ilegal. 
  • Los atacantes sombrero grises pueden informar de la vulnerabilidad a los propietarios del sistema en caso de que la acción coincide con su agenda. Algunos publican los datos sobre la vulnerabilidad en Internet para que otros atacantes pueden explotar.

Hackers organizados

Estos hackers incluyen organizaciones de delincuentes cibernéticos, hacktivistas, terroristas y piratas informáticos patrocinados por el estado. Los criminales son muy sofisticados y organizados, y pueden incluso proporcionar los delitos informáticos como un servicio a otros delincuentes. Estos atacantes son por lo general altamente entrenados y bien financiados, y sus ataques se centran en los objetivos específicos que son beneficiosos para su gobierno.
Si se desea ver el perfil de los hackers ir al siguiente enlace: perfil de los hackers.

Referencia

Introduction to Cybersecurity

7. Consecuencias de la violación a la seguridad


La experiencia necesaria para configurar y mantener la red segura puede ser costosa. Con el tiempo, un ciberataque avanzado y dirigido tendrá éxito
La prioridad, luego, será con qué rapidez su equipo de seguridad puede responder al ataque para minimizar la pérdida de datos, el tiempo de inactividad y la pérdida de ingresos.

Cosecuencias:

Un hacker al publicar información falsa de una empresa puede arruinar su reputación que tardó años en crearse. 
Los hackers también pueden tirar la página web de la empresa y hacer que esta pierda ingresos.
Si el sitio web o la red de la empresa ha sufrido una violación de seguridad podría provocar la fuga de los documentos confidenciales, la revelación de los secretos comerciales y el robo de la propiedad intelectual.

Referencia

Introduction to Cybersecurity - Cisco

martes, 21 de marzo de 2017

JSON Resume

Introducción

JSON( JavaScript Object Notation) es un formato ligero de intercambio de datos. Leer y escribir resulta simple para los humanos, mientras que para las máquinas es simple interpretarlo y generarlo. JSON es un formato de texto que es completamente independiente del lenguaje. JSON se ha convertido en un lenguaje ideal para el intercambio de datos. Está constituido por dos estructuras:
  • Una colección de pares de nombre/valor. En varios lenguajes esto es conocido como un objeto, registro, estructura, diccionario, tabla hash, lista de claves o un arreglo asociativo.
  • Una lista ordenada de valores. En la mayoría de los lenguajes, esto se implementa como arreglos, vectores, listas o secuencias.

Representación

En JSON, se presentan de estas formas:

Un objeto es un conjunto desordenado de pares nombre/valor. Un objeto comienza con { (llave de apertura) y termine con } (llave de cierre). Cada nombre es seguido por : (dos puntos) y los pares nombre/valor están separados por , (coma).



Un arreglo es una colección de valores. Un arreglo comienza con [ (corchete izquierdo) y termina con ] (corchete derecho). Los valores se separan por , (coma).


Un valor puede ser una cadena de caracteres con comillas dobles, o un número, o true o false o null, o un objeto o un arreglo.



JSON Schema permite validar una estructura de datos JSON, JSON API para estandarizar las solicitudes y respuestas de una API, Compositor para configurar las dependencias de un proyecto PHP, GeoJSON para estandarizar la codificación datos geográficos. JSON Resume para elaborar hojas de vida.

JSON Resume

Es un estándar de almacenamiento estructurado JSON de toda la información que puede encontrar en una hoja de vida o curriculum vitae. Se puede tener varias versiones con GitHub
Se puede crear el curriculum con un esquema de JSON o por medio de una interfaz gráficaAl final se obtiene un JSON de forma legible. Una lista de temas disponibles puede ser encontrado aquí: https://jsonresume.org/themes/

Ejemplo

Representación con el esquema JSON del ejemplo:

RESUME.JSON
{
  "basics": {
    "name": "John Doe",
    "label": "Programmer",
    "picture": "",
    "email": "john@gmail.com",
    "phone": "(912) 555-4321",
    "website": "http://johndoe.com",
    "summary": "A summary of John Doe...",
    "location": {
      "address": "2712 Broadway St",
      "postalCode": "CA 94115",
      "city": "San Francisco",
      "countryCode": "US",
      "region": "California"
    },
    "profiles": [{
      "network": "Twitter",
      "username": "john",
      "url": "http://twitter.com/john"
    }]
  },
  "work": [{
    "company": "Company",
    "position": "President",
    "website": "http://company.com",
    "startDate": "2013-01-01",
    "endDate": "2014-01-01",
    "summary": "Description...",
    "highlights": [
      "Started the company"
    ]
  }],
  "volunteer": [{
    "organization": "Organization",
    "position": "Volunteer",
    "website": "http://organization.com/",
    "startDate": "2012-01-01",
    "endDate": "2013-01-01",
    "summary": "Description...",
    "highlights": [
      "Awarded 'Volunteer of the Month'"
    ]
  }],
  "education": [{
    "institution": "University",
    "area": "Software Development",
    "studyType": "Bachelor",
    "startDate": "2011-01-01",
    "endDate": "2013-01-01",
    "gpa": "4.0",
    "courses": [
      "DB1101 - Basic SQL"
    ]
  }],
  "awards": [{
    "title": "Award",
    "date": "2014-11-01",
    "awarder": "Company",
    "summary": "There is no spoon."
  }],
  "publications": [{
    "name": "Publication",
    "publisher": "Company",
    "releaseDate": "2014-10-01",
    "website": "http://publication.com",
    "summary": "Description..."
  }],
  "skills": [{
    "name": "Web Development",
    "level": "Master",
    "keywords": [
      "HTML",
      "CSS",
      "Javascript"
    ]
  }],
  "languages": [{
    "name": "English",
    "level": "Native speaker"
  }],
  "interests": [{
    "name": "Wildlife",
    "keywords": [
      "Ferrets",
      "Unicorns"
    ]
  }],
  "references": [{
    "name": "Jane Doe",
    "reference": "Reference..."
  }]
}

Con el esquema JSON se utiliza la herramienta por línea de comandos para el archivo en html y pdf con el tema escogido. En caso de no generarse el archivo pdf correctamente se puede usar una herramienta node para convertir de html a pdf 

Si se desea ejecutar en Windows se debería instalar el Node.js y el npm además es necesario instalar git.

La instalación de la primera herramienta es con el comando:
npm install -g resume-cli
En caso de generar un error, por lo general se soluciona instalando git.

El comando para exportar con la primera herramienta a html:
resume export --format html --theme spartan resume.html

El comando para exportar con la primera herramienta a pdf:
resume export --format pdf --theme spartan resume.pdf

Como se indicó antes si no se genera el archivo pdf primero se instala la segunda herramienta node para la conversión de html a pdf con el comando:

npm install -g html-pdf

Luego se convierte el archivo html generado anteriormente a pdf con el comando:
 html-pdf resume.html resume.pdf

Para usar algunos temas es necesario primero instalarlos con el comando:
npm install -g jsonresume-theme-nombredeltema

Por ejemplo para instalar el tema stackoverflow se usaría el comando:
npm install -g jsonresume-theme-stackoverflow

Referencia


Instalar Git

Instalación en Windows

La instalación de Git en Windows es muy sencilla:
Se descarga el instalador de su web oficial según la arquitectura de la máquina.


Luego ejecutar el instalador y seguir con las instrucciones.


Elegir la ruta de instalación:


Seleccionar los componentes que se desean instalar:


El nombre de la carpeta:


Como le gustaría usar la línea de comandos:




Configuraciones extas:


Luego de dar clic en instalar, esperar que culmine la instalación y dar clic en Finalizar.


Instalar Node.js y npm

Node.js es un intérprete Javascript que funciona del lado del servidor. Se sabe que Javascript se ejecutaba del lado del cliente, por lo general en los navegadores, sin embargo con Node.js se ejecuta todo el código en el servidor.

Para la instalación se descarga su instalador de su sitio web oficial.


Instalación en Windows

Descargar el archivo .msi dependiendo de la arquitectura de la máquina donde se instalará (32 bits o 64 bits). Ejecutar el archivo, y seguir las instrucciones:


Aceptar los términos de la licencia y dar clic en Next.


Escoger la ruta de instalación y dar clic en Next.


Verificar los componentes que se instalarán (npm) y dar clic en Next.


Si todo está correctos proceder a instalar:



Finalizar la instalación:


Instalación de npm y comprobación de la versión

Ejecutar el símbolo del sistema o cmd. 

Luego el comando para verificar la versión de Node.js:

node -v

Para verificar la versión del npm:

npm -version


Por lo tanto se ha instalado correctamente el software Node.js

viernes, 17 de marzo de 2017

15. Funciones en Python

Las funciones en Python tienen la siguiente estructura:

def nombre_función(argumento):
     código

No es obligatorio recibir un argumento. Para ejecutar la función se escribe el nombre de la función seguido de paréntesis y dentro de ellos los argumentos en caso de requerirlos:


Las funciones también pueden retornar cualquier objeto o valor, para esto se usa el método return:


En Python es posible regresar varios valores para esto luego de return se separan por coma (,) los valores a regresar. La función regresa una tupla:


14. List Comprehension en Python

List Comprehension permite crear una lista rápidamente, esto es agregando un valor y luego un ciclo; como se observa:

Lista de valores numéricos:


Lista de String:


Lista de números pares:


Tupla de números pares:


Diccionario con llave y valor:




13. Ciclo For en Python

El ciclo for nos permite iterar objetos iterables como; tuplas, listas, diccionarios.
La estructura de un ciclo for es:

for valor in lista:
    proceso

Ejemplo de la iteración de una lista:


Ejemplo de la iteración de un range:




Ejemplo de iteración con enumerate que regresa dos elementos de la lista: el índice y el valor:


Para saber la longitud de una lista se usa len(lista).
Ejemplo de iteración con un diccionario, el método items() devuelve el valor y la llave:



12. Bucle While en Python


Un bucle while permite repetir la ejecución de un grupo de instrucciones mientras se cumpla una condición (es decir, mientras la condición tenga el valor True). 
La estructura de un bucle While es:

while condición:
   código
else:
   código

Los operadores para usar en la condición son:
  • ==  igual
  • !=   diferente
  •    mayor
  • <    menor
  • >=  mayor o igual
  • <=  menor o igual

Dentro de un bucle while se pueden usar dos operadores: 
  • continue se usa para continuar con el bucle
  • break se usa para terminar el bucle independientemente de la condición


En el ejemplo anterior, se puede observar el uso de los dos operadores, el bucle while se debería ejecutar hasta que el contador llegue al número 7, sin embargo el bucle se deja de ejecutar cuando llega a ser igual a 4 en donde se usa el operador break.

Para dejar de ejecutar un bucle while también se usan booleanos por ejemplo:


11. Condicionales en Python


La estructura de un condicional en Python es:

if condición :
    código

En el caso de requerir ejecutar alguna operación si no cumple la condición se utiliza else:

if condición :
    código
else:
    còdigo


Los operadores para comparar en la condición son:
  • ==  igual
  • !=   diferente
  • >    mayor
  • <    menor
  • >=  mayor o igual
  • <=  menor o igual
Para anidar algunas condiciones se utilizan los operadores lógicos:
  • and (y)
  • or    (o)
  • not  (no

En algunas circunstancias existen dos o más posibilidades y necesitamos más de dos ramas. Como solución se usa una condicional encadenada:

if condición1 :
    código1
elif condición2:
    código2
else:
    código3