viernes, 29 de abril de 2022

04 - Scripts predeterminados

Existen 4 ficheros de texto ejecutables y personalizables predeterminados que el sistema operativo ejecuta de forma automática cuando se dan ciertas condiciones. Estos scripts, una especie de guiones que contienen órdenes y estructuras son interpretados por el Shell.

Podemos modificarlos con cualquier editor de texto e incluir cualquier orden de la línea de comandos que se ejecutará en el momento que lo haga el script


~/.bashrc

  • Es un fichero oculto que se encuentra el el home de cada usuario, que es de su propiedad y que puede modificar.
  • Se ejecuta cada vez que su propietario abre un terminal bash
  • Se usa para personalizar configuraciones de un usuario específico: crear alias, cambiar el prompt, definir funciones nuevas, etc
/etc/bash.bashrc

  • Es un fichero de configuración general propiedad del root que solo el root puede modificar.
  • Se ejecuta cada vez que cualquier usuario abre un terminal bash
  • Se usa para personalizar la configuración de todos los usuarios
~/.profile

  • Es un fichero oculto que se encuentra el el home de cada usuario, que es de su propiedad y que puede modificar.
  • Se ejecuta cada vez que su propietario inicia sesión
  • Se usa para personalizar configuraciones de un usuario específico.
/etc/profile

  • Es un fichero de configuración general propiedad del root que solo el root puede modificar.
  • Se ejecuta cada vez que cualquier usuario inicia sesión
  • Se usa para personalizar la configuración de todos los usuarios.
Importante: En caso de que un fichero de configuración general entre en conflicto con uno específico hay que tener en cuenta que primero se procesa el general y a continuación el específico

lunes, 25 de abril de 2022

03 - Permisos Linux

En Linux todos los archivos pertenecen a un usuario y a un grupo. Cuando un usuario crea un nuevo archivo se asocia al mismo de forma automática un usuario y un grupo propietario. El usuario es el creador del archivo y el grupo propietario es el grupo principal al que pertenece el usuario que lo crea también conocido como grupo propietario

Ej. Si el usuario jperez cuyo grupo principal es profesores crea un nuevo archivo, este tendrá como usuario y grupo propietario a jperez y profesores respectivamente. 

chown

Permite cambiar el usuario y grupo propietario de un archivo. Por seguridad, sólo lo puede ejecutar el root y necesita permisos de escritura sobre el archivo

¿Cuáles son los Permisos?

El primer carácter indica el tipo de archivo en cuestión. Los 9 caracteres que le siguen representan los permisos y se leen en grupos de 3 de la forma siguiente: Los 3 primeros corresponden a los permisos que tiene el usuario propietario (el que crea el fichero normalmente). Los 3 siguientes corresponden al grupo propietario (el grupo principal al que pertenece el usuario). Los últimos 3 caracteres representan los permisos de todos los demás usuarios

ls

El comando ls permite listar los permisos de ficheros y directorios.
Tipos de archivos comunes







 




r - Permiso de lectura

Sobre un fichero: Significa que puede ser leído o visualizarlo mediante comandos o aplicaciones.

Sobre un directorio: Significa que se puede listar el contenido de la carpeta mediante comandos o aplicaciones

w - Permiso de escritura

Sobre un fichero: Se puede modificar su contenido o borrarlo mediante comandos o aplicaciones. 

Sobre un directorio: Se pueden crear y eliminar archivos y otras carpetas dentro de ella mediante comandos y aplicaciones. 

x - Permiso de ejecución

Sobre un fichero: Se puede ejecutar el fichero. 

Sobre un directorio: Se puede atravesar el directorio mediante comandos y aplicaciones

¿Cómo funcionan los permisos?

En principio, solo el usuario propietario de un fichero puede cambiar los permisos del mismo aunque el superusuario root puede modificar los permisos de cualquier archivo ya que tiene acceso total sin restricciones a la administración del sistema.

El esquema es bastante simple, hay tres grupos de permisos conocidos como UGO por las iniciales de los tres entidades a los que hace referencia: usuario, grupo y otros y el dueño del archivo configura estos permisos para estas tres entidades de acuerdo a sus necesidades.

Cualquiera que pertenezca al grupo propietario (grupo principal al que pertenece el dueño del archivo) disfrutará de los permisos que estén configurados en la zona  Group.

El resto, Other, se refiere a cualquier otro usuario que no sea ni el usuario propietario ni forme parte del grupo propietario.
Correspondencia octal de permisos
Según este esquema no es posible asignar permisos sólo a un usuario concreto o a un grupo concreto que no sea el grupo propietario. Para ello existe un mecanismo que implementa una extensión del clásico sistema de permisos UGO conocido como ACL o listas de control de Acceso que si permite asignar permisos a usuarios o grupos concretos

También veremos pronto que existen además de los permisos clásicos otros permisos denominados permisos especiales [Sticky Bit, SUID y SGID] que confieren ciertas funcionalidades muy específicas y que son importantes para comprender como funciona el sistema.

chmod

Es el comando que se utiliza para modificar los permisos y que puede realizar las operaciones utilzando dos notaciones diferentes: octal o simbólica

Notación simbólica

Notación octal

Ejemplo de uso






La Máscara predeterminada

Cuando se crea un archivo en Linux por medio de comandos (mkdir, touch, tee, etc) o de forma gráfica el sistema le asigna unos permisos por defecto que son siempre los mismos, a saber:
  • 666 si es un fichero
  • 777 si es un directorio
La máscara es un número que afecta (enmascara) estos permisos por defecto y los transforma en los permisos finales o permisos efectivos que acaban teniendo los ficheros o directorios en el momento de crearlos. 
  • 002 es la máscara de usuario predeterminada
La máscara de usuario predeterminada en Ubuntu 20.04 es 002 mientras que la de root es 022. Se puede cambiar a nivel de usuario particular, incluso para todos lo usuarios.
 
umask

Comando que permite consultar y modificar la máscara. 
Se puede fijar la máscara por defecto para todos los usuarios o solo para un usuario concreto
[Consultar entrada siguiente]

Comprendiendo el funcionamiento de la máscara

Sólo se necesita conocer la fórmula siguiente, donde el complemento a 1 de la máscara consiste en invertir la máscara y el operador && es el operador lógico AND. 

Permisos efectivos = Permisos por defecto && Complemento a 1 de la máscara

Veamos un ejemplo, averigua los permisos efectivos de ficheros y directorios si la máscara está definida en 136
  • Expresamos la máscara en octal
136 en octal es 001 011 110
  • Calculamos el complemento a 1 de la máscara
110 100 001
  • Hacemos el AND lógico entre los permisos por defecto de los ficheros y el complemento a 1 de la máscara
ficheros: 666 = 110 110 110  
110 110 110 && 110 100 001 = 110 100 000 = 640 
  • Hacemos el AND lógico entre los permisos por defecto de los directorios y el complemento a 1 de la máscara
directorios: 777 = 111 111 111  
111 111 111 && 110 100 001 = 110 100 001 = 641

Según nuestros cálculos, con una máscara definida en el sistema de 136 los ficheros que cree el usuario deben salir con permisos efectivos 640 mientras que los directorios que cree saldrían con 641. Ahora sólo queda probarlo en una consola.

lunes, 18 de abril de 2022

02 - Sistema de archivos

Un sistema de archivos establece el modo en el que se organiza la información dentro de una partición. Existe un gran número de sistemas de archivos distintos. En las versiones actuales de Ubuntu, el sistema de archivos que se utiliza de forma mayoritaria es ext4, pero en la instalación del sistema se pueden elegir más opciones.

ext4 es un sistema transaccional (journaling)

Cuando el sistema de archivos necesita realizar una operación de disco, se guardan en un registro los cambios que se harán en la estructura del directorio, archivos implicados y bloques de disco, lo que permite al sistema deshacer los cambios si la operación no transcurre de forma satisfactoria debido a cualquier fallo (ext3 también soporta journaling).

ext4 soporta volúmenes más grandes, reducen la fragmentación, mejoran el rendimiento con archivos de gran tamaño, mejora la velocidad de lectura y escritura en disco y disminuye el consumo de tiempo de procesador, entre muchas otras características.

Linux trabaja con un sistema de archivos jerárquico con un único directorio raíz (a diferencia de Windows).

En Linux todo es un archivo, discos, USB, DVD, ratón, terminales, etc. y para poder acceder a ellos es necesario su montaje aunque la mayoría de sistemas actuales se encargan de automatizar el proceso.

Particionado recomendable

==> haz clic en el enlace

Directorio root

Es el directorio raíz del sistema y se simboliza por la barra inclinada hacia la derecha /. De este directorio cuelgan todos los demás directorios y subdirectorios del sistema. En general hay una serie de directorios colgando del raíz comunes en todas las distribuciones que son necesarios para el funcionamiento del núcleo.

/boot

Contiene una imagen del kernel e información de arranque del sistema operativo crítica

  • vmlinuz: es el kernel comprimido y booteable
  • initrd: o initial ramdisk, una especie de sistema de archivos raíz temporal en memoria que se usa como parte del proceso de arranque
  • grub: Grand Unified Bootloader, es el gestor de arranque, un software que carga el kernel iniciando el sistema   

/etc

Contiene archivos de configuración tanto a nivel de componentes del sistema operativo en sí, como de los programas instalados a posteriori (no contiene binarios). Por poner algún ejemplo

  • passwd: almacena la información de las cuentas de los usuarios
  • sources.list: contiene la lista de repositorios de confianza del sistema
  • netplan: aloja los ficheros de configuración de interfaces de red (a partir de la v18)  

/dev

(device) Contiene los dispositivos y enlaces a sus controladores e interfaces, por ejemplo particiones de disco, cdrom o terminales

/home

Aloja los subdirectorios que corresponden a los usuarios del sistema. En cada uno de esos subdirectorios se almacena el perfil de los diferentes usuarios que incluye sus datos y configuración personalizada

Puede resultar conveniente alojar /home en una partición independiente.

Hay que resaltar que el home del superusuario root es /root y es independiente de esta carpeta

/media

Es el directorio donde se montan, de forma automática normalmente, los sistemas de almacenamiento extraíbles cuando se conectan o utilizan, por ejemplo una unidad usb o una unidad CD/DVD. Habitualmente aparece un directorio nuevo dentro de /media que permite al usuario acceder al contenido del dispositivo en cuestión.

Existe también el directorio /mnt donde el usuario puede montar sistemas de archivos temporales cuando es necesario 

/bin  /sbin

Incluyen los binarios del sistema (ejecutables) de los usuarios normales y del superusuario respectivamente.

01 - GNU/Linux

Un poco de historia 
[Fechas aproximadas]

En los años 70

Unix era el sistema operativo de referencia, se distribuía su código fuente a Universidades y empresas y no se explotaba comercialmente. También el software era libre y la comunidad se encargaba de su mantenimiento. Unix, escrito en ensamblador se reescribe en lenguaje C y se extiende de forma imparable al poder instalarse en todas las arquitecturas

En los años 80

Coincidiendo con el PC, Unix cierra su código y comienza a comercializarseLas empresas obligan a sus programadores a firmar acuerdos de no revelación, por los que se comprometían a cerrar el código. Se comercializa el software pero ya no se facilita su código fuente.


RICHARD STALLMAN

gurú de programación, comienza su proyecto GNU (GNU is Not Unix)porque no quiere subirse al tren de los cambios hacia el que se dirige el software. La idea es crear un SO similar a Unix, de libre distribución y con acceso a su código fuente. Se propone extender el proyecto a toda la comunidad y para ello crea:
  • La licencia Pública General (GPL) y el Copyleft (opuesto al copyright), que garantiza la libertad de uso, copia y modificación, y obliga a distribuir el código fuente junto con los ejecutables.
  • Comienza a construir el compilador GNU para el lenguaje C (GCC), verdadera pieza clave en el desarrollo del sistema. Actualmente, es capaz de trabajar con 7 lenguajes de programación diferentes (Java, Ada, Fortran, …)
  • Fundación para el software libre (FSF), para dar cobertura legal al proyecto y canalizar las ayudas económicas defendiendo los derechos de los usuarios a copiar, estudiar, modificar y redistribuir los programas informáticos.

En los años 90

GNU estaba casi completo pero faltaba lo esencial: el Kernel. El Kernel sobre el que se había estado trabajando, GNU Hurd, no daba los resultados esperados.

TANENBAUM Y LINUS

Inspirándose en Minix, un pequeño clon de Unix escrito con fines didácticos por el profesor Tanenbaum, Linus Torvalds, estudiante finlandés de 21 años, desarrolla como proyecto fin de carrera un núcleo compatible con Unix, que denominó Linux y pasó  a ser el primer kernel libre y operativo.

GNU encuentra la pieza que le faltaba para independizarse por completo resultando un SO libre completo cuyo nombre correcto es GNU/Linux. El SO no es sólo el núcleo, sino muchas otra piezas de software que se escribieron con anterioridad sin las que hubiera sido imposible tener algo funcional e incluso construirlo.

El resto ya lo conocemos, en 1996 ve la luz el kernel 2.0.0 ya asociado con la mascota del pingüino, Tux. En la actualidad el kernel Linux está disponible para un gran variedad de arquitecturas y goza de un gran prestigio en la comunidad informática como fiable, sólido y seguro.

Kernel

Recordando la primera evaluación, el núcleo interacciona con el hardware del ordenador a través de una  capa de abstracción de hardware que funciona como interfaz entre software y hardware y permite que las aplicaciones sean independientes del hardware donde se ejecutan (Hardware Abtraction Layer, HAL). El kernel se encarga de funciones imprescindibles como administrar la memoria, planificar la CPU o administrar el sistema de archivos y los periféricos entre otras.

Capa de Abstracción Hardware del Kernel

Distribuciones GNU/Linux

Por su propio espíritu el Software libre se ramifica en una serie de comunidades de usuarios y programadores aglutinados en torno a proyectos surgidos de necesidades concretas. Todos estos proyectos necesitan de un trabajo de coordinación que permita integrar diferentes componentes del SO, Kernel, Librerías, Aplicaciones de usuario, Entorno gráfico, etc.

Una distribución es por tanto un sistema GNU/Linux que integra un kernel, un conjunto de aplicaciones de sistema y una colección de programas de usuario listo para instalar.

Existen en torno a 600 distribuciones Linux para escritorio, servidores y empresas, algunas de las cuales son muy conocidas ya, por ejemplo

Debian 

Con excelente calidad tecnológica y el prestigio de ser la distribución libre por excelencia, alejada de intereses comerciales y en el mejor espíritu del proyecto GNU y la FSF.

Ubuntu

Basada en Debian, ha ido sumando usuarios hasta convertirse a día de hoy en una de las mejores y más populares versiones de GNU/Linux. Tiene otras versiones oficiales como Edubuntu o Xubuntu para entornos educativos o maquinas con pocos recursos.

RedHat, Fedora, Mandriva, Slackware o Suse

¿Por qué Linux?

Código abierto
Se pueden reutilizar fragmentos de código de cualquier programa o incluso modificar el programa para las propias necesidades. Leer código es una buena forma de aprender a programar.
 
Soporte más amplio
En la red existen grupos de usuarios muy activos y organizados que se ayudan entre sí. Si uno tiene un problema puede dirigirse a ellos para tratar de resolverlo.

Auditable y Resistente a virus
Como se puede ver el código fuente nadie puede colarnos una puerta trasera con propósitos no declarados.

Reutilización de equipos
Siempre existen distribuciones que permiten volver operativos con un alto nivel de productividad equipos que se van quedando atrás

Seguridad y fiabilidad
No se puede dañar el sistema fácilmente lo que reduce  mucho el mantenimiento continuo