domingo, 4 de marzo de 2018

SCRIPT RSYNC

Practica Script RSYNC

Deberemos disponer de dos maquinas que se encuentren en la misma red. Dichas máquinas deberán disponer de una IP estática o en su defecto deberán obtener una IP dinámica bajo DHCP de un servidor. Es preferible que las máquinas tengan distinto nombre para poder diferenciarlas, aunque no es obligatorio. Es recomendable disponer de salida a Internet en caso de tener que actualizar algún paquete o instalar alguna utilidad.

Comprobación

Para comprobar que todo esta en el estado deseado ejecutaremos una serie de comandos mediante los cuales obtendremos información del estado de ambas máquinas.
  • >ifconfig → Tendremos que fijarnos que nuestras máquinas estan dentro del mismo rango de IP´s.
  • >ping ip → Así comprobaremos que nuestras máquinas se pueden comunicar.
  • >apt-get update → Es recomendable realizar una actualización por si hubiera paquetes desactualizados que pudieran darnos problemas.


Resolución del ejercicio

1. Deberemos generar una clave RSA privada y pública por máquina como método de autenticación:




2. Intercambiaremos claves públicas entre máquinas para poder realizar la comunicación correctamente:



3. Probaremos en ambas máquinas que al realizar una conexión SSH no nos pide una contraseña de tal forma que se autentica usando las claves:




4.En ambas máquinas crearemos un árbol de directorios todos con permisos 755 incluido el ejecutable. En dicho árbol tendremos que crear un documento el cual sera el ejecutable que lanzará las ordenes, y un directorio el cual sera el “archivo compartido” donde pondremos todos los documentos que queramos que se envíen, en mi caso lo creare en el HOME del usuario y tendrá la siguiente composición:




5. Dentro del ejecutable escribiremos el código necesario para la ejecución de la actividad:




6. Ahora iremos al crontab del usuario para “automatizar” la ejecución de este ejecutable de forma periódica, podremos elegir la frecuencia con la que ejecuta, como estamos probando lo pondremos cada minuto así veremos de forma casi instantánea que esta funcionando correctamente:



7. Añadiremos un archivo dentro de nuestro directorio compartido y revisaremos la otra máquina si se ha compartido con éxito. Adicionalmente si hemos creado un documento de LOG, podremos ver la fecha y la hora en la que se realizaron las copias:




Explicación del script:

-Creamos una variable “fechaD” en la cual almacenamos un formato de fecha.
-Escribimos el comando “rsync” con las opciones siguientes:
     *a: activa una serie de opciones básicas predeterminadas
     *v: incrementa la verbosidad
     *z: comprime el fichero durante la transmisión
     *u: omite los ficheros que son nuevos en el receptor
     *q: suprime los mensajes de error

Después de las opciones ponemos la carpeta de la cual se van a transmitir los archivos, osea, la carpeta local de la máquina, seguido escribimos la ip de la máquina destino junto con la ruta a la carpeta remota de la máquina destino.
-Seguido escribimos una línea con “echo -e” en la que escribimos un mensaje e incluimos la variable “$fechaD” para que nos saque la fecha en la que se realiza el script. Esta línea la redirigimos a un fichero de LOG en nuestra máquina local.

NFS (CONFIGURACIÓN E INSTALACIÓN)


NFS Linux-Linux

Para realizar esta practica usaremos dos máquinas Ubuntu Desktop 17.10, las cuales están en su versión más actualizada.

1- Tendremos que abrir una terminal e instalar el servicio NFS mediante el siguiente comando:




2- Una vez terminada la instalación tendremos que reiniciar el servicio con el siguiente comando:




3- Creamos una carpeta en la raíz de nuestra máquina, la cual asignaremos todos los permisos (777) para hacer una prueba, después pondremos los permisos 660, también cambiaremos el dueño de dicha carpeta y el grupo al usuario ‘nobody’ y ‘nogroup’, todo esto lo hacemos con los siguientes comandos:







4- Ahora creamos un fichero dentro de la carpeta que vamos a compartir para que a la hora de compartir el fichero se vea que funciona correctamente.





5- Vamos al fichero de configuración de NFS y añadimos la siguiente linea que corresponde al fichero que vamos a compartir y que se puede hacer con este:





6- Reiniciamos el servicio de nuevo para que se apliquen los cambios del fichero de configuración:




7- Vamos a nuestro cliente y creamos una carpeta en la raíz, esta será donde se muestren los archivos compartidos por el servidor:




8- Desde el cliente montamos el archivo compartido del servidor en el directorio que hemos creado en el cliente:





(Como vemos los permisos, dueño y grupos siguen igual que en el servidor)
9- Para no tener que montar los ficheros cada vez que iniciemos vamos al fstab y añadimos una línea:






NFS Windows-Linux


Para realizar esta práctica usaremos una máquina Ubuntu 17.10 y otra máquina Windows Server 2012.

1- En la máquina Windows Server 2012 intslaremos el servicio NFS:




2- Abriremos un terminal e iniciaremos el servicio NFS:




3- Ahora usando la misma máquina Linux que usamos como servidor en la practica anterior, nos conectaremos al recurso y lo montaremos en nuestro sistema que se encuentra compartida en esta:




4- Vamos a equipo y vemos que hay una nueva conexión, entramos dentro y verificamos que se encuentra el fichero que creamos:


lunes, 4 de diciembre de 2017

NTP (NETWORK TIME PROTOCOL)




Network Time Protocol (NTP) es un protocolo de Internet para sincronizar los relojes de los sistemas informáticos a través del enrutamiento de paquetes en redes con latencia variable. NTP utiliza UDP como su capa de transporte, usando el puerto 123. 

Está diseñado para resistir los efectos de la latencia variable.



El funcionamiento de NTP difiere básicamente de la mayoría de los otros protocolos. NTP no sincroniza todos los relojes conectados, establece una jerarquía de servidores de tiempo y clientes. Cada nivel de esta jerarquía se denomina estrato, y el Estrato 1 constituye el nivel más alto.


Los servidores de este nivel se sincronizan con una fuente de tiempo de referencia, como un reloj radiocontrolado, receptor de GPS o módem. Los servidores de Estrato 1 distribuyen el tiempo a distintos clientes de la red, que se denominan Estrato 2.

Es posible una sincronización de alta precisión gracias a las distintas referencias de tiempo. Cada ordenador se sincroniza con hasta tres fuentes de tiempo fiables. NTP permite la comparación de las horas de la máquina y el ajuste del reloj. Puede alcanzarse una precisión de 128 ms, con frecuencia mayor que 50 ms.

Cada sistema operativo incluye software que trabaja con NTP en cada ordenador, algunos de ellos son los siguientes:

Chrony

Chrony viene por defecto en las distribuciones de Red Hat​ y está disponible en los repositorios de Ubuntu​
Chrony está orientado a los ordenadores comunes y corrientes, los cuales son inestables, entran en modo de suspensión o tienen conexión de manera intermitente con internet. Chrony está pensado también para máquinas virtuales, un ambiente mucho más inestable. 
Se caracteriza por su bajo consumo de recursos (costo) y soporta ambos protocolos muy bien (NTP y PTP). 
Tiene dos componentes principales: 
chronyd un demonio que se ejecuta al iniciar la computadora y chronyc una interfaz por linea de comandos al usuario para su configuración. 
Ha sido evaluado como muy seguro y con apenas unas cuantas incidencias​, su ventaja es la versatilidad de su código, escrito desde cero para evitar la complejidad de código​. 
*(Chrony está escrito bajo licencia Licencia Pública General de GNU, versión 2 y fue escrito por Richard Curnow en 1997 con otros colaboradores y actualmente es mantenido por Miroslav Lichvar y el desarrollo y mantenimiento está patrocinado por Red Hat)

Arquitectura NTP

Las siguientes tres estructuras están disponibles para la arquitectura NTP.
  • Estructura de pares plana
  • Estructura jerarquica
  • Estructura estrella
En una estructura de pares plana, todos los enrutadores se relacionan entre sí, con algunos enrutadores geográficamente separados configurados para apuntar a sistemas externos. La convergencia del tiempo se hace más larga con cada nuevo miembro de la malla NTP.

En una estructura jerárquica, la jerarquía de enrutamiento se copia para la jerarquía NTP. Los enrutadores centrales tienen una relación cliente / servidor con fuentes de tiempo externas, los servidores de tiempo internos tienen una relación cliente / servidor con los enrutadores centrales, los enrutadores internos (no servidores de tiempo) internos tienen una relación cliente / servidor con los servidores de tiempo internos, y así sucesivamente, abajo del árbol. Estas relaciones se llaman escalas de jerarquía. Una estructura jerárquica es la técnica preferida porque proporciona consistencia, estabilidad y escalabilidad.

En una estructura en estrella, todos los enrutadores tienen una relación cliente / servidor con unos pocos servidores de tiempo en el núcleo. Los servidores de tiempo dedicados son el centro de la estrella y generalmente son sistemas UNIX sincronizados con fuentes de tiempo externas o su propio receptor GPS.
CONFIGURAR NETWORK TIME PROTOCOL

Elija el sistema principal que va a configurar como servidor NTP.
Configure el daemon de NTP para sincronizarlo con su propio reloj del sistema. Edite /etc/ntp.conf y añada las líneas siguientes:
server 127.127.1.0 prefer # the logical IP address for the NTP server to sync to its own system clock fudge 127.127.1.0 driftfile /etc/ntp.drift tracefile /etc/ntp.trace
Configure el servidor NTP para que se inicie durante el reinicio del sistema.
  • En sistemas operativos AIX, edite el archivo /etc/rc.tcpip y quite la marca de comentario de la entrada siguiente:
  • En sistemas operativos Linux, ejecute el mandato chkconfig ntp on.
  • Inicie el servidor NTP:
    • start /usr/sbin/xntpd -x "$src_running"

  • En sistemas operativos AIX, ejecute el mandato startsrc -s xntpd.
  • En sistemas operativos Linux, ejecute el mandato service ntp start.

miércoles, 29 de noviembre de 2017

UD 2: ADMINISTRACIÓN DEL KERNEL, PROCESOS, REDES Y ARCHIVOS DEL SISTEMA

Resultado de imagen de kernel
Control de procesos básico

Procesos y estados


Un proceso o tarea es todo aquel programa en ejecución. Los programas se guardan en el disco mientras que los procesos se almacenan en memoria (RAM). Cuando lanzas un programa, a este se le asigna un numero de proceso, si este a su vez llama a otros programas (hijos) a estos también se les asigna un numero de proceso. Cuando el ‘padre’ muere también deben morir todos sus hijos para garantizar la consistencia del sistema.
Estos procesos tienen asignados una serie de identificadores llamados UID (ID del usuario propietario) y GID (ID del grupo al que pertenece). Para ver estos parámetros usamos el comando ‘ps’ aunque si queremos una salida más ‘gráfica’ podemos usar el comando ‘top’ el cual nos saca en una lista todos los procesos activos y se muestra de tal manera que el primer proceso es que más recursos consume y el último proceso es el que menos consume.


Monitorización y control de procesos


A los procesos que se encuentran activos podemos monitorizarlos o enviarles determinadas señales para que realicen determinadas acciones como : ps, pstree, pgrep, kill, pkill, top, etc.



PS


El comando ps nos informa del estado de los procesos, lee la información directamente del fichero /proc. Las principales opciones son:
Columna
Resultado
p
Muestra el ID
P
Muestra el ID del proceso padre
U
Muestra el usuario propietario
T
Muestra el tiempo de uso acumulado por la CPU
NI
(Nice) Muestra la prioridad en un intervalo de entre -19 a 19.
S
Muestra el estado del proceso, corriendo, dormido, parado...


PSTREE


Muestra los procesos en forma de árbol, si agregas la opción -A y -G se muestra de una forma más gráfica.

KILL

El comando kill se usa principalmente para matar o terminar procesos y todos sus hijos, aunque también se usa para enviar señales a los procesos y estos realicen diferentes acciones según la señal enviada. Se usa con la sintaxis ‘kill -opciones PID’. La opción por defecto es -15, la cual mata o termina un proceso.

Opción
Resultado
-1
Manda una señal de pausa
-18
Manda una señal de continuar para un proceso en pausa
-19
Manda una señal que detiene el proceso
-2
Manda una señal para terminar un proceso
-9
Manda una señal que mata el proceso incondicionalmente







Si queremos conocer todas las opciones posibles de kill tendremos que ejecutar el comando ‘kill -l’.



KILLALL


El comando killall es muy similar a kill con la diferencia de que en vez de indicar un PID indicaremos el nombre del proceso por lo cual si tenemos varios procesos con el mismo nombre y matamos uno de ellos, mataremos a todos los demás procesos con el mismo nombre.


NICE


Con nice podemos cambiar la prioridad de los distintos procesos, esta prioridad va desde el -19 (alta prioridad) hasta el +19 (baja prioridad). Los cambios negativos solo los puede realizar el superusuario o root.


RENICE


Así como nice permite modificar su prioridad antes de la ejecución del proceso, renice permite modificar la prioridad mientras el proceso esta ejecutándose, sin necesidad de tener que detener el proceso.

NOHUB -&

Usamos nohub o & para ejecutar un proceso en segundo plano y dejar libre la consola de mandos. Si mandamos de forma manual un proceso a segundo plano tenemos el inconveniente de que la terminal se convierte en el PPID (proceso padre) por lo que si cerramos la terminal o cerramos sesión, estos procesos morirán sin importar que fueran. Si queremos ejecutar un programa en segundo plano seguiremos esta sintaxis ‘./programa.sh -&’.


TOP
Top se usa para listar de una forma más gráfica los procesos que se encuentran ejecución, es útil porque muestra varios parámetros entre ellos el uso de recursos del sistema. Se ordenan de forma que el programa que usa más recursos se encuentra el primero, y el programa que usa menos recursos se encuentra el último.



Jobs


Con el comando jobs podemos ver todos los procesos que se están ejecutando en segundo plano. los procesos en segundo plano pueden al foreground con el comando ‘fg numero de proceso’. Si el proceso se encuentra en foreground y queremos enviarlo a background usaremos el comando ‘bg numero de proceso’. Para matar un proceso podemos usar la combinación de teclas CTRL+C o CTRL+Z. Tambien es posible matarlos con kill %1 y el numero del proceso.



Hilos de ejecución


Los hilos son usados en programación lo que hace que al ejecutar un programa, este hace uso de diferentes recursos del sistema. Se puede monitorizar con el comando ‘ps -T -p numero de proceso’.



Gestor de arranque GRUB



El gestor de arranque permite seleccionar que sistema operativo queremos arrancar. Linux usa el gestor de arranque GRUB (Grand Unified Bootloader) el cual accede al directorio /boot donde carga el kernel y ejecuta el proceso ‘init’. Al contrario que Windows que usa el gestor de arranque MBR (Master Boot Record) y se trata de una carga encadenada en la que el MBR indica donde se encuentra el primer sector de la partición con el sistema.
Cuando se añade un nuevo kernel al sistema, GRUB los añade a las opciones de arranque del sistema y modifica los ficheros de configuración.
Si queremos realizar algún cambio en la configuración de GRUB, lo haremos en el fichero ‘/etc/default/grub’ y los cambios de las imagens de arranque se hacen en el fichero ‘/etc/grub.d’. Y siempre despues de cada cambio deberemos actualizar la configuración con el comando ‘update-grub2’.


Arranque y parada del sistema

En los sistemas Linux, para iniciar el sistema se ejecuta el programa init, el cual va ejecutando una serie de tareas de forma ordenada, las cuales son:
  • Comprueba los sistemas de ficheros
  • Monta los sistemas de ficheros permanentes
  • Activa la swap del sistema
  • Activa los demonios o servicios del sistema
  • Activa la red
  • Inicia los servicios de red del sistema
  • Limpia los sistemas de ficheros temporales
  • Habilita el login a los usuarios
Podemos cambiar el nivel de ejecución actual de la máquina con el comando ‘init numero’ donde el numero varia de 1 a 6 según lo que queramos hacer, por ejemplo ‘init 0’ apaga el sistema, ‘init 6’ reinicia el sistema, etc. El fichero donde se encuentra la configuración de los distintos niveles del sistema se encuentra en /etc/rcN.d, donde N es el numero de nivel. Cuando el sistema arranca primero ejecuta los scripts que comienzan por S y cuando ha terminado de ejecutar estos scripts, ejecuta los scripts que comienzan por K.

Servicios del sistema

Los servicios del sistemas son aplicaciones que se ejecutan en segundo plano y sirven para ofrecernos ciertos servicios como son la red, consola, etc. Para ver que servicios se arrancan en cada nivel de ejecución realizaremos el siguiente comando:
> chkconfig –list
En otros sistemas más modernos como Linux 7 se usa el comando ‘systemctl’, como por ejemplo: ‘systemctl status sshd’


El kernel

El kernel de un sistema operativo se encarga de dar vida al hardware del equipo, es responsable de asegurar que todos los programas y procesos puedan tener acceso simultaneamente a los recursos necesarios para ejecutarse. Es el cerebro de un sistema operativo encargado de coordina el acceso al hardware y los datos entre los diferentes componentes del sistema. La capa que sigue al kernel es la capa software donde se ejecutan las aplicaciones de usuario.
Para poder saber la versión del kernel hacemos el comando ‘uname -r’

Administración y gestión de usuarios


Los usuarios se encuentran registrados en el fichero /etc/passwd y las contraseñas de estos se encuentran en el fichero /etc/shadow. Para desactivar el fichero shadow realizamos el comando ‘pwunconv’ y para actualizar y crear el fichero shadow usamos el comando ‘pwconv’.

Permisos especiales sobre ficheros

Hay algunos permisos que pueden ser ejecutados por usuarios que no sean root en ciertas circunstancias. Hay que tener cuidado con estos permisos porque podrían dañar la seguridad del sistema.
Estos permisos especiales se activan con chmod y suman un dígito más al principio. Estos son los permisos especiales con sus respectivos dígitos:

  1. Activar setuid → 4(100)
  2. Activar setgid → 2(010)
  3. Activar sticky bit → 1(001)
  4. Activar setuid y sticky bit → 5(101)

Setuid

El bit setuid permite que ciertos usuarios puedan acceder a ficheros o directorios de otro usuario. Esto e sutil para fichero que tienen que ser ejecutados o visualizados por los usuarios pero cuyo propietario es root, como es el caso del fichero ‘passwd’.

Setgid

Este permiso especial es muy similar al setuid pero con la diferencia de que en vez de afectar a usuarios afecta a grupos, por lo que un usuario aunque no pertenezca al grupo capaz de ejecutar un fichero, puede ejecutarlo sin pertenecer al mismo. Si se aplica a un directorio y tu con el permiso setgid creas un fichero dentro de dicho directorio, el fichero pertenecerá al grupo del fichero padre, no a ti.

Sticky bit

El permiso especial sticky bit protege los ficheros dentro de un directorio dejando que solo puedan ser modificados por el propietario o por root, así evitamos que un usuario elimine fichero de un directorio publico donde todos los usuarios tienen permisos de escritura.

Gestión de discos y sistemas de ficheros

Los sistemas Linux organizan los datos en forma de árbol de directorios con ficheros dispuestos de forma jerárquica. El sistema identifica cada dispositivo externo o partición con un directorio dentro de su árbol de directorios ‘/dev/sda1’.
  • -s → Identifica si el disco es sata o scsi
  • -h → Identifica si el disco duro es de tipo IDE
  • -a → Identifica el primer disco, b seria el segundo y así continuamente
  • -1 → Identifica la partición dentro del disco
Con la herramienta fdisk podemos realizar la gestión del particionado de discos de una forma sencilla, el único inconvenientes es que no dispone de herramienta gráfica. Después de realizar la partición hay que crear un directorio y montar la partición en dicho directorio con el comando ‘mount /dev/sda1 /datos’.

Sistemas RAID

Los Raid (Redundant Array of Independent) es un conjunto de discos que actúan como un solo sistema de almacenamiento, los cuales son capaces de soportar el fallo de unos de los discos sin perder información debido a su sistemas de redundancias.
Para trabajar con Raid usamos los comandos mdadm en Ubuntu o lvm en RedHat.

  • RAID 0
  • El raid 0 no tiene redundancias, los discos se ponen uno detrás del otro haciendo que para el usuario haya un gran volumen en vez de varios discos, si falla un disco el sistema de ficheros se verá dañado.
Resultado de imagen de raid
  • RAID 1
  • El raid 1 supone una duplicidad de los datos, soporta el fallo de un disco y es capaz de regenerarlo. La duplicidad en los datos supone que se va a ocupar el doble de espacio.
Resultado de imagen de raid
  • RAID 5
  • El raid 5 se compone de varios discos en los que se genera una redundancia de datos pero sin duplicar, cada bloque de datos en vez de encontrarse en un solo disco, se distribuye por los discos reservando unos de ellos para guardar exclusivamente información de paridad. Si uno de ellos falla, los datos se pueden reconstruir gracias a la paridad.
Resultado de imagen de raid

Administración y configuración

Para agregar una interfaz de red realizamos el siguiente comando:
>ifconfig <interfaz> <IP> netmask <mascara_de_red> up

Rutas y puerta de enlace

Se usa para conectar el equipo a otra red diferente, para ello realizamos el siguiente comando:
>route add -net 0/0 gw <IP puerta de enlace> <Interfaz>

Valores de red permanentes

Para almacenar los cambios en la configuración de red de forma permanente sin borrarse a cada reinicio del sistema deberemos introducir los datos en los fichero ‘/etc/network/interfaces’ y ‘/etc/sysconfig/network-scripts’. También podemos modificar el nombre del equipo en el fichero ‘/etc/hostname’.

Resolución de nombres

Para configurar la resolución de nombre se usa el fichero ‘/etc/hosts’. Para establecer la configuración mediante DNS deberemos entrar en el fichero ‘/etc/resolv.conf’ e indicaremos los nombres de los namservers.

Reiniciar el servicio de red

En Ubuntu usaremos el comando ‘/etc/init.d/networking force-reload’ para reiniciar el servicio de red.



Comando
Resultado
ifconfig
Información de la conexión y adaptadores
route
Muestra la tabla de enrutamientos
iptables
Muestra y configura el cortafuegos
service
Administrar los servicios del sistema
adduser
Agregar usuario
userdel
Borrar usuario
usermod
Modificar valores del usuario
passwd
Cambiar la contraseña del usuario
addgroup
Permite dar de alta un usuario dentro de un grupo
su
Cambiar de usuario
id
Muestra el usuario que se está utilizando
groups
Grupos a los que pertenece el asuario
groupadd
Dar de alta un grupo
groupdel
Borrar un grupo
mdadm
Crear un raid
fdisk
Particionado de discos
chage
Establecer periodos de contraseñas
pwconv
Crear y actualizar el fichero /etc/shadow
pwunconv
Desactivar el fichero /etc/shadow
uname -r
Versión del kernel
chkconfig –-list
Gestionar servicios del sistema
init 0-6
Cambiar el nivel de ejecución del sistema
fg proceso
Llevar un proceso a primer plano
bg proceso
Llevar un proceso a segundo plano
jobs
Lista los trabajos en segundo plano dentro de la shell
top
Ver procesos activos en forma ‘gráfica’
nohub - &
Poner un proceso en segundo plano
nice
Cambiar la prioridad al iniciar un proceso
renice
Cambiar la prioridad con el proceso en ejecución
kill PID
Matar un proceso
killall nombre
Matar un proceso con nombre
pstree -AGu
Listar los procesos en forma de árbol
mkfs.ext3
Formatear particiones
mount
Montar discos en punto de anclaje