Contenidos
Introducción
Los sistemas operativos han sido diseñados para poder acceder y compartir recursos en otros ordenadores, cuando nos referimos a acceder también hablamos de iniciar sesión utilizando la red, mediante credenciales (usuario y contraseña).
El acceder y compartir recursos, se puede hacer desde formas muy simples como entre dos ordenadores, hasta formas en las que intervengan miles de ordenadores. La mayoría de los sistemas operativos tienen aplicaciones, mecanismos de seguridad, estructuras, etc., que facilitan dichas tareas.
Las soluciones más simples son las que permiten compartir información entre pocos ordenadores (cualquier cliente comparte información con otro cliente), en el caso de querer compartir información de forma centralizada (un servidor comparte información con los cliente) y para un gran número de ordenadores también hay soluciones.
Deducimos que las soluciones más simples son entre clientes y las más complicadas son en las que actúa un servidor que se encarga de centralizar toda la información.
A simple vista también nos damos cuenta que compartir recursos entre clientes puede convertirse en algo caótico y difícil de localizar un recurso en concreto, además si un recurso está asociado a un cliente, este, siempre debería estar conectado a la red.
La solución consiste en centralizar todos los recursos en un ordenador servidor, siempre se mantiene encendido y puede prestar servicios a cualquier cliente, la forma de almacenar y organizar la información sobre los usuarios, así como sus recursos, puede ser mediante los servicios de directorio. Cuando se tratan de muchos usuarios es necesario optar por sistemas avanzados como los servicios de directorio.
Servidores y clientes
Para comprender el funcionamiento de los servicios de directorio hay que tener claro el concepto cliente y servidor. Un resumen simple sería que cuando un equipo cliente necesita un recurso lo tiene que hacer mediante una petición a otro equipo que podemos considerar que se trata de un servidor, ese servidor puede recibir peticiones de varios clientes.
La comunicación al final consiste en un intercambio de información entre el cliente y el servidor mediante un protocolo.
Algunos tipos de servidores, es una clasificación muy simple de lo que puede hacer un equipo que se comporta como un servidor:
- Archivos
- Impresión
- Correo electrónico
- Web
- FTP
- Proxy
Los servidores pueden estar dedicados a una función en concreta o no, además existe la posibilidad de realizar cualquier función de las anteriores y ser una estación de trabajo.
Ejemplo
Comunicación entre un cliente y un servidor mediante el protocolo UDP, el cliente manda un mensaje simple de «Hola» a la dirección IP del servidor que recibe el mensaje.
El servidor se mantiene escuchando en el puerto 2020:
##Server $port=2020 $endpoint = new-object System.Net.IPEndPoint ([IPAddress]::Any,$port) $udpclient=new-Object System.Net.Sockets.UdpClient $port $content=$udpclient.Receive([ref]$endpoint) [Text.Encoding]::ASCII.GetString($content) $udpclient.Dispose()
El cliente envía un mensaje al puerto 2020 del servidor, tiene que indicar la dirección IP del servidor:
##Client $port=2020 $endpoint = new-object System.Net.IPEndPoint ([IPAddress]::Loopback,$port) $udpclient=new-Object System.Net.Sockets.UdpClient $b=[Text.Encoding]::ASCII.GetBytes('Hola') $bytesSent=$udpclient.Send($b,$b.length,$endpoint) $udpclient.Close()
Bases de datos
Uno de los conceptos que se van a tratar aquí es el Protocolo LDAP, que consiste en una base de datos en la que se pueden realizarse consultas sobre objetos existentes.
Ejercicios
Practicar la consulta e inserción de datos en una Base de Datos MySQL desde PowerShell (enlaces sobre los que trabajar)
- https://www.jesusninoc.com/12/27/conectar-powershell-con-mysql/
- https://www.jesusninoc.com/03/18/arrancar-y-conectar-a-mysql-desde-powershell/
- https://www.jesusninoc.com/01/11/crear-una-base-de-datos-en-mysql-con-powershell/
- https://www.jesusninoc.com/01/13/crear-una-tabla-en-una-base-de-datos-en-mysql-con-powershell/
- https://www.jesusninoc.com/01/17/insertar-valores-en-una-tabla-de-una-base-de-datos-en-mysql-con-powershell/
- https://www.jesusninoc.com/01/19/ver-valores-insertados-en-una-tabla-de-una-base-de-datos-en-mysql-con-powershell/
Almacenar la información enviada entre un cliente y un servidor en una base de datos MySQL con PowerShell (es un ejercicio bastante completo)
Credenciales
Las credenciales de inicio de sesión son nombres de usuario y contraseñas gestionados que dan acceso a los sistemas y sirven para identificar a una persona.
Utilizar contraseñas es un método para autentificarse, pero no es el único, hay otros métodos como, por ejemplo, el uso de tarjetas inteligentes que tiene la identidad grabada.
El concepto de credencial es fundamental a la hora de validarse dentro de un sistema, los clientes son los que intentan el acceso a los servidores mediante la utilización de credenciales.
Ejemplo
Simular el envío de credenciales entre un cliente y un servidor mediante el protocolo UDP. Una vez recibidos los credenciales por el servidor se ejecuta la aplicación Notepad.
Servidor escucha y ejecuta los credenciales:
$port=2022 $endpoint = new-object System.Net.IPEndPoint ([IPAddress]::Any,$port) $udpclient=new-Object System.Net.Sockets.UdpClient $port $content=$udpclient.Receive([ref]$endpoint) # Ejecutar los credenciales que llegan por UDP $jsonc = [Text.Encoding]::ASCII.GetString($content) | ConvertFrom-Json $cred = New-Object -TypeName PSCredential $jsonc.UserName,($jsonc.Password | ConvertTo-SecureString) Start-Process notepad -Credential $cred
Cliente manda los credenciales:
# Almacenar credenciales en un fichero JSON Get-Credential | Select Username,@{n="Password"; e={$_.password | ConvertFrom-SecureString}} | ConvertTo-Json | Set-Content -Path credenciales.json -Encoding UTF8 $port=2022 $endpoint = new-object System.Net.IPEndPoint ([IPAddress]::Loopback,$port) $udpclient=new-Object System.Net.Sockets.UdpClient $val = Get-Content -Path .\credenciales.json -Encoding UTF8 -Raw $b=[Text.Encoding]::ASCII.GetBytes($val.ToString()) $bytesSent=$udpclient.Send($b,$b.length,$endpoint) $udpclient.Close()
Objetos
Los objetos, propiedades (para nosotros los atributos son propiedades, debido a una explicación desde el punto de vista de la programación), métodos y eventos son las unidades básicas de la programación orientada a objetos.
Aunque el concepto objeto en informática es algo lógico que no podemos tocar, podemos pensar que el objeto es algo que existe aunque no sea físicamente real.
Un objeto es un elemento abstracto de una aplicación, que representa una instancia de una clase, la clase se puede definir como la estructura que va a tener el objeto. Propiedades, métodos y eventos son las unidades de creación básicas de los objetos y constituyen sus miembros.
El concepto objeto lo utilizaremos en el Directorio Activo para representar cualquier recurso que haya en la Red. Un objeto es un usuario, un grupo, un equipo, una impresora, un servicio, etc.
Algunos de los objetos que se pueden representar:
- Hardware: procesador, memoria, dispositivos, etc.
- Software: programas, archivos, carpetas, etc.
- Usuarios y grupos.
- Y más cosas…
Ejemplo
Crear un objeto coche con una propiedad que sea el color y un método que sea indicar la temperatura del motor
#Crear objeto coche $coche=New-Object Object #Añadir propiedad color de coche Add-Member -MemberType NoteProperty -Name Color Negro -InputObject $coche #Añadir método temperatura del motor $coche | Add-Member ScriptMethod TemperaturaMotor {60} #Mostrar el color del coche $coche.color #Mostrar la temperatura del motor $coche.TemperaturaMotor()
Grupo de Trabajo versus Directorio Activo
Existen los grupos de trabajo (concepto introducido por Microsoft en la versión de Windows 3.11) que sirven para compartir recursos entre usuarios individuales, dicho sistema se fundamenta en los credenciales (usuario y contraseña) y los permisos (NTFS y de red).
Este tipo de red tiene los inconvenientes de:
- Recursos compartidos que no se localizan y la información no está centralizada.
- Recursos compartidos con un número limitado de usuarios.
- La seguridad radica en los credenciales que se tienen que compartir.
Otra forma de compartir recursos y que veremos en detalle es el Directorio Activo, es un servicio de directorio cuya estructura centraliza recursos, los ofrece a los ordenadores y a los mediante la utilización del concepto dominio.
Si hablamos de una empresa pequeña el concepto grupo de trabajo encaja bien pero si la empresa tiene un gran número de usuario y equipos es necesario centralizar la información mediante un Directorio Activo.
Servicios de directorio
Una de las principales soluciones para centralizar recursos son los servicios de directorio, el elemento fundamental de los servicios de directorio es el directorio que se define como un elemento que almacena información sobre los distintos recursos de una red, a ese elemento que almacena información se accede de forma similar a como se hace con una base de datos (visto anteriormente), realizando búsquedas, lecturas y demás operaciones para tener acceso a los elementos de la red.
Los servicios de directorio son los métodos que se utilizan para almacenar información en el directorio, hay varios estándares que definen los servicios de directorio, el más conocido es el X.500.
Una parte importante en los servicios de directorio es la comunicación con él, es decir, qué protocolo de comunicación se utiliza.
En el caso del estándar X.500 al principio, la comunicación se realizaba mediante el protocolo DAP (Directory Access Protocol, Protocolo de acceso a directorios), era un protocolo muy complejo y pesado, como alternativa a este protocolo apareció LDAP (Lightweight Directory Access Protocol, Protocolo ligero de acceso a directorios), este protocolo era más sencillo y ligero, es el protocolo que actualmente se utiliza en la comunicación de los servicios de directorio.
La principal característica del protocolo LDAP es que es más ligero y que funciona sobre TCP/IP, la versión actual de dicho protocolo es LDAPv3.
Hay numerosas implementaciones de los servicio de directorio, algunos ejemplos son el servicio de directorio de Red Hat, Open Directory de Apple, Active Directory (Directorio Activo) de Microsoft, OpenLDAP que es una implementación de código abierto, etc.
Directorio Activo
Es el servicio de directorio desarrollado por Microsoft y que se utiliza desde la versión de Windows Server 2000, ha estado presente en todas las versiones Server.
Más información
Directivas de Grupo
Una de las tareas básicas en Active Directory es la administración del comportamiento de los objetos de una organización. Para ello se resume todo en la creación y aplicación de un conjunto de reglas que deben cumplir un número determinado de objetos. Estas reglas reciben el nombre de GPO (Group Policy Object) u objeto de directiva de dominio.
Las configuraciones de GPO se pueden hacer en local o en red. Las directivas locales se administran desde cualquier equipo abriendo la aplicación «Editar directivas de grupo local» y las configuraciones de Directivas de Grupo en red se realizan desde los servidores (Windows Server).
Algunos ejemplos de configuraciones de Directivas de Grupo en un Windows Server son:
- Ejecución de programas al iniciar sesión
- Ocultar unidades locales
- Bloquear el símbolo del sistema
- Bloquear el acceso al panel de control
- Bloquear la pantalla pasados unos minutos
- Cambiar el papel tapiz
- Restringir el uso de unidades ópticas
- Ejecución de un script
- Mapear unidades
Más información
Auditoría
El concepto fundamental son los derechos de acceso que se utilizarán al crear reglas de acceso y auditoría.