miércoles, 20 de mayo de 2020

11 - Permisos especiales

t (sticky bit)

Cuando se lo asignamos a un directorio, conseguimos que los elementos que haya dentro, ficheros ó directorios, sólo puedan ser renombrados o borrados por su propietario o por el root. El resto de usuarios que tenga permisos de lectura y escritura sobre dichos elementos podrá leer y modificar pero no borrar.

Se suele aplicar a directorios de acceso público que tienen todos los permisos asignados, como por ejemplo directorios temporales como /tmp ó /var/tmp

Creación de un directorio con sticky bit

El bit t se activa o desactiva empleando notación simbólica de la siguiente manera:
chmod +t directorio ó chmod -t directorio. Empleando notación octal se haría sumando 1000 a los permisos del directorio, chmod 1777 directorio
Sticky bit notación simbólica
Observación

Antiguamente se usaba para mantener la imagen de un ejecutable en memoria después de finalizar la ejecución del mismo pero con los avances en el hardware ya no se usa para esta función.

s (suid)

Cuando a un binario se le asigna el atributo s a nivel de usuario, los usuarios normales pueden ejecutarlo y obtener los privilegios del usuario propietario del ejecutable (por lo general root).

Expresado de manera técnica, el permiso especial suid aplicado sobre un binario a nivel de usuario provoca un cambio de dominio durante la ejecución haciendo que el usuario efectivo del binario sea el propietario del fichero y no el usuario que lo ejecuta.

Se activa o desactiva este bit empleando la notación simbólica de la siguiente manera: chmod u+s binario ó chmod u-s binario. También de forma octal se puede expresar sumando 4000 a los permisos del archivo: chmod 4755 binario


Suid notación simbólica y octal
Ejemplo

Supongamos que el ejecutable micat propiedad del root puede ser usado para leer ficheros por cualquier usuario. Si se le aplica el suid a este ejecutable, cualquier usuario podría leer ficheros del root a través de dicho binario sin tener permisos sobre esos ficheros. Veámoslo

Se copia un binario propiedad del root y se crea un fichero en /tmp al que se le quitan los permisos. 

Se comprueba, como lógicamente, el usuario asir tiene denegado el acceso al fichero.

Ahora se activa el bit s a nivel de usuario sobre el binario y se comprueba que está activado

Con el suid activado, asir ahora si tiene acceso al fichero (a través del binario únicamente)

s (sgid)

Cuando a un binario se le asigna el atributo s a nivel de grupo, los usuarios que pertenezcan a ese grupo pueden ejecutar ese archivo y obtener los privilegios del grupo propietario del ejecutable.

Expresado de manera técnica, el permiso especial suid aplicado sobre un binario a nivel de grupo provoca un cambio de dominio durante la ejecución haciendo que el grupo efectivo del binario sea el grupo propietario del fichero y no el grupo del usuario que lo ejecuta.

Se activa o desactiva este bit empleando la notación simbólica de la siguiente manera: chmod g+s binario ó chmod g-s binario. También de forma octal se puede expresar sumando 2000 a los permisos del archivo: chmod 2755 binario


Sgid notación simbólica y octal

sgid sobre Directorios

En el caso particular de aplicar el bit s a nivel de grupo sobre un directorio, los efectos son que a la hora de crear ficheros en ese directorio, el grupo propietario con el que salen por defecto dichos ficheros no será el grupo propietario del usuario que los crea, como debería ocurrir en situación normal, sino que será el grupo propietario del directorio que los contiene. O sea que se produce de nuevo un cambio de dominio en el grupo propietario, esta vez permanente claro.

martes, 12 de mayo de 2020

10 - Enlaces simbólicos y Enlaces duros

Estructura de archivo

Los archivos y directorios están formados básicamente por tres elementos:
  • los datos: es la propia información del archivo y en el caso de un directorio un listado de nombres a mas archivos y/o directorios.
  • el i-nodo: es una estructura de datos que almacena información sobre el fichero o directorio y que se identifica por el número de i-nodo que es un número entero único. El i-nodo almacena metadatos como el tamaño, UID, GID, número de enlaces, etc.
     
  • el nombre de archivo o directorio asociado al i-nodo.

El tercer punto es interesante porque es posible crear varios nombres que estén asociados a un mismo i-nodo que obviamente apunta a los mismos datos.


Información que contiene un inodo

Cada uno de los diferentes nombres asociados a un mismo i-nodo se denomina Enlace duro o físico (Hard Link) y tiene como gran ventaja que si borramos el archivo original (el primero que se creó), si existen otros Hard Links, sus datos siguen estando accesibles a través de ellos porque son nombres que apuntan al mismo i-nodo. Esto solo funciona con archivos y no con directorios.

Existe otro tipo de link conocido como Enlace blando ó simbólico (Symbolic o Soft Link) que es un nombre asociado a una ruta completa de otro archivo o directorio y no al i-nodo de los datos (por lo tanto posee un i-nodo diferente). Este tipo de link es similar a un archivo de acceso directo de Windows, es decir, si borras el archivo original, el link deja de funcionar.

Para crear links se utiliza el programa ln.
  • para hard: ln original destino
  • para soft: ln -s original destino

Diferencia gráfica entre Enlace simbólico y duro, N1 y N2 son i-nodos diferentes

Entendiendo el funcionamiento


Vamos ahora a comprobar de forma práctica la teoría:


Mostrando inodo del fichero original.txt


Creando un enlace duro y otro blando (simbólico) al fichero anterior. El enlace duro y el fichero original comparten el mismo i-nodo y ambos apuntan a los mismos datos, sin embargo el enlace blando tiene un i-nodo diferente porque apunta a la misma ruta del archivo original no a los datos.

El contenido de los tres ficheros es el mismo. Si borro el fichero original el enlace duro no se altera porque es independiente y sigue apuntando a los mismos datos, pero si borro el simbólico como apuntaba a la propia ruta del original y ya no existe deja de estar disponible. 







Si volvemos a crear el fichero original con otro contenido, el enlace simbólico vuelve a funcionar ya que la ruta a la que apunta vuelve a existir, eso si ahora el contenido es el del nuevo fichero. El enlace duro no se ve afectado por esta última operación y sigue manteniendo el i-nodo original y por tanto su contenido


Con el comando find y la opcion -inum podemos buscar archivos por su número de inodo o tambien buscar con la opción -type enlaces simbólicos















Observaciones


  • A través de los enlaces (duros y blandos) podemos modificar la zona de datos del fichero al que apuntan.
  • Los enlaces simbólicos se pueden hacer con ficheros y directorios mientras que los duros solo entre ficheros.
  • Los enlaces simbólicos se pueden hacer entre distintos sistemas de ficheros o volúmenes, los duros no.
  • Los enlaces duros comparten el número de i-nodo, los simbólicos no.
  • Los enlaces simbólicos pierden su significado si se borra el fichero al que apuntan, en cambio en los enlaces duros, los datos siguen estando accesibles mientras exista al menos uno.
  • Los enlaces duros son el mismo i-nodo, es decir nombres diferentes para los mismos datos, los simbólicos son ficheros distintos con otro i-nodo cuyos datos apuntan al nombre del fichero.
  • Los enlaces simbólicos aparecen con los bit de permisos todos encendidos dado que no son usados ya que los permisos efectivos son los del archivo al que se esta apuntando.

Uso de los enlaces


Los
enlaces duros permiten crear enlaces con distintos permisos o propietarios para acceder a los mismos datos. De esta forma, por ejemplo, un enlace puede permitir acceso de escritura, mientras que otro ofrezca sólo de lectura, pudiéndose crear distintas combinaciones para distintos grupos o usuarios.

Los enlaces blandos permiten abreviar rutas y enlazar ficheros y directorios desde cualquier parte, por ejemplo en programación son ampliamente usados para las librerías compartidas.

09 - Resetear Contraseña

Método 1, sin livecd

El procedimiento para resetear la contraseña del usuario con privilegios o root consiste en arrancar en modo recovery (tecla Esc) pero modificando ciertos parámetros de la línea de carga de la imagen linux.

En concreto hay que reemplazar la cadena:       ro recovery nomodeset



                                                        por:       rw init=/bin/bash



El núcleo del sistema arranca inicialmente el disco en modo lectura y posteriormente después de que ciertos procesos comprueban la integridad del mismo se modifica a lectura-escritura.

La línea que acabamos de reemplazar permite acceder al disco en modo lectura-escritura y desde una shell que controla el root (tanto si tiene como sino clave asignada en entorno gráfico). Estamos por tanto en disposición de modificar cualquier contraseña que queramos.





Método 2, con livecd

Arrancamos con la iso de Ubuntu y marcamos Probar Ubuntu sin instalar
Comprobamos con fdisk la partición dónde está instalada el sistema



Creamos un punto de montaje y montamos la partición del sistema



Para terminar usamos el comando chroot para abrir un shell sobre la partición que acabamos de montar con el usuario root. Ya estamos en disposición de cambiar la contraseña. 




Conclusiones:

Es muy importante proteger el grub pero también blindar la máquina para que no pueda ser arrancada desde otros medios (cd, usb,..). Si no lo hacemos estamos expuestos a que cualquier usuario malintencionado tenga acceso a la información o destruya el sistema.

Notas:
- El "=" en la máquina virtual lo podemos sacar pulsando Ctrl+Alt+61.
- Podemos cargar el teclado español desde consola con  loadkeys es