Núcleo, Shell, estructura de directorios y permisos

Núcleo, Shell, estructura de directorios y permisos 2/60

Esta segunda entrega del curso de Linux en Español esta desarrollada para que puedas conocer y familiarizarte con el sistema operativo Linux, de esta forma Linux ya no será un desconocido para ti, al contrario al conocer todas sus partes lograrás el dominio sobre este gran sistema, si aun no le has dado lectura al tema anterior puedes ir a Curso online gratis, si ya lo has hecho acompáñanos en esta gran aventura.

Para que puedas conocer a fondo el sistema Linux lo dividiré en sus partes básicas y explicaré que función cumple cada una de ellas, estas son las siguientes:

  • Núcleo de Linux.
  • Shell de Linux.
  • Directorios, estructuras de directorios.
  • Sistemas de archivos.

Núcleo de Linux

Linux es un núcleo de sistema operativo cuyo desarrollo comenzó en 1991 en manos de Linux Torvalds, tres años después y gracias a la ayuda de una gran comunidad de desarrolladores, se libero la versión 1 del código fuente. Esta versión 1 se libero bajo la licencia GPL de free software foundation la cual es la cuna del proyecto GNU, que es una distribución de software libre.

¿Que se puede hacer con la licencia GPL?

Se puede usar el software como quieras, además lo puedes adaptar a tus propias necesidades, además de eso lo puedes copiar sin restricción y lo puedes redistribuir, y cuando lo mejores puedes o compartir estos cambios con comunidad.

Después de 1995 lo único que ha hecho Linux en estos 20 años a sido ir para arriba. Ahora es uno de los sistemas operativos preferidos para ambientes de red e Internet. Pero entonces tu dirás “pero si la mayor base instalada es Windows”. Tienes razón... pero no caes en cuenta que probablemente en tus bolsillos tengas un teléfono corriendo Linux, y que probablemente donde tengas tu blog o tu página web este corriendo en un servidor Linux, y que tu router puede tener Linux y no te lo pierdas hasta la BIOS de tu ordenador, si, puede que corra un Linux. “loco no....?” Pero por eso hay que replantear eso de la mayor base instalada.

Kernel monolítico

Como ya hemos visto el kernel de Linux es un sistema monolítico es decir que todos sus componentes están en un solo paquete y este establece procedimiento de llamadas hacia el resto de los procesos del sistema corriendo en un área restringida el cual estos no pueden acceder directamente.

MicroKernel

El microkernel trabaja igual pero tiene sus diferencias. El microkernel minimiza la labor del kernel y crea un sistema básico de llamadas de entrada y salida, de manejo de memoria y hace que todos los demás componentes corran como procesos del sistema. La discusión entre cual de los dos es mejor pues..... eso lo veremos en otro vídeo porque ahora lo que queremos es entender cuales son las partes del núcleo de Linux.

¿Como se divide la arquitectura del núcleo de Linux?

El núcleo o Kernel de Linux lo dividiremos en las siguientes partes:

divisiones del Kernel

Gestíon de Procesos

La gestión de procesos esta centrada en la ejecución de los procesos, en el kernel de linux son llamados hilos y representan la visualización individual de cada procesador. Se suele utilizar el termino proceso aunque la implementación en linux no tiene concepto de hilos y procesos por separado. El núcleo provee un API a través de la SCI, con la que puede crear nuevos procesos con fork y con exec, matar o salir del procesos como en el caso de kill o exit. La gestión de procesos es necesaria para poder compartir hilos en la CPU, en el kernel el planificar opera en un tiempo constante sin tener en cuenta el numero de procesos que compiten por la CPU por eso decimos que opera bajo demanda, este se llama planificador 01, esto denota que el lleva la misma cantidad de tiempo para la planificación de un solo hilo o de varios , en el planificador 01 también se soporta el multiproceso. Ósea es simétrico y multiproceso.

La memoria

Otro importante recurso que es controlado por el kernel es la memoria, debido a la eficiencia como el hardware que maneja La Memoria Virtual esta es gestionada en paginas de 4 Kb en la mayoría de las arquitecturas, Linux incluye definiciones para manejar la memoria disponible y los mecanismos para hacer el mapeo en el hardware de la memoria física y en la memoria virtual. Pero la gestión de la memoria es mucho más que búfer de 4Kb, Linux contiene abstracción de búfer que permiten ir mas haya, este esquema maneja memoria de búfer de 4Kb, como base pero además reserva estructura dentro de ellos y lleva la cuenta de las paginas que están completas, parcialmente usadas o totalmente vacías para que el esquema pueda crecer o disminuir como se necesite en el momento.

Cuando hay varios usuarios haciendo uso de la memoria existen ocasiones en las cuales esta se agota entonces por esta razón las paginas pueden ser escritas en el disco duro temporalmente y luego vueltas a cargar en la memoria esto se llama SWAP o intercambio, ya que las paginas se mueven de un lado para otro cuando se necesite.

Sistema Virtual de Archivos o VFS

VFS es una capa de abstracción muy interesante que tiene el kernel y provee un interface para el uso común de sistemas de archivos sin importar cual sea. Se llama capa de atracción porque no importa cual sea la implementación de file system (Sistema de archivo) que estemos utilizando el tiene las funciones básicas para poder acceder  a cualquier sistema de archivos. Entonces el VFS proporciona una capa de intercambio entre las SCI y los sistemas de archivos soportados por el kernel.

En la parte mas alta del Virtual File System se encuentra un API común con las funciones tales como read , write, open, close y en la parte mas baja están las abstracciones del sistema para poder definir las atracciones mas altas, estas son añadidas a cada uno de los soportes de cada sistema de archivos en el kernel son más de 50, bajo la capa del sistema de archivos esta el cache del bufer que proporciona un conjunto de funciones a la capa de archivos independientemente del sistema de archivos que se este manejando, esa capa optimiza el acceso a los dispositivos físicos manteniendo brevemente la información arriesgándose a que esta tenga una lectura anticipada de los datos para poderla mantener cuando haga falta. Es por eso que en la práctica cuando nosotros leemos un sistema de archivos la primera vez es más lento y cuando volvemos a leerlo es más rápido.

Por debajo del cache del búfer ya están los controladores directamente, los dispositivos de hardware que hacen interface con el sistema de archivos.

La pila de Red

La pila red o diseño sigue una arquitectura por capas modelada tras los protocolos en si, recordemos que el IP que no es solamente una dirección o un numero sino que es el protocolo principal de internet y a su vez el protocolo central bajo el que se sitúan el protocolo de transporte TCP/IP y sobre el protocolo de transporte TCP/IP esta la capa de socket que a su vez llama a las SCI. La capa de socket es un API estándar para el subsistema del trabajo en red y proporciona una interface a varios protocolos. Desde el acceso a las frames crudas hasta las unidades de datos de IP llamadas PDU lo que nosotros vulgarmente conocemos como paquetes, el protocolo TCP/IP y el protocolo de datagrama de usuario UDP. La capa de socket provee de esta manera una forma estandarizada para poder manejar conexiones y mover datos de un lugar a otro.

Drivers de dispositivos

Lo siguiente en la lista son los controladores, la gran mayoría del código fuente de Linux son controladores de dispositivos, ¿Porque? Bueno es natural, los controladores son los que nos permite reconocer el hardware que nosotros queremos hacer funcionar con el sistema operativo basado en Linux. El árbol de código fuente de Linux nos proporciona un subdirectorio llamado Drivers el cual esta dividido en los diferentes dispositivos que queremos reconocer, en este código fuente vamos a encontrar directorios como Serial, Ethernet y todos los dispositivos para los que se ha desarrollado soporte en Linux.

Arquitectura

Por ultimo esta el código dependiente de la arquitectura, aunque Linux es independiente de la arquitectura hay varios elementos que hay que tener en cuenta con las operaciones habituales de eficiencia del sistema operativo, tenemos que Linux también en su árbol de desarrollo tiene un apartado para lo que necesita específicamente cada una de las arquitecturas entonces tenemos 386, Spark, ARM, MIPS, cualquiera otra que sea soportada por el núcleo de Linux.

Hay otras características básicas del sistema operativo que vale mencionar aparte de la estructura que estamos estudiando en este momento.

Linux por ser un sistema operativo de producción y también de código abierto es un excelente laboratorio para nuevas tecnologías en protocolos de red, por ejemplo las redes de alta velocidad que superan al Eternet de 1/10Gb y también por ejemplo el TCP/IP, que nos permiten características avanzadas de TCP/IP remplazándolo como capa de transporte.

Linux también es un kernel dinámico a pesar que es monolítico también es modular y permite que los controladores que no son esenciales para el funcionamiento sean cargados como módulos y se permite la carga y la descarga de los mismos sin tener que afectar el funcionamiento o la estabilidad de la plataforma.

También esta la parte de la virtualización, Linux desde hace unos años lleva soportando la virtualización por medio de KVM Kernel-Based Virtual Machine, y esta modificación al kernel permitió que se pudieran correr instancias por ejemplo del sistema operativo Windows y del sistema operativo Linux al mismo tiempo, la única restricción es que la plataforma de hardware que se este utilizando tenga la opción de virtualización.

Con eso damos fin a la explicación de los que es el núcleo de Linux a grandes rasgos, Si quisiéramos profundizar que es el núcleo de Linux pues nunca terminamos.

La Shell

Consola o terminal de Linux

La Shell es la interface de usuario tradicional en los sistemas operativos tipo Unix de allí que Linux también cuenta con esta misma interface. La Shell cuyo nombre inglés significa Caparazón es la interface con la que han contado los ordenadores desde antaño cuando se utilizaba únicamente una interface donde se hacia uso únicamente de un teclado y una pantalla en un entorno ambiente de linea de comando para poder acceder a este.

La Shell provee una interface para poder enviar y recibir el resultado de comandos o de aplicaciones que muestran su resultado en la pantalla en forma de texto, además también provee un lenguaje de programación básico para que los usuarios puedan utilizarlo, automatizar tareas y procedimientos dentro del sistema y así poder facilitar su uso y administración, a esto se le llama Shell Scripting.

Estructura de Directorios

El siguiente punto es la estructura de directorios o jerarquía, al igual que todos los otros sistemas operativos Linux tiene una jerarquía de archivos para poder organizar la estructura y tiene la siguiente organización Teniendo en cuenta que el / o barra diagonal que nosotros conocemos es la base o raíz de toda la estructura entonces la vamos a llamar root ( raíz en ingles), entonces de ahí se derivan los siguientes directorios:

estructura del Kernel de Linux

/bin es el que contiene los binarios indispensables para que el sistema operativo funcione en su parte mínima como ls, rm, mkdir, ps

/boot que contiene los archivos estáticos de arranque  de Linux como el kernel  y el initrd

/dev  contiene  los  archivos  que representan los dispositivos tanto virtuales  como de hardware que hay en el sistema

/etc que  es el directorio que contiene los archivos de configuración de  en formato de texto

/home el directorio que contiene los directorios  donde están los usuarios ósea donde los usuarios tienen sus datos por ejemplo /home/efox

/lib  que es las librerías esenciales también del sistema operativo  y los módulos del kernel también residen allí

/media  es la raíz del punto de montaje de los dispositivos de bloque o removibles

/mnt es el punto de montaje de bloque temporal, que fue heredado de Unix es como media pero  pues ya no se utiliza tanto  porque venía de Unix tradicional

/opt que es donde reside el software de aplicación agregado o de terceros como ORACLE o como cualquier otro fabricante

/sbin  que provee los binarios del sistema que no son esenciales para hacer que el sistema operativo funcione  pero que  son necesarios para llevar  a cabo funciones ya mas complejas, como por ejemplo la configuración de la red, del filtrado ip, la programación de  tareas y toda las demás cosa que hacen mas completo el  del sistema operativo.

/tmp que es donde residen los archivos temporales ya sean los que nosotros generamos o los que general  las aplicaciones y procesos que manejan el sistema

/usr donde están los binarios y las aplicaciones, este es el directorio que suele tener la cantidad de espacio ocupado mas grande dentro del file system y provee una jerarquía también secundaria  donde hay un /bin, /etc, /lib, /sbin.

/var o archivos de tamaño variable  como la cola de correo, las colas de impresión, las datas de los motores de bases de datos

/root es por así decirlo el home para el root porque antiguamente en el unix el home del root estaba sobre la misma raíz y esto generaba problemas de seguridad y organización

/proc que es un sistema de archivo virtual donde esta el estado del sistema, las condiciones y esto se indica en archivos de texto

Permisos

Ahora esta  el asunto de los permisos, me imagino que alguna vez  has oído algo como “no, no tengo los privilegios en el sistema o no es que mi usuario no es privilegiado”, se trata de esto mismo.

En Linux aunque no lo creas solo hay 2 tipos de usuarios esto debido a la forma en la que trabaja el núcleo, existe un usuario 0 que es llamado root, dios, admin, odin, thor o como lo quieras llamar  y todos los demás usuarios.

¿Bueno como es esto? 

Realmente lo que importa  son los permisos del file system, y esto no es de extrañar porque ahí es que residen los datos que nosotros queremos restringir

¿Entonces como es esto de los privilegios?

La cosa va así, existen 3 roles distintos con 3 tipos de permisos cada uno, eso suena como tic tac toe, triqui como nosotros lo  llamamos  y pues no es enredado pero el jueguito de triqui nos puede ayudar a resolver un poquito como es esto de los permisos.

Entonces tenemos que en eje x esta el usuario propietario representado por la u propietario del archivo, esta el grupo representado por la g que pertenece el usuario y  todos los demás representados por la letra o. En el eje y tenemos la r para lectura en ingles  que es read,  la w para write que es escribir en ingles  y la x para execute en ingles quiere decir ejecutar ahora los permisos se otorgan por medio de numeros, el permiso para ejecutar es 1, el permiso para escribir  es 2 y el permiso para leer es 4, estos se suman para  obtener el permiso que necesito para determinado archivo.

Tic tac toe

En este caso colocaremos 4+2+1 da 7  ósea todos los permisos, 4+0+1 osea el permiso de lectura y ejecución   y el siguiente le vamos a colocar 0+0+0  que no nos da ningún permiso , entonces tenemos que el usuario propietario  tienen  todos los permisos , el grupo donde se encuentra el usuario propietario tiene  permisos de lectura y ejecución y  y los demás  usuarios en el sistema  no tiene  permiso de hacer nada  con el archivo  al que le acabamos de colocar este permisos. Entonces estos son los permisos de archivos y pues aquí hicimos  la línea del tic tac toe.

Les voy a  mostrar algunos ejemplos  de permisos, teniendo en cuenta vamos a hacer unos ejemplos  de los permisos en Linux. Tenemos unos archivos de ejemplo vamos a ver la aplicación  de los bits de los permisos , tenemos que el primer tercio es el usuario, el segundo tercio es el  grupo y el tercer tercio  es los otros, entonces vamos a hacer algunos ejemplos vamos a ser el ejemplo que tenemos en el video

Chmod 750  ejemplo 1

Allí  vemos que quedo con permisos de lectura, escritura y ejecución para el usuario, lectura y ejecución para el grupo y ninguno para los todos los otros, ahora vamos a dar lectura y escritura a  todos, recordemos lectura es 4, escritura es 2 entonces lectura y escritura vendrían a ser 6, para otorgarle ese permiso a todos los usuarios  vendría a ser 666. Ahí esta  lectura y escritura  tanto para propietario, grupo y todos los demás, ahora solo queremos lectura  para todos  entonces seria 444 ahí esta  lectura  para el propietario, el grupo y todos los otros, por ejemplo queremos  nada mas lectura y ejecución para el propietario y el grupo para todos los otros ninguno entonces seria que lectura y ejecución  seria 4+1 seria 5

Chmod 555 ejemplo 4

Entonces tenemos  lectura y ejecución  para el propietario y el grupo todos los otros  no tienen ningún permiso  y queremos  colocarle todos los permisos  al archivo  seria 4 del permiso de lectura, 2  del permisos de escritura  y 1 del permiso de ejecución seria 7, con esto nos damos cuenta como se asigna  los permisos  de Linux. No olviden que esto se va a ampliar  para los comando específicos mas adelante  solamente es para mostrar lo explicado anteriormente.

SGUI/ SUID y Sticky bit

También me parece importante explicarles o siguiente, existen 2 permisos excepcionales esta el de SGUI/ SUID y esta STICKY BIT  aquí es donde la cosa se pone buena.

Resulta que en  Linux y  en general a Unix hay un permiso de ejecución que se le puede agregar  a una aplicación,  la cual hace que se ejecute como el usuario dueño y esto también incluye al usuario root. Esto se llama SUID  y se representa  en el ejecutable con una S, en el caso del grupo es lo mismo en el SGUI aparece también como una s en la parte de permiso de ejecución, por otro lado esta el STICKY BIT que es una medida de seguridad ya que solo el usuario propietario de ese archivo puede modificarlo o eliminarlo, un ejemplo de esto es cuando colocamos archivos en el /tmp.

El ejemplo consiste en lo siguiente, vamos a buscar una aplicación, un conejillo de indias que nos sirva para nuestro  propósito, se me ocurre que top por lo es interactiva  nos puede servir , entonces copiamos la aplicación para no  modificar la del sistema  a la carpeta donde estamos trabajando, ahora vamos a asignarle el permiso de suid a esa aplicación, se la aplicamos  solamente al propietario  ósea los permisos de U  ósea  de usuario y ahí ya vemos que nuestra aplicación a quedado con  el bit s que nos dice que es suid, ahora vamos al otro usuario el usuario fox, que esta trabajando en la misma carpeta vemos la aplicación top y  la ejecutamos  para comprobar que esta  aplicación esta corriendo como  pedro  hacemos ps xau que nos va a mostrar todos los procesos de forma extendida  junto con el usuario que los corre y vamos a  filtrarlo por  como se llama el proceso, se llama top.

Ahí  ya podemos apreciar que aunque es fox el que inicio  el proceso  top,  este esta corriendo a nombre de pedro  gracias  a el bit de suid  que lo permite.

Bueno el ejemplo de sticky bit va así:

Creamos una  carpeta por ejemplo sticky , le agregamos todos los permisos  ahí ya comprobamos  luego le agregamos el bit de sticky bit en el rol de otros con la t y  ahí ya nos queda el directorio  con el sticky bit. En tramos, creamos un archivo le concedemos todos los permisos , nos cercioramos de los permisos del archivo   y que la  carpeta efectivamente tenga el sticky bit. Cambiamos de usuario, este es el usuario fox, entramos  en la carpeta sticky, observamos que  hay un archivo del usuario pedro  llamado hola, como tiene todos los permisos procedemos a borrarlo. Pues no lo permite porque la carpeta que  lo contiene que ese sticky  tiene el sticky bit.

Al terminar esta segunda lección ya estarás familiarizado con el ambiente Linux y en la tercera entrega de este curso, comenzaras a utilizar este magnifico sistema operativo atravez de los comandos de Linux, así que no te lo pierdas.

¡No olvides que compartir es gratis!

5 comentarios

  1. Muchas gracias, en especial por la clara esplicación de los permisos. Es excelente y la mejor explicación para entender claramente cómo aplicarlos con el tic tac toe.

  2. Buena información, Como sugerencia seria interesante que agregaran al final de cada tema un elemento de evaluación, preguntas puntuales de esta forma se asegura que las personas que toman el curso adquieren el conocimiento.

    Saludos..

  3. Gran curso. Uno de los más completos que e visto

Comentar

Su dirección de correo electrónico no será publicada.Los campos necesarios están marcados *

*

14 Compartir
Compartir14
Twittear
Compartir
+1