domingo, 8 de noviembre de 2015

Comentario: "Es hora de endurecer la seguridad en Linux"



 
He leído la traducción literal (google – traductor) W.Post y sin ser experto en seguridad informática, encuentro de todo y lo tratare de resumir en tres puntos:
1.- La seguridad a nivel de kernel, (Linux).
Considero que si las empresas globales que marcan los hitos en la web http://www.top500.org/lists/2015/06/ no confiaran en el SO GNU/Linux (esto incluye el kernel Linux), simplemente no depositarían su seguridad en este SO.
2.- La seguridad fuera del kernel (Linux).
Indudablemente todo lo que esta fuera del kernel no es su responsabilidad, pero si lo es, el modo en que lo administra, por lo que si es necesario una postura dura e inflexible dirigida hacia este punto.
3.- La seguridad a nivel usuario.

El usuario final de un SO, que no tiene la obligación de tener los altos conocimientos en informática ya que solo usa el Pc para realizar sus labores diarias para obtener un sustento en beneficio de su persona y familia, mas tiene el derecho irrenunciable a contar con un SO seguro, desde el kernel hasta la más simple o compleja aplicación que use, así como a una navegación en la web, limpia y segura. Por lo que aquí implica la parte legislativa de los gobiernos hacia un mejor desarrollo legislativo en seguridad informática y a obligar a las empresas a garantizar sus servicios de seguridad informática.
Como experiencia personal, uso el SO W7, Ubuntu y Red Hat, el primero para prestar un servicio a empresas especificas dentro de un ámbito empresarial (las aplicaciones no existen para otro SO), el segundo para el desarrollo de aplicaciones y algunos servicios a empresas, el tercero y a veces otros más por gusto y antojo.
Y a pesar de que no soy un objetivo específico para los ataques informáticos, siempre trato de seguir algunos pasos para aumentar la seguridad en mi Pc.
Independiente del SO tengo antivirus, anti spam, FireWall (corta fuego), y todo lo que pueda adquirir y que me permita aumentar mi seguridad, para ello he tenido que migrar de usuario final a usuario protegido, pero ¿de qué manera se logra esto? Investigando, leyendo y suscrito a foros de seguridad informática, etc.

Por ejemplo: Mantengo las actualizaciones bajo control, si alguna pregunta por instalarse investigo un poco antes de decirle “SI”, navego con mucha precaución y siempre tengo el navegador con un bloqueador de publicidad, tengo un antivirus de paga actualizado, mi corta fuego lo controlo yo.
Mi correo personal no lo registro en todos lados para recibir publicidad o notificaciones, no descargo e instalo lo que desconozco si hubiese algo que fuese de mi interés lo puedo hacer en una máquina virtual o de plano en un DD con el SO necesario por si algo sale mal no me infecto o pierdo algo importante, no estoy conectado a la web de manera permanente, ni siquiera mi modem esta encendido todo el día.

No hago caso de “cadenas de seguridad” en ninguna red social o correo de un “contacto conocido”, ni invitaciones maravillosas de premios y usuario 1’000,000.

No tomar en cuenta la seguridad desde el punto de vista del usuario final es como tener un “bunker” y dejar la llave de la puerta de entrada debajo del tapete.

Aquí les dejo una lista de direcciones web para que consulten.
Esta es una lista antigua pero efectiva:

domingo, 7 de abril de 2013

Ejercicios Capitulo II


II.9.    Ejercicios del capítulo II.


Diseñar un algoritmo para calcular la longitud de un círculo en centímetros (cm).

1.       Inicio (Modulo I)
2.       Var: radio, n2, circunferencia, real;  (Variables declaradas como Tipo Real)
3.       Escribir: “Ingresa el radio de la circunferencia en m.”;  (Dato de entrada)
4.       Leer: radio;
5.       Circunferencia <- (2 *radio) * PI; (Cálculos)
6.       Fin



Diseñar un programa que convierta el resultado del Módulo I (Circunferencia) a pulgadas

1.       Inicio (Módulo II)
2.       Var: pulg, real;
3.       Pulg <- Circunferencia / 2.54 (Calculo usando la variable “circunferencia” del módulo I)
4.       Mostrar: pulg;
5.       Fin

Capitulo II

II.1.    Tipos de datos
Los tipos de datos hacen referencia al tipo de información que se trabaja, donde la unidad mínima de almacenamiento es el dato, también se puede considerar como el rango de valores que puede tomar una variable durante la ejecución del programa.
Un dato puede ser un caracter y el tipo determina la naturaleza del dato.
Los tipos de datos simples son los siguientes:
·         Numéricos (integer, real)
·         Lógicos (boolean)
·         Caracter (char, string)

II.1.1. Tipo entero
Los enteros son números completos, no contienen fracciones o decimales, pueden ser negativos o positivos.
Ejemplo:
·         -1           -1
·         10           -10
·         135        -135
·         1000      -1000
·         32768    -32768

II.1.2. Tipo real
Los reales son números que tiene punto decimal y pueden ser negativos o positivos.
Ejemplo:
·         -1.1        -1.1
·         10.5       -10.5
·         135.0     -135.0
·         1000.3  -1000.3

II.1.3. Tipo caracter
Un dato de tipo caracter es un equivalente del Código ASCII (American Standard Code for Interchange Information).
Por lo que cada caracter representa para la maquina un código ASCII, que a su vez se lee como un código binario. Un conjunto de caracteres forman una cadena (string). Se puede representar números como caracteres, pero pierden su propiedad matemática, por lo que no podrán ser usados con un operador. La forma para representarlos dentro de una sintaxis es encerrándolos entre comillas.
Ejemplo:
·         “Manual de Algoritmos”
·         “2012”

II.1.4. Tipo booleano
Estos datos solo pueden tener dos valores (CIERTO o FALSO), (TRUE o FALSE), debido a que son el resultado de realizar una comparación entre dos o más datos numéricos o caracteres.
Ejemplo:
·         “A” = “A”            cierto (true)
·         2.5 < 3.5              cierto (true)
·         “Hola” = “Casa”   falso (false)

II.2     Expresiones
Son combinaciones de constantes, variables, símbolos de operación, paréntesis y nombres de funciones especiales.
Una expresión se compone de operadores y operandos. Dependiendo del tipo de datos contenido se clasifican en:

II.2.1 Aritméticas
Son aquellas que contienen datos de tipo numérico y que usando un operador aritmético nos darán un resultado entero o real.
Ejemplo:
·         (2.5 * 11) + (3 *8) – 5

·         10 div 3           resultado = 3
·         10 mod 3         resultado = 1
Operadores Aritméticos

II.2.2. Relacionales
Estos permiten realizar comparaciones entre los datos, ya sean de tipo numérico o caracter, a través de condiciones en los algoritmos.
Ejemplo:
A > B verdadero
5 = 6 falso
8 <= 3 verdadero
Operadores de Relación
II.2.3. Lógicas
                Estos datos solo pueden tener dos tipos de resultado, (verdadero o falso).
Ejemplo:
A es verdadero Y B es verdadero por tanto AB es verdadero.
A es falso Y B es verdadero por tanto AB es falso.

II.3     Operadores y operandos
                Regla de Prioridad.
                               Las operaciones que se encuentren entre paréntesis (a + b) se ejecutaran primero.
Los operadores se muestran en orden decreciente de prioridad de arriba a abajo. Los operadores del mismo grupo tienen la misma prioridad (precedencia) y se ejecutan de izquierda a derecha (asociatividad) 


II.4     Variables
                Variable es el término que se uso de manera común para indicar que algo tiende a ser diferentes formas, expresiones o significado, en el ámbito de la programación, tomaremos como definición:
                Variable:
                               Asignación de un valor a un campo de memoria, valor que se puede cambiar un número
                               infinito de veces.
El valor de la variable puede cambiarse durante la ejecución del programa.

II.4.1 Reglas para generar variables:
·         Debe comenzar con una letra (a – z) (A – Z). 
·         No debe contener espacios.
·         Solo podrá contener el tipo de dato con el que fue declarada.
·         Letras, dígitos y caracteres especiales (_, #, $), están permitidos. (Opcional)
·         Longitud máxima 8 caracteres. (Opcional)
·         No ser el nombre de una palabra reservada de la sintaxis del lenguaje de programación utilizado.
·         No debe llevar acentos.
Ejemplo:
                               a                         Correcto
                               a_23                   Correcto
                               nombre               Correcto
                               _hola                  Correcto
II.5 Constantes
Una constante es un dato numérico o alfanumérico que no cambia su valor durante la ejecución del programa. Puede contener diferentes datos (numéricos o alfanuméricos), deberá respetar las reglas para declarar variables.
Existen algunas constantes que se respetan en casi todos las sintaxis de los lenguajes de programación:
Ejemplo:
                PI     3.1415
                e     2.71828

II.6     Asignaciones
                La asignación es la acción de indicarle al programa que una variable contiene un dato determinado, esto lo hacemos de la siguiente manera.
a = 6
a       variable
=      signo de asignación.
6      valor que contendrá la variable a.
Si la variable a contenía un valor anterior, este se perderá al recibir la nueva asignación.
II.7 Datos de Entrada
Los datos que se ingresan desde el teclado, mouse u otro dispositivo al programa se consideran datos de entrada, así como también los que provengan de otro modulo o de otro programa, estos deberán cumplir con los requerimientos del mismo programa. A este proceso se le denomina “Operación de lectura (read)”.

II.8   Datos de Salida
                Los datos que se obtienen como resultado de los cálculos del programa, se denomina “Operación de escritura (write)”, y pueden salir a través de la pantalla, a la impresora o ser enviados a otro modulo o programa.


martes, 1 de mayo de 2012

Capitulo I

I.1.      Definición de lenguaje
De acuerdo con el diccionario de la Lengua Española.

Lenguaje:
     Conjunto de sonidos articulados con que el hombre manifiesta lo que piensa y siente.[1]
     Conjunto de signos y reglas que permiten la comunicación con un ordenador.

Lenguaje de Programación:
      Lenguaje que facilita la comunicación con un computador mediante signos convencionales cercanos a los de un lenguaje natural.
Con estos conceptos podemos comprender que nuestro concepto de Lenguaje quedaría de la siguiente manera:
      Conjunto de signos y reglas que permiten establecer una comunicación entre el usuario y la computadora.
    Tomando en cuenta que la comunicación se forma entre un emisor y un receptor, contando con un medio de comunicación y el mensaje, contemplando que el mensaje corre en un sentido, alternando los papeles de emisor, receptor y el sentido del mensaje según se necesite.




[1] http://buscon.rae.es/draeI/SrvltConsulta?TIPO_BUS=3&LEMA=lenguaje


I.2.      Historia y aplicación de los lenguajes algorítmicos
     El lenguaje algorítmico permite la comunicación entre el programador y la computadora, siguiendo esta las indicaciones que se encuentren en dicho algoritmo, terminado podemos crear un programa, trasladando la estructura del algoritmo a un lenguaje de programación.
      A los primeros lenguajes de programación se les conocieron como lenguaje ensamblador, estos son una representación simbólica de códigos binarios, el cual representa de manera muy similar del código maquina especifico para cada arquitectura. Por esto es llamado de “Bajo Nivel”.
     El lenguaje ensamblador fue usado en los inicios del desarrollo de programas, ya que aun no se contaba con los lenguajes de “Alto Nivel”, quienes contemplan sintaxis y/o palabras reservadas similares a las usadas en nuestro lenguaje común, también contienen módulos que nos permiten crear programas con imágenes y cuadros de diálogos, de manera fácil y rápida.

La aplicación de los algoritmos no se encuentra limitada a la creación de programas de computadora, se pueden emplear en todas las aéreas del conocimiento, donde sea necesario crear un proceso que contenga inicio, desarrollo y fin, logrando cumplir con un resultado siempre igual, sin importar cuantas veces se aplique el procedimiento.
Un algoritmo debe tener las siguientes características.
Contar con un Inicio, tener un Desarrollo que deberá ser Preciso, Definido y Finito, y tener un Fin.
     o   Preciso
     o   Definido
     o   Finito
I.3.      Definición de algoritmo
  Para el tema de este manual definiremos algoritmo de la siguiente manera:

Secuencia de pasos lógicos, precisos, definidos y finitos para resolver un problema, de la manera más obvia y fácil.

I.4.      Tipos de algoritmos
  Los podemos dividir en dos, algoritmos cotidianos y algoritmos computacionales. Ambos pueden ser escritos en pseudocódigo y diagrama de flujo.

Algoritmos cotidianos:
Son aquellos donde el que realiza los pasos es la persona, como ejemplo:

              Algoritmo para comprar un libro. (escrito en pseudocódigo)
1. Inicio
2. Determinar el título del libro
3. Dirigirse a una librería
4. Preguntar por el libro
5. Si tienen el libro en venta entonces
   5.1 Comprarlo
   5.2 Si no
   5.3 Regresar al paso 3
6. Fin


Algoritmos computacionales:
Son aquellos que se ejecutan en una computadora, como ejemplo:

         Algoritmo para conocer si un  número es par. (escrito en pseudocódigo)
1.       Inicio
2.       Pedir el número
3.       Si el residuo de dividir el numero entre 2 es igual a 0 entonces
      3.1  El número es par
      3.2  Sin no
      3.3  El número es impar
4.       Fin

Como podemos ver ambos cumplen con las características mencionadas en el tema I.2.




I.5.      Lenguajes algorítmicos
Símbolos y reglas que se utilizan para describir de manera ordenada y clara un proceso, para ello dividiremos los lenguajes algorítmicos en Escritos Gráficos.
o   Escritos: (pseudocódigo)
     Presentación en forma de texto de los paso a realizar dentro del algoritmo.
o   Gráficos: (diagrama de flujo)
     Es la representación grafica de los pasos a realizar dentro del algoritmo.
Ejemplos:

Escritos:
Algoritmo para conocer si un  número es par.
1.       Inicio
2.       Pedir el número
3.       Si el residuo de dividir el numero entre 2 es igual a 0 entonces
     3.1 El número es par
     3.2 Sin no
     3.3 El número es impar
4.       Fin

Gráficos:


Como podemos ver ambos nos conducen a través de una serie de pasos en secuencia hacia un resultado, sin importar cuantas veces los recorramos.

I.6.      Definición del problema
    Indudablemente el problema se encuentra en el correcto planteamiento del enunciado del problema, es necesario tener un conocimiento claro y preciso de lo que se requiere realice la computadora.

Crear un programa tiene mucho de creatividad, imaginación, conocimiento, pero aun más de certeza de la solución esperada a través de la comprensión del problema.
Podemos estructurar una secuencia de pasos lógicos para el diseño de un programa pero no deja de ser algo meramente esquemático.


I.6. 1. Analizar el Problema:
Comprendido el resultado esperado del futuro programa.

·         Determinar los datos de entrada.
·         Determinar los datos de salida.
·         Formulas y procedimientos para el proceso de los datos

Recordar que es de gran utilidad tomar el lugar de la computadora para una rápida comprensión de las órdenes a recibir y los mensajes a enviar al usuario, así como la secuencia de las órdenes.

I.6.2. Diseño del Algoritmo:
Ver el punto (I.2. Historia y aplicación de los lenguajes algorítmicos)


I.6.3. Crear Código:
Utilizar un lenguaje de programación adecuado que nos permita crear el programa de la manera más eficiente y segura.

I.6.4. Ejecutar:
La ejecución consiste en abrir el archivo compilado de nuestro programa y revisar todos los puntos que se involucran entre el programa y el usuario y los puntos que el usuario no observa pero que se desarrollan dentro del programa para cumplir con el resultado esperado.

Podemos agregar un paso que es la depuración del programa, para solventar las deficiencias encontradas, así como agregar las líneas de código necesarias para evitar que el usuario ingrese datos no correctos.

I.6.5. Documentación:
Esta parte es la recopilación de todo el trabajo creado, ya que el programa puede ser modificado o adaptado por otra persona.

De aquí saldrá el manual del usuario.


Introduccion

INTRODUCCION

     Dentro del mundo de la informática, el desarrollo de programas ocupa un lugar muy especial, ya que éste es el motor del avance de la misma, por lo que todo inicio debe contener, el conocimiento adecuado y correcto del desarrollo de los algoritmos.
El principiante debe entender que la programación de aplicaciones requiere del desarrollo de pensamientos lógicos para ser aplicados a un problema y obtener la solución adecuada, y que estos pensamientos ya se encuentran dentro de nuestro pensar diario, solo hay que encontrarlo, sacarlo, pulirlo y plasmarlo en un algoritmo.
      La lógica de programación no exige conocimientos de computación ni la presencia de alguna aplicación, ya que esta forma de pensamiento se consigue a través de la práctica continua de la resolución de problemas, siguiendo un proceso metódico de la solución por algoritmos.
Este manual se enfocará al principiante, para ayudarlo a conseguir la solución de los algoritmos, de manera obvia y fácil.
     Podemos garantizar que la lectura completa y la práctica de los ejercicios propuestos en este manual llevarán al participante a encontrar los pensamientos lógicos para la solución de algoritmos.