Archivo

Archive for 26 mayo 2010

Permisos adicionales

Los sistemas UNIX emplean típicamente tres permisos o modos adicionales. Estos permisos especiales se asignan a archivos o directorios en conjunto, no a cada clase de forma separada (como sucedía con los permisos básicos).

  • Permiso set user ID, setuid o SUID: cuando un archivo que tiene este permiso asignado se ejecuta, el proceso resultante asumirá la ID de usuario efectiva dada a la clase de usuario. El ejemplo típico es el cambio de una clave de usuario: ningún usuario debería poder modificar /etc/passwd/ directamente. La única forma de poder modificarlo debería ser a través del comando correspondiente, que necesariamente tendrá que tener asignado el setuid. Es decir, el comando /usr/bin/passwd ejecutado por un usuario se ejecutará como si lo hubiese invocado el superusuario, de manera de poder modificar /etc/passwd.
  • Permiso set group ID, setgid o SGID: cuando un archivo que tiene este permiso asignado se ejecuta, el proceso resultante asumirá la ID de grupo efectiva dada a la clase de grupo. Cuando el setgid le es asignado a un directorio, archivos nuevos y directorios creados debajo de ese directorio heredarán el grupo de ese directorio, a diferencia del comportamiento por defecto, que es usar el grupo primario del usuario efectivo al asignar el grupo de archivos nuevos y directorios.
  • Permiso de sticky bit (o menos común, bit pegadizo): El comportamiento típico del sticky bit en archivos ejecutables fuerza al kernel a retener la imagen del proceso resultante luego de su terminación. Originalmente, esta era una característica para ahorrar memoria, pero hoy en día, los precios de las memorias han disminuido y exiten mejores técnicas para manejarlo, así que no se lo suele utilizar más para optimizaciones en archivos. En un directorio, por el contrario, el sticky bit previene que los usuarios renombren, muevan o borren los archivos que allí se encuentran, pertenecientes a usuarios otros que ellos mismos, incluso si tienen permiso de escritura en el directorio. Solo el propietario del directorio y el superusuario quedan exentos de esto.

Estos tres permisos (especificables de forma independiente), un bit por cada uno de ellos, permiten 8 combinaciones posibles que se expresan con un dígito en base 8 (del 0 al 7, uno por cada combinación posible) que se antepone al modo de permisos. Así, el modo se ampliaría ahora del 0000 al 7777.

  • = – específica un modo (sobrescribiendo el modo anterior)

Por ejemplo:

chmod +t /home           # agrega permisos de sticky bit al directorio home
chmod g+s /home/grupo    # agrega el setgid al grupo
chmod gu+s /home /grupo  # agrega el setuid y el setgid al usuario y al grupo respectivamente
Anuncios
Categorías:Operador

Integridad de datos con funciones hash

mayo 26, 2010 1 comentario

Los códigos hash de autenticación de mensajes (HMAC) firman paquetes para comprobar que la información recibida se corresponde exactamente con la enviada. Esta característica se denomina integridad. Los HMAC proporcionan integridad mediante un hash de clave, que es el resultado de un cálculo matemático realizado sobre un mensaje con una función (algoritmo) de hash, combinado con una clave secreta compartida. La función hash se describe normalmente como una firma en el paquete. Sin embargo, una función hash es diferente de una firma digital. La función hash utiliza una clave secreta compartida, mientras que la firma utiliza la tecnología de claves públicas y la clave privada del equipo remitente. La firma digital proporciona aceptación, mientras que la función hash no. La aceptación garantiza que se pueda demostrar que una persona específica cuya identidad puede comprobarse ha originado una comunicación. También garantiza que se produjo realmente la comunicación.

Las funciones hash se denominan también funciones unidireccionales porque es sencillo determinar la función hash a partir del mensaje, pero es matemáticamente inviable determinar el mensaje a partir de la función hash. Por el contrario, en las funciones bidireccionales, el mensaje original puede determinarse a partir de su forma convertida. Los sistemas de cifrado y descifrado son ejemplos de funciones bidireccionales.

La función hash es una suma de comprobación criptográfica o un código de integridad de mensaje (MIC) que ambos interlocutores deben calcular para comprobar el mensaje. Por ejemplo, el equipo remitente utiliza una función hash y una clave compartida para calcular la suma de comprobación del mensaje, y la incluye en el paquete. El equipo receptor debe calcular la misma función hash sobre el mensaje recibido con la clave compartida y comparar el resultado con el original (que se incluye en el paquete del remitente). Si el mensaje ha cambiado durante el trayecto, los valores de hash serán diferentes y se descartará el paquete.

Para la integridad, es posible elegir entre dos funciones hash al configurar la directiva:

  • MD5
    Message Digest 5 (MD5) se basa en RFC 1321. MD5 realiza cuatro pases sobre los bloques de datos y utiliza una constante numérica distinta para cada palabra del mensaje en cada pase. El número de constantes de 32 bits que se utilizan durante el cálculo de MD5 produce una función hash de 128 bits que se utiliza para comprobar la integridad.
  • SHA1
    Secure Hash Algorithm 1 (SHA1, Algoritmo de hash seguro 1) fue diseñado por el National Institute of Standards and Technology, como se describe en Federal Information Processing Standard (FIPS, Estándar federal de procesamiento de información) PUB 180-1. El proceso de SHA se basa en gran medida en el de MD5. El cálculo de SHA1 produce una función hash de 160 bits que se utiliza para comprobar la integridad. Las mayores longitudes de hash suponen una mayor seguridad, por lo que SHA es más efectivo que MD5.
Categorías:Operador

/etc/skel

El directorio /etc/skel es bastante simple de configurar y usar. Proporciona una forma de estar seguro de que todos los nuevos usuarios de tu sistema LFS tienen la misma configuración inicial. El directorio /etc/skel es usado por el programa /usr/sbin/useradd.

Para más información, consulta man useradd.

Para empezar, crea un directorio /etc/skel. La mejor forma de hacerlo es como usuario root. Después copia en /etc/skel aquellos ficheros que quieras que cada nuevo usuario tenga en su directorio home. Por ejemplo, .bash_profile, .bashrc, .bash_logout, dircolors, .inputrc, y .vimrc.

Cuando crees un nuevo usuario con /usr/sbin/useradd usa el parámetro -m. Por ejemplo:

useradd -m -s/bin/bash jwrober

El programa /usr/sbin/useradd usa una serie de valores por defecto. Los leerá del fichero /etc/default/useradd, si este existe. Si no existe, entonces utiliza algunos valores internos por defecto, que pueden verse ejecutando /usr/sbin/useradd -D.

Para cambiar estos valores, crea un fichero /etc/default/useradd con los mismos valores que la salida de /usr/sbin/useradd -D. Aquí se muestra un ejemplo.

# Inicio de /etc/default/useradd

GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=
SKEL=/etc/skel

# Fin de /etc/default/useradd

La única cosa que falta en el fichero es un intérprete de comandos por defecto. Añádelo ejecutando:

/usr/sbin/useradd -D -s/bin/bash

Esto sustituirá la línea SHELL= por SHELL=/bin/bash. Este cambio hace incluso más fácil añadir nuevos usuarios a tu sistema LFS. El programa /usr/sbin/useradd tiene muchos parámetros que pueden especificarse en el fichero /etc/default/useradd.

Categorías:Operador

Generar, eliminar y modificar cuentas de usuario

Como tantas otras acciones, la administración de usuarios solamente la puede ejercer el administrador o root.

Cada vez que damos de alta a un usuario estamos creando un registro en

el fichero passwd del directorio etc , con la información más relevante de ese usuario.

El entorno de cada usuario se crea copiando algunos ficheros en el momento de dar el alta. Cada vez que un usuario se presenta al sistema se ejecutan dos archivos de scripts; el primero de ellos es el script profile que es un fichero común a todos los usuarios

que configura el entorno de todos ellos, se encuentra en el directorio etc y el otro script, es el fichero .bash_profile , que configura el entorno de cada uno de los usuarios. Cada usuario tiene el suyo e incluso puede modificarlo, cada vez que el usuario se da de alta es copiado

junto con el .bashrc , bashlogout …. desde el directorio /etc/skel .

Órdenes para la administración de usuarios:

Para administrar usuarios utilizamos:

adduser o useradd : da de alta a los usuarios.

adduser [opciones] nombre_usuario

Algunas de las opciones son:

-u nº : para especificar el número de usuarios por lo general tomará un valor por defecto.

-g nº : especifica el número de grupo principal. Este será el grupo en el que quedará encuadrado este usuario y su utilización principal es para otorgar lospermisos sobre un conjunto de ficheros.

-d directorio : lo utilizamos para especificar el directorio de presentación, aunque por defecto le asignará uno con el nombre /home/nombre_usuario .

-s directorio_de_shell : lo utilizamos para especificar donde se encuentra otro shell que no sea el que haya por defecto.

-e fecha (con este formato: MM/DD/AA) : es utilizado para especificar la fecha en que debe cambiar cada usuario su contraseña caso que el administrador lo decida así.

-c comentario : para incluir un comentario acerca de ese usuario.

usermod : utilizamos este comando para modificar alguna de las características de cada usuario.

Tiene la misma sintaxis que el comando anterior.

Entre los datos que podemos cambiarle tenemos el número de usuario, número de grupo, el directorio, el shell y el comentario con las mismas opciones, además

podemos cambiarle el nombre con la opción -l nuevo_nombre , la asignación de grupos secundarios, con el parametro -G grupo1,grupo2 , con el fin de realizar la administración de archivos.

userdel : es utilizado para eliminar usuarios de la red.

Un usuario lo podemos eliminar de forma definitiva, en cuyo caso no solo es dado de baja del fichero passwd sino que además es eliminado su directorio personal con todos los archivos que pertenecían a él.

userdel -r nombre_usuario

Si solo queremos eliminar de forma temporal un usuario sin eliminar los archivos de su directorio personal, utilizamos la misma sintaxis pero sin el parámetro

-r .

Cambio de contraseñas:

El cambio de contraseñas ha de hacerse con la orden passwd, que te pedirá tu contraseña vieja y, a continuación, la nueva. Volverá a pedir una segunda vez la nueva para validarla y asegurarse que ésta ha sido bien escrita. Si olvidas la contraseña solamente podrá cambiarse desde el usuario root o administrador del sistema.

Comandos para la administración de grupos:

La utilidad de un grupo de usuarios es la de permitir una administración ordenada de permisos sobre un conjunto de archivos. Cada usuario debe tener al

menos un grupo que es el principal, pero podemos agrupar en varios grupos a un mismo usuario. Estos serían grupos secundarios. Cada vez que creamos un grupo, éste es registrado en el fichero group del directorio etc .

Podemos administrar los grupos utilizando una serie de órdenes de un modo muy similar a cómo lo acabamos de hacer con los usuarios.

La orden id Visualiza el grupo o los grupos a los que pertenece un usuario determinado. Muestra el UID (UserID) y el GID (GroupID).

La orden groupadd sirve para dar de alta a un grupo.

groupadd -g número_grupo nombre_grupo

groupdel : es utilizado para suprimir o borrar grupos. Para borrar un grupo, solo se borrara si no existen los usuarios para los cuales este grupo es el

principal.

groupdel nombre_grupo

groupmod : se utiliza

para modificar grupos.

Categorías:Operador

Agregar Usuarios En Linux!

En linux tenemos 3 formas de agregar usuarios, una mediante el comando adduser, otra mediante el comando useradd y la última usando alguna herramienta con interfaz gráfica que tenga instalado nuestro sistema.

La diferencia entre los comandos useradd y adduser es que adduser agrega el usuario de manera interactiva y es un enlace a useradd, si usamos adduser el comando nos solicitará los datos que sean necesarios para agregar el nuevo usuario y si ejecutamos useradd tendremos que hacer algunas de las tareas de agregar un usuario de manera manual o pasándole parámetros directamente.

Cuando se agregan usuarios al sistema se modifican ciertos archivos que a continuación mostramos:

  • /etc/passwd Éste archivo contiene todos los usuarios del sistema y la estructura que guarda es de la siguiente forma

usuario:x:UID:GID:Comentarios:Directorio Home:Shell

Donde usuario indica el nombre con el que el usuario se loguea en el sistema, la x indica que el password se encuentra en el archivo shadow, el ID de ususario, el ID del grupo, siguen comentarios, el directorio home del usuario y el shell que va a usar el usuario.

  • /etc/group Éste archivo contiene todos los grupos existentes en el sistema y los usuarios que pertenecen a los diversos grupos, la estructura que guarda éste archivo es de la siguiente forma:

grupo:x:GID:Lista de usuarios

Donde grupo indica el nombre del grupo creado, x indica que el password se guarda en el archivo shadow, GID es el identificador del grupo y la lista de usuarios es como su nombre lo indica todos los usuarios que pertenecen a ese grupo.

  • /etc/shadow Éste archivo contiene el nombre del usuario, el password y parámetros relacionados al password y cuenta del usuario, la estructura almacenada por el archivo es la siguiente, copio directamente de la referencia que encontrarán al final de este post:

usuario:password:días del último cambio: días antes del cambio:Días después del cambio: tiempo de aviso:dias antes de la inhabilitación: periodo que lleva caducado:reservado:

  • Usuario – Nombre del usuario
  • password – Aquí sí, es el password cifrado.
  • Tiempo del último cambio de password – Pero el tiempo cuenta desde el 1 de enero de 1970, comienzo de la era UNIX.
  • Días antes del cambio – Periodo (en días) donde el password debe ser cambiado.
  • Días después del cambio – En los días después donde debe ser cambiado.
  • Tiempo del aviso – Periodo en el que el sistema tiene que avisar de la necesidad del cambio.
  • Inhabilitación – Días antes de la inhabilitación de la cuenta.
  • Periodo caducado – Días desde el 1 de enero de 1970 en el que la cuenta está deshabilitada.
  • Campo reservado
Estos tres archivos son modificados siempre que se agrega un usuario, existen en lugar de 3 formas como se menciona arriba 4, una es hacerlo todo manual, pero para fines prácticos solo veremos el uso de los dos comandos adduser y useradd y el uso de una herramienta del entorno gráfico.
useradd
El uso de este comando es de la siguiente forma:
useradd -g prueba -d /home/prueba2 -s /bin/bash -m -k /etc/skel prueba2
donde -g indica el grupo al que va a pertenecer el usuario, en este caso el grupo debe de estar previamente creado, si quieren probar pueden usar el mismo grupo de su usuario actual que debe ser el mismo nombre de su usuario, -d indica el home del usuario en este caso /home/prueba2, -s nos indica el shell que va a usar el usuario por defecto, en este caso /bin/bash, -m indica que se cree el directorio en caso de no existir aún, -k indica que se copien los archivos de /etc/skel al directorio home del usuario que se va a crear, éstos archivos son configuraciones iniciales, y finalmente el nombre del usuarioque para éste ejemplo es prueba2.
adduser
Éste comando es una forma más fácil de crear usuarios, su uso es muy simple, solo ejecutamos en la terminal adduser nombreUsuario y se ejecutarán los pasos necesarios para la creación de un nuevo usuario tal y como se ve en el siguiente ejemplo:
root@Ubuntu:~# adduser prueba3
Añadiendo usuario ‘prueba3′ …
Agregando nuevo grupo `prueba3′ (1001) …
Agregando nuevo usuario `prueba3′ (1001) con grupo `prueba3′ …
Creando el directorio personal ‘/home/prueba3′ …
Copiando archivos desde ‘/etc/skel’ …
Introduzca la nueva contraseña de UNIX:
Vuelva a escribir la nueva contraseña de UNIX:
passwd: contraseña actualizada correctamente
Cambiando la información de usuario para prueba3
Introduzca el nuevo valor, o presione ENTER para el predeterminado
Nombre completo []:
Número de habitación []:
Teléfono del trabajo []:
Teléfono de casa []:
Otro []:
¿Es correcta la información? [y/N] y
root@Ubuntu:~#
Entorno Gráfico
Si no te gusta la consola también puedes hacer uso de herramientas gráficas que vienen junto con tu distribución preferida, en este caso veremos una que viene con ubuntu, a continuación la pantalla principal:
Categorías:Operador

Procesos

Procesos

Para poder entender bien el concepto de Proceso deberemos diferenciarlo en el lugar donde se encuentra. Un programa será un archivo cuando se encuentre en el disco rígido y será un proceso al encontrarse en memoria; de esta forma se comprenderá mejor que es un Proceso. Pero también es cierto que un proceso es mucho mas que un programa en memoria y sobre todo en la clase de SO que nos compete, con sus funciones de multiusuario y multitarea como lo son los SO Un*x.

Cada programa cuenta con un conjunto de datos que usa para hacer su trabajo y en la mayoría de los casos estos datos no forman parte del programa. Como ejemplo tomemos un programa de edición de textos. Los datos del archivos que el programa esta editando no forma parte del programa, pero si del proceso en memoria. Si alguna otra persona utilizara al mismo tiempo el mismo procesador de texto que se encuentra en ese sistema, los dos estarían utilizando el mismo programa, pero no el mismo proceso. Ambas tendrían una copia para cada uno del proceso del editor de texto. Es así que los programas podrán ser únicos para todos los usuarios, pero los procesos pertenecerán a cada usuario.

En Un*x varios usuarios podrán estar utilizando el sistema al mismo tiempo. Esto se traduce a que el sistema tendrá múltiples procesos cargados en la memoria, y cada uno de ellos requerirá de la atención de la CPU en algún momento. El sistema llevará un control de los procesos que están funcionando en ese momento, en que terminal y a que usuario pertenece además de otros datos. Todo ello estará apuntado en una tabla de procesos, en la cual el SO asignará el tiempo que tardará la CPU para atender cada proceso.

Cuando uno entra a un sistema Un*x, generalmente obtiene accesos a lo que se denomina intérprete de comandos. La gente que haya utilizado DOS sabrá que esto, ya que el C:> es el indicador de shell de su interprete de comando, el COMMAND.COM. En cambio, aquí el indicador será algo como $, # o %. Este shell es un proceso que esta corriendo y pertenece al usuario que esta corriéndolo en ese momento. En realidad es una copia del intérprete de comandos que esta corriendo en memoria.

Al cargarse un programa desde el intérprete de comando (shell), este no es reemplazado por dicho proceso, sino que queda a la espera de algún otro mandato. Mientras tanto, para correr el programa, se crea un nuevo proceso, el del programa, que será hijo del proceso del shell. Un proceso tiene un solo padre pero puede tener múltiples hijos.

Al iniciar una sesión en GNU/Linux el usuario será propietario de un único proceso, por ejemplo /bin/bash que es el intérprete de comandos mas usados y el que usaremos nosotros. Luego cada proceso que ejecute a partir del bash, se acomodará en el árbol de procesos como hijo del bash.

El bash permanecerá atento a que se le de un nuevo mandato, mientras tanto se dice que esta durmiendo. Como habíamos dicho antes, múltiples procesos podrán estar ejecutándose al mismo tiempo. Por ello se tendrá que asignar un tiempo a cada proceso para recibir la atención exclusiva la CPU. Es común que cada proceso tenga por 1/100 segundos la atención total de la CPU. Esto dará la ilusión al usuario de que es el único que tiene la atención del sistema, pero que ocurriría si el proceso se colgase. En un sistema monousuario como el Windows (no el NT) esto seguramente ocasionaría el cuelgue del sistema ya que el kernel no podría recuperarse dado que el proceso tiene control absoluto de la CPU. Esto no ocurre en GNU/Linux dado que todos los procesos responden al kernel y es el kernel quien les da permiso de usar la CPU en el momento necesario.

Supongamos que queremos guardar nuestro trabajo del editor de textos. Entonces, y con la combinación de teclas correctas, le damos la orden al proceso del editor de textos para que guarde el trabajo. Esto, para nosotros, se hace instantáneamente pero es solo otra ilusión. El proceso del editor de textos emite una petición al kernel para escritura del disco, el kernel entonces escribirá el disco en bloques, dependiendo de cuan libre este, mientras tanto guardara los datos en un espacio secundario de almacenamiento denominado “cache”. Esto es beneficioso por varias razones. En caso de que los datos que estemos escribiendo en ese momento sean requeridos un momento después, estos estarían disponibles en el cache y se ahorraría un viaje al disco. También seria beneficioso por el lado de la eficiencia del sistema, ya que escribirá al disco solo cuando el procesador este ocioso, no ocasionando con el proceso de escritura que el sistema funcionara más lentamente. Suponiendo que alguna otra persona necesitara en ese momento un dato del disco, el proceso de lectura tendría que esperar su turno, entonces es puesto a dormir. El proceso tendrá que esperar a que se termine el tiempo asignado al proceso de escritura y luego se le despertara y podrá tomar su lugar para acceder al disco.

Existe también otro tipo de eventos en los que la CPU repara para poder detener a un proceso en curso, estos son las interrupciones. Se ocasionan cuándo un dispositivo, léase mouse o teclado, requiere la atención de la CPU, es asi que se genera una interrupción que la CPU atenderá, mandando a dormir al proceso en curso. Por supuesto hay mas complicaciones que las expuestas aquí, entre ellas las prioridades de los procesos que se verán cuando tomemos la parte de 6.7 de Tareas y Procesos. El tema de prioridades lo maneja el kernel de acuerdo a varios aspectos, como el dueño del proceso, si es de sistema o no, etc. Los procesos de sistemas son utilizados para la administración de memoria y la calendarización de turnos para la CPU, etc. Estos procesos se los conoce como daemon (DEMONIOS) o programas servidores. Funcionan sin la intervención del usuario y sin que este los vea y hacen su trabajo esperando su turno cuando les llega para actuar.

Categorías:Introduccion, Script

KON-BOOT: accede a cualquier equipo sin conocer la contraseña

En alguna ocasión podemos encontrarnos en una situación en la que necesitamos entrar a nuestro propio sistema y no recordamos la contraseña que le pusimos. Por ejemplo, si acabamos de cambiarla y es completamente nueva para nosotros. En otras ocasiones hemos hablado de John the Ripper y Trinity Rescue Kit pero en esta ocasión vamos a tratar una herramienta mucho más fácil de manejar como es Kon-Boot.

Kon-Boot es un software gratuito que nos permite acceder a cualquier equipo sin conocer la contraseña y sin tener que eliminarla o cambiarla, ya sea de Windows o de Linux. Su funcionamiento está basado en el cambio del contenido del kernel durante el arranque del sistema y ocupa solamente 110 KB.
Si no lo has probado todavía, estás tardando. Simplemente es ¡espectacular!

Kon-Boot funciona entre otros en los siguientes sistemas (para ver el listado completo y detallado visita la página oficial):

  • Windows: XP, Vista Ultimate y Business, 7, Server 2008 y 2003.
  • Ubuntu, Debian, Gentoo y Fedora (GRUB 0.97)

Los pasos para entrar a cualquier equipo sin conocer la contraseña son los siguientes:

  1. Descargamos la imagen ISO desde la página oficial de Kon-Boot y la grabamos en un CD.
  2. Arrancamos el equipo con el CD de Kon-Boot y nos aparece la siguiente pantalla de presentación. Para seguir adelante, tendremos que pulsar la tecla Intro.
    Pantalla de bienvenidaPantalla de bienvenida

  3. A continuación veremos algunos mensajes mientras se inicia el Kon-Boot. En estos mensajes se nos informará, entre otras cosas, de la versión de Kon-Boot y que es gratuito para uso no comercial.
    Arrancando con Kon-BootArrancando con Kon-Boot

  4. El resto del arranque se realizará de forma completamente normal. Sin embargo, cuando arranque nuestro sistema podremos entrar a él sin conocer la contraseña.
    • Windows: hacemos clic en el nombre de usuario con el que queramos acceder y entraremos ¡sin conocer la contraseña! Aunque el usuario tenga contraseña, no nos la pedirá.
      Entramos a Windows sin contraseñaEntramos a Windows sin contraseña

    • Linux: tenemos que acceder en modo consola por lo que pulsamos la combinación de teclas Control+Alt+F1 (o cualquier otra desde F2 a F6). Y como nombre de usuario tecleamos kon-usr. Y sin pedirnos tampoco en esta ocasión la contraseña, también estaremos dentro como root.
      wwEntramos a Ubuntu como root sin contraseña

Espero que sea de utilidad.

Extraido

http://sliceoflinux.com/2009/05/06/kon-boot-accede-a-cualquier-equipo-sin-conocer-la-contrasena/

Categorías:Seguridad