domingo, 14 de junio de 2009

Conceptos de Seguridad y Protección

La seguridad en los sistemas de una computadora es un elemento muy importante en diseño de los sistemas operativos ya que manejan información muy valiosa para sus propietarios.

La seguridad de un sistema tiene múltiples facetas, desde la protección ante posibles daños físicos de los datos (fuego, terremotos, etc.) hasta el acceso indebido a los mismos (intrusos, fallos de confidencialidad, etc.).

Los ataques contra la confidencialidad, la integridad o la disponibilidad de recursos en un sistema deben prevenirse y solventarse mediante la política y los mecanismos de seguridad de un sistema. La seguridad debe tener en cuenta eventos tanto internos como externos (provenientes del entorno en que opera el sistema), de nada sirve tener mecanismos de protección interna muy buenos, si el sistema operativo no es capaz de identificar a los usuarios que acceden al sistema o si no existe una política de salvaguarda de datos antes la rotura de un disco.

La protección, consiste en evitar que se haga un uso indebido de los recursos que están dentro del ámbito del sistema operativo. Es necesario comprobar que los recursos (archivos, zonas de memoria, etc.) solo se usan por aquellos usuarios que tienen derechos de acceso.

El sistema operativo debe proporcionar los medios para implementar políticas de protección deseadas por el usuario.

La seguridad de un sistema operativo se basa principalmente en tres aspectos de diseño:

1. Evitar pérdida de datos
2. Controlar la confidencialidad
3. Controlar el acceso a los datos y recursos

La pérdida de datos puede deberse a catástrofes naturales o artificiales, a errores del hardware o del software de la computadora (rotura de un disco) o a errores humanos. Una solución para estos problemas es hacer que los administradores del sistema mantengan varias copias de los datos almacenados en distintos lugares.

En el ámbito interno del sistema operativo hay operaciones que pueden violar la confidencialidad de los datos. Una simple asignación de bloque de disco libre a un usuario le proporcionará el bloque con el contenido del usuario anterior si el sistema operativo no tiene una política definida para este tipo de situaciones. En estos casos, siempre hay que limpiar los recursos de los datos anteriormente existentes.

Sin embargo la confidencialidad de los datos es un problema de seguridad que sobrepasa el ámbito de los sistemas operativos.

En cuanto al control del acceso a datos y recursos, es necesario asegurar que los usuarios no acceden archivos para los que no tienen permisos de acceso, a cuentas de otros usuarios o páginas de memoria o bloques de disco que contienen información de otros usuarios.

Leia Mais…

Para que sirve la script del Shell

Un shell es la parte fundamental de un sistema operativo encargada de ejecutar las órdenes básicas para el manejo del sistema. También se denomina shell. Suelen incorporar características tales como control de procesos, redirección de entrada/salida y un lenguaje de órdenes para escribir programas por lotes o (script).

Los principales intérpretes de comandos son:

* command.com: perteneciente a los sistemas MS-DOS y derivados como Windows 95 y 98.

* ksh: El korn shell de UNIX.

* C Shell (csh): similar en sintaxis al lenguaje C.

* Bourne Shell (sh)

* GNU Bourne Again Shell (bash): variante del Bourne Shell clásico para Linux con características avanzadas como control de procesos, historial de órdenes y edición similar a Emacs entre otras.

* Tcsh: versión de C Shell para Linux con funcionalidades similares a bash.

* Zsh: pequeño intérprete similar al Bourne Shell.

¿Qué es un guión (script)?

Un guión o script es un fichero de texto que contiene una serie de instrucciones que se pueden ejecutar en la línea de órdenes, y que se ejecutarán seguidas. En ese sentido son iguales que los ficheros con extensión BAT de MS-DOS, aunque, por supuesto, como en los sistemas UNIX no existe el concepto de extensión, pueden tener cualquier nombre. El único requisito es que ese fichero de texto tenga permiso de ejecución para la persona que intenta ejecutarlo. Alternativamente, puedes llamar al intérprete y darle como parámetro el nombre del guión, pero es más cómodo dar permiso de ejecución al guión para ahorrarnos escribir el nombre del intérprete. El objetivo de un script en el shell es para automatizar tareas que hacemos habitualmente ahorrando un tiempo considerable al usuario.

Esas instrucciones se procesarán por orden, como si alguien las escribiera en el mismo orden en la línea de órdenes. Por ello, van una por línea (los saltos de línea se interpretan igual que si hubieras pulsado INTRO), o separadas por caracteres ``punto y coma'' (;) si están en la misma línea. Cuando se ejecuta un guión para el intérprete de órdenes, se intenta ejecutar como un binario normal, pero al darse cuenta el sistema operativo de que no es un binario válido, pero que es un archivo de texto, ejecuta un intérprete hijo y empieza a interpretar el fichero de texto. Si fuera un archivo con un texto cualquiera, tarde o temprano (probablemente en la primera línea) habría un error de sintaxis y se abortaría la ejecución del programa.
Scripts de Shell - Básicos

Siempre que interactuamos con el shell estamos creando pequeños programas. Cuando a estos pequeños programas se guardan en un archivo que pueda ejecutarse luego, lo son llamados "script". Estos scripts sirven, entre otras cosas, para tareas de automatización.

Los scripts de shell son básicamente programas escritos en el lenguaje del shell, se parecen a los archivos .BAT del DOS. Aunque es cierto que, si se van a escribir más de varias decenas de líneas de script, es mejor recurrir a un lenguaje diferente del shell, pensar en que los scripts de shell son solamente pequeños programas sería cometer una injusticia con la flexibilidad y comodidad que ofrecen al usuario.

Normalmente los scripts de shell se crean cuando es necesario combinar en una única acción una tarea rutinaria.

Estos scripts pueden ser muy breves (una sola línea), o bastante largos (varias pantallas). A continuación se muestran algunos ejemplos muy sencillos.
Primer Script de Shell

Creamos un archivo que contenga: who | wc -l, esto lo podemos hacer utilizando el comando echo, con la salida standard a un archivo, o bien utilizando el editor vi. El archivo lo llamaremos cuantos.

Para poder ejecutar este pequeño script, tenemos que utilizar el intérprete del shell. Hay dos formas de hacerlo: sh cuantos, invocará al sh para que interprete el script y lo ejecute.

El archivo no lo podemos ejecutar directamente, porque al crearlo, se ha creado como archivo de texto, y no tiene permisos de ejecución. Para que podamos ejecutarlo tenemos que agregarle el permiso: chmod u+x cuantos. Una vez que le hemos agregado el permiso, nuestro archivo ha pasado a ser un ejecutable, y se lo puede invocar como a cualquier comando. La línea para invocarlo será: ./cuantos.
La variable PATH

Llama la atención el ./ que tenemos que agregar al principio para poder ejecutar el archivo. Esto simboliza al directorio actual. Lo que estamos haciendo es diciéndole al shell que busque el archivo "cuantos" en el directorio actual. Esto se debe a que el directorio actual no está en la lista de los directorios en los que el shell busca para encontrar un determinado comando.

Los directorios en los que el shell busca son /bin, /usr/bin y algunos otros. Están definidos en una variable llamada PATH.

Para poder ver el contenido de la variable PATH, podemos ejecutar desde línea de comandos: echo $PATH. Es importante recalcar que la variable se llama PATH, pero para ver su contenido le agregamos el símbolo $ adelante, este símbolo es un metacaracter de shell, como los vistos anteriormente, y le dice al shell que lo que viene a continuación es una variable.
Variables de entorno

Así como PATH también existen muchas otras variables. Algunas determinadas por el sistema, y otras determinadas por nosotros.

Llamamos entorno al conjunto de variables, como el PATH, el nombre de usuario, el directorio actual, el directorio principal, las preferencias de lenguaje, etc. que determinan a la consola que estamos utilizando. Podemos ver cuales son las variables de nuestro entorno escribiendo: set.

A estas variables de entorno, nosotros podemos agregar nuevas variables. Para ello podemos escribir: variable = valor. Y haciendo echo $variable podremos ver el valor que le asignamos a la variable.

Al ejecutar un programa, este programa recibe una copia de nuestro entorno, donde algunas variables pueden mantenerse (variables exportadas), y otras pueden no estar. Un programa puede modificar las variables que tiene en su entorno, pero no las del entorno anterior. A su vez, dentro de ese programa podemos ejecutar un nuevo programa, que tendrá su propio entorno, con sus propias variables.

Para hacer que los programas hereden las variables que nosotros definamos, existe un comando llamado export, que nos asegura que los programas que se ejecuten, reciban esa variable en su entorno.

Ejemplos

* Crear un script que contenga: echo $variable. Este script, no mostrará nada, ya que la variable no ha sido exportada todavía. Para que el script muestre el valor de la variable, debemos ejecutar, en la línea de comandos: export variable. Al ejecutar el script nuevamente veremos el valor de la variable.
* Crear otro script, que contenga: variable2=valor2; export variable2. Ejecutar el script, y luego, desde la línea de comandos echo variable2. Esto no nos mostrará nada, ya que como se dijo anteriormente, no se puede modificar el entorno anterior.
* Crear otro script, que contenga: cd /; echo $PWD; export PWD. Al ejecutar el script, notar que por más que el echo nos haya mostrado que el cd había logrado cambiar de directorio, al volver del script, permanecemos en el directorio en el que estábamos al ejecutar el script.

Leia Mais…

Orden de preferencia de los símbolos de Bash

A continuación se enumera el orden de preferencia que sigue Bash a la hora de resolver símbolo:

1. Alias.
2. Palabras clave (keywords) como function, if o for.
3. Funciones
4. Comandos internos (p.e. cd o type).
5. Scripts y programas ejecutables, para los cuales se sigue el orden en
que se dan sus directorios en la variable de entorno PATH.

Leia Mais…

Script en Bash Linux

Un script es un fichero que contiene comandos bash ejecutables, los ficheros de configuración de bash como .bash_profile o .bashrc, son ejemplos de scripts.
Para crear un scripts es necesario utilizar algun editor de texto como vi o nano.

Hay 2 formas de ejecutarlo; Una utilizando el comando source fichero cual carga en la memoria de bash y lo ejecuta, y la otra es dando los permisos necesarios y ejecutarlo con ./fichero.

Leia Mais…