Linux¶
Nombre¶
sudo hostnamectl
; Para cambiarlo
sudo hostnamectl set-hostname nuevoNombre
Configuración de red¶
Tradicionalmente usamos ifconfig, ahora ip
$ ip address show # Comando completo
$ ip a # Abreviado
$ ip -c a # Con colores
$ ip route show # Comando completo
$ ip r # Abreviado
$ ip -c r # Con colores
default via 192.168.1.1 dev eth0 proto dhcp metric 600
169.254.0.0/16 dev eth0 scope link metric 1000
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.137 metric 600
Configuración de red en Debian 11¶
El manual de debian 11 Network configuration es muy completo.
Tenemos tres modos de configurar la red:
1. Escribiendo en el fichero de configuración de red /etc/network/interfaces
2. NetworkManager, el preferido en portátiles.
3. Systemd-networkd, el preferido en servidores.
Redes cabkeadas (Ethernet)¶
NetworkManager no gestiona ningún interfaz definido en el fichero /etc/network/interfaces
.
Deben darse las siguientes condiciones (red no gestinada por NetworkManager):
1. El interfaz debe estar definido en el fichero /etc/network/interfaces
, incluido:
allow-hotplug eth0
iface eth0 inet static/dhcp
/etc/network/NetworkManager.conf
debe tener la siguiente línea:
[main]
plugins=ifupdown,keyfile
[ifupdown]
managed=false
Algunos comandos: nombre de la interfaces de red (adaptadores de red)
ls /sys/class/net/
hostname
Para hacer efectivos los cambios no se debe reiniciar el servicio, sino ejecutar el comando:
ifdown enp0s3
ifup enp0s3
systemctl restart networking
Configuración manual, ip estáticas.¶
El fichero /etc/network/interfaces
debe tener la siguiente configuración:
auto enp0s3
iface enp0s3 inet static
address 192.168.1.111
netmask 255.255.255.0
gateway 192.168.1.1
Y asegurarse que el servicio DCHP esta parado (dhcpd)
DNS¶
Al arrancar se lee la configuración desde /etc/resolv.conf
$ cat /etc/resolv.conf
# Ejemplo de fichero con un servidor DNS
nameserver 1.1.1.1
$ sudo systemd-resolve --status
Puertos abiertos¶
Para ver los puertos abiertos que hay en una máquina usa:
ss es el comando para investigar sockets. -t filtra por puertos TCP (no muestra UDP). -n muestra los puertos con número en vez de nombre. -l listen: puertos en modo escucha de aplicaciones que hacen de servidor. -p muestra procesos que hay detrás de cada puerto (requiere privilegios).
$ sudo ss -tnlp
Systemd¶
Cuando el sistema arranca, el kernel se encarga de lanzar un único proceso: el gestor de servicios, que es el proceso con PID 1.
Esto lo puedes comprobarlo con el comando pstree:
$ pstree
systemd─┬─ModemManager───2*[{ModemManager}]
├─NetworkManager───2*[{NetworkManager}]
├─gdm3─┬─gdm-session─┬─gdm-x-sess─┬─Xorg───2*[{Xorg}]
│ │ │ ├─gnome-sess───2*[{gnome-sess}]
│ │ │ └─2*[{gdm-x-session}]
│ │ └─2*[{gdm-session-wor}]
│ └─2*[{gdm3}]
├─named───25*[{named}]
├─systemd─┬─(sd-pam)
│ ├─GeckoMain─┬─Privileged Cont───26*[{Privileged Cont}]
│ │ └─Web Content───32*[{Web Content}]
│ └─gnome-session-b─┬─evolution-alarm───5*[{evolution-alarm}]
│ ├─gsd-disk-utilit───2*[{gsd-disk-utilit}]
│ └─3*[{gnome-session-b}]
└─systemd-resolve
Algo de historia:
- SysV init: el gestor inicial de UNIX System V de 1983.
- Upstart: intento (fallido) de Canonical en 2006 para reemplazar a init en Ubuntu. Usa el comando service, que aún se encuentra en algunos tutoriales.
- Systemd: desarrollado por Red Hat en 2010. En la actualidad lo usan la mayoría de distribuciones Linux (incluido Ubuntu). Comando systemctl.
Uso systemd¶
Estado de un servicio:
$ systemctl status systemd-resolved.service
● systemd-resolved.service - Network Name Resolution
Loaded: loaded (/lib/systemd/system/systemd-resolved.service; enabled; vendor preset: enab>
Active: active (running) since Thu 2021-10-21 14:13:08 CEST; 1 day 7h ago
Docs: man:systemd-resolved.service(8)
man:org.freedesktop.resolve1(5)
https://www.freedesktop.org/wiki/Software/systemd/writing-network-configuration-ma>
https://www.freedesktop.org/wiki/Software/systemd/writing-resolver-clients
Main PID: 886 (systemd-resolve)
Status: "Processing requests..."
Tasks: 1 (limit: 28589)
Memory: 9.3M
CGroup: /system.slice/systemd-resolved.service
└─886 /lib/systemd/systemd-resolved
Start, stop , restart
$ systemctl stop systemd-resolved.service
$ systemctl restart httpd.service
$ systemctl restart httpd # Si no acabas en .service, se autocompleta
Systemd units¶
Cada unidad gestiona una funcionalidad diferente
Tipo de unidad Nombre del fichero Descripción
Service unit
- /etc/systemd/system: unidades de sistema.
- ~/.config/systemd/user: unidades de usuario (si hay alguna).
- /lib/systemd/system/: unidades de paquetes de software (apt, rpm…)
- Puedes ver las unidades y ficheros de unidad y sus estados:
$ systemctl list-units $ systemctl list-unit-files
Arranque automáticos¶
Para que un servicio arranque en el inicio:
Es necesario habilitar la unidad
$ systemctl enable --now httpd.service
TARGETS¶
Son unidades .target que representan grupo de unidades. El proposito es crear una cadena de dependencias entre varios target para permitir ejecutar en paralelo los que no tienen interdependencias.
El sistema clásico SysV define seis niveles:
Runlevel Target unit Descripción 0 poweroff.target Cierra y apaga (power off) el sistema. 1 rescue.target Abre una shell de rescate. 2, 3, 4 multi-user.target Sistema multiusuario sin gráficos. 5 graphical.target Sistema multiusuario con gráficos. 6 reboot.target Cierra y reinicia el sistema.
En el arranque de linux, Systemd arranca el target por defecto (systectl get-default).
Para cambiar de target:
$ systemctl isolate <target>
Para apagar el sistema:
systemctl isolate reboot.target
Puedes listar el árbol de dependencias de una unidad (ver ejemplo más detallado):
# Unidades de las que depende la que indicas
$ systemctl list-dependencies local-fs.target
# Unidades que dependen de la que indicas
$ systemctl list-dependencies --reverse local-fs.target
Sistemas de administración y monitorización centralizados¶
Ansible¶
Ansible es una herramienta de automatización de TI de código abierto que se utiliza para administrar la configuración, la implementación y la orquestación de sistemas informáticos. Fue desarrollada por Red Hat y se basa en el lenguaje de programación Python. Ansible utiliza un enfoque de "infraestructura como código", lo que significa que permite definir y gestionar la configuración de ___infraestructura mediante archivos de texto simples y legibles__.
A diferencia de otras herramientas de automatización, Ansible se basa en una arquitectura sin agente, lo que significa que no requiere la instalación de software adicional en los sistemas que administra. En su lugar, utiliza conexiones SSH (o WinRM para sistemas Windows) para comunicarse con los nodos y ejecutar tareas de configuración.
Algunas características y conceptos clave de Ansible son:
-
Playbooks: Los Playbooks son archivos YAML que contienen instrucciones para Ansible sobre cómo configurar y administrar los sistemas. Los Playbooks definen una serie de tareas, que se ejecutan secuencialmente, y pueden incluir módulos Ansible, variables, condiciones y bucles.
-
Módulos: Ansible proporciona una amplia gama de módulos predefinidos que pueden utilizarse para realizar tareas específicas en los sistemas administrados. Estos módulos cubren diversas áreas, como gestión de paquetes, configuración de archivos, interacción con servicios de red, gestión de usuarios, entre otros.
-
Inventario: Ansible utiliza un archivo de inventario que especifica los sistemas que se administrarán. Este archivo puede contener direcciones IP, nombres de host o grupos de hosts, y se puede organizar en diferentes grupos para facilitar la administración.
-
Ad-hoc Commands: Además de los Playbooks, Ansible permite ejecutar comandos ad-hoc para realizar tareas rápidas y específicas en los sistemas. Esto es útil para ejecutar tareas simples sin necesidad de escribir un Playbook completo.
-
Integración con herramientas externas: Ansible se integra fácilmente con otras herramientas y sistemas, lo que permite una mayor flexibilidad y automatización. Puede interactuar con herramientas de control de versiones, sistemas de orquestación, servicios de nube y mucho más.
Ansible mantenimiento de usuarios¶
con Ansible puedes mantener una red de sistemas Ubuntu y administrar usuarios de manera eficiente. Ansible proporciona módulos específicos para la gestión de usuarios en sistemas Linux, incluidos los basados en Ubuntu.
Aquí hay un ejemplo básico de cómo puedes usar Ansible para crear y administrar usuarios en una red de sistemas Ubuntu:
Define tu inventario: Crea un archivo de inventario en Ansible que incluya los sistemas Ubuntu que deseas administrar. Puedes especificar las direcciones IP o los nombres de host de los sistemas Ubuntu en este archivo.
Crea un playbook: Crea un archivo YAML que contenga las tareas que deseas realizar en los sistemas Ubuntu. Por ejemplo, puedes tener una tarea para crear usuarios, establecer contraseñas, asignar grupos, entre otras acciones relacionadas con la administración de usuarios.
Utiliza módulos de usuarios de Ansible: Ansible proporciona módulos específicos para administrar usuarios en sistemas Linux, como user y group. Puedes utilizar estos módulos en tus tareas del playbook para crear usuarios, modificar propiedades, establecer contraseñas y realizar otras acciones relacionadas con la administración de usuarios en los sistemas Ubuntu.
Aquí hay un ejemplo de playbook Ansible que crea un usuario en sistemas Ubuntu:
---
- name: Crear usuario en sistemas Ubuntu
hosts: ubuntu_servers
become: yes
tasks:
- name: Crear usuario
user:
name: usuario1
state: present
shell: /bin/bash
password: "{{ 'mypassword' | password_hash('sha512') }}"
Una vez que tienes tu playbook listo, puedes ejecutarlo utilizando el comando ansible-playbook de Ansible, y aplicará las tareas definidas en los sistemas Ubuntu especificados en el inventario.
Están disponibles algunos entornos gráficos para Ansible:
-
AWX: AWX es la versión de código abierto de Ansible Tower y proporciona una funcionalidad similar. AWX es desarrollado por la comunidad y está basado en el mismo código fuente que Ansible Tower. Permite crear y gestionar tareas de Ansible a través de una interfaz web amigable y cuenta con características como inventario, roles, permisos, programación de trabajos y más.
-
Rundeck: Aunque no es específico de Ansible, Rundeck es una herramienta de automatización que ofrece una interfaz web GUI para gestionar y programar tareas en diversos sistemas, incluido Ansible. Puedes integrar Ansible con Rundeck y utilizar su interfaz gráfica para crear y administrar flujos de trabajo complejos que involucren tareas de Ansible junto con otras acciones. ver.
Rundesk parece integrarse mejor con otros servicios como Pi-hole y LDAP
Foreman¶
Ver inicio rápido
Características * Foreman actúa como una interfaz de usuario web que permite a los administradores controlar múltiples servidores desde un único panel. Algunas de las características clave de Foreman son:
-
Gestión de inventario: Foreman permite registrar y organizar todos los servidores en un inventario centralizado. Esto incluye información sobre el hardware, el sistema operativo y otros detalles relevantes de cada servidor.
-
Provisionamiento automatizado: Con Foreman, se puede automatizar el proceso de aprovisionamiento de nuevos servidores. Esto implica la instalación del sistema operativo, la configuración de redes, la aplicación de políticas de seguridad y la personalización de la configuración según los requisitos específicos.
-
Configuración de software: Foreman ofrece la capacidad de gestionar y aplicar configuraciones de software en servidores individuales o grupos de servidores. Esto incluye la instalación y actualización de paquetes, la configuración de servicios y la gestión de archivos de configuración.
-
Gestión de configuración: Foreman puede integrarse con herramientas de gestión de configuración como Puppet, Ansible o Chef. Esto permite definir y aplicar políticas de configuración consistentes en toda la infraestructura, lo que simplifica la administración y garantiza la coherencia en los servidores.
-
Monitoreo y informes: Foreman proporciona herramientas para monitorear el estado de los servidores y generar informes sobre diversos aspectos de la infraestructura. Esto ayuda a los administradores a identificar problemas, realizar un seguimiento del rendimiento y obtener información sobre el estado general de la infraestructura.
Uyani¶
Ver web
Uyuni es una plataforma de administración de sistemas de código abierto que se basa en el proyecto Foreman y Spacewalk. Proporciona características adicionales y mejoradas para la administración centralizada de sistemas Linux.
-
Uyuni se utiliza para gestionar y automatizar la implementación, configuración y administración de servidores físicos, virtuales y en la nube que ejecutan distribuciones Linux, como CentOS, Ubuntu, SUSE Linux Enterprise, entre otras. Algunas características destacadas de Uyuni incluyen:
-
Gestión de inventario: Uyuni permite llevar un inventario centralizado de todos los sistemas registrados, brindando información detallada sobre el hardware, el sistema operativo, los paquetes instalados y otros datos relevantes.
-
Provisionamiento automatizado: La plataforma facilita el proceso de aprovisionamiento de nuevos sistemas mediante la automatización de tareas como la instalación del sistema operativo, la configuración de la red y la aplicación de políticas de seguridad.
-
Administración de configuraciones: Uyuni ofrece herramientas para administrar y aplicar configuraciones de software en los sistemas administrados. Esto incluye la instalación y actualización de paquetes, la configuración de servicios y la gestión de archivos de configuración.
-
Monitoreo y alertas: Uyuni proporciona funcionalidades para monitorear el estado de los sistemas y generar alertas en caso de problemas o eventos importantes. Esto ayuda a los administradores a mantener un control proactivo sobre el rendimiento y la salud de la infraestructura.
-
Parcheo y actualizaciones: La plataforma facilita la gestión y aplicación de parches y actualizaciones de software en los sistemas gestionados. Se pueden crear políticas y programar la instalación automática de actualizaciones de seguridad y correcciones.
Monitorización de red¶
Para Ubuntu ju.vikas.eu¶
Variable entorno
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64