Administrador de Linux - Guía rápida
Único entre las distribuciones de Linux de clase empresarial, CentOS se mantiene fiel a la naturaleza de código abierto en la que se fundó Linux. El primer kernel de Linux fue desarrollado por un estudiante universitario de la Universidad de Helsinki (Linus Torvalds) y combinado con las utilidades GNU fundadas y promovidas por Richard Stallman. CentOS tiene una licencia probada de código abierto que puede impulsar el mundo empresarial actual.
CentOS se ha convertido rápidamente en una de las plataformas de servidores más prolíficas del mundo. Cualquier administrador de Linux, cuando busque empleo, seguramente encontrará las palabras: "Preferida la experiencia CentOS Linux". Desde startups hasta titanes tecnológicos de Fortune 10 , CentOS se ha colocado entre los escalones más altos de los sistemas operativos de servidor en todo el mundo.
Lo que hace que CentOS se destaque de otras distribuciones de Linux es una gran combinación de:
Licencias de código abierto
Base de usuarios dedicada de profesionales de Linux
Buen soporte de hardware
Estabilidad y confiabilidad sólidas
Centrarse en la seguridad y las actualizaciones
Cumplimiento estricto de los estándares de empaquetado de software necesarios en un entorno corporativo
Antes de comenzar las lecciones, asumimos que los lectores tienen un conocimiento básico de Linux y los fundamentos de la administración, tales como:
¿Qué es el usuario root?
El poder del usuario root
Concepto básico de grupos de seguridad y usuarios
Experiencia en el uso de un emulador de terminal de Linux
Conceptos fundamentales de redes
Comprensión fundamental de los lenguajes de programación interpretados (Perl, Python, Ruby)
Protocolos de red como HTTP, LDAP, FTP, IMAP, SMTP
Núcleos que componen un sistema operativo de computadora: sistema de archivos, controladores y el kerne
Antes de aprender las herramientas de un administrador de CentOS Linux, es importante tener en cuenta la filosofía detrás de la línea de comandos de administración de Linux.
Linux fue diseñado con base en la filosofía Unix de “herramientas pequeñas y precisas encadenadas que simplifican tareas más grandes”. Linux, en su raíz, no tiene grandes aplicaciones de un solo propósito para un uso específico la mayor parte del tiempo. En cambio, hay cientos de utilidades básicas que cuando se combinan ofrecen un gran poder para realizar grandes tareas con eficiencia.
Ejemplos de la filosofía de Linux
Por ejemplo, si un administrador desea una lista de todos los usuarios actuales en un sistema, los siguientes comandos encadenados pueden usarse para obtener una lista de todos los usuarios del sistema. Al ejecutar el comando, los usuarios que se encuentran en el sistema se enumeran en orden alfabético.
[root@centosLocal centos]# cut /etc/passwd -d":" -f1 | sort
abrt
adm
avahi
bin
centos
chrony
colord
daemon
dbus
Es fácil exportar esta lista a un archivo de texto usando el siguiente comando.
[root@localhost /]# cut /etc/passwd -d ":" -f1 > system_users.txt
[root@localhost /]# cat ./system_users.txt | sort | wc –l
40
[root@localhost /]#
También es posible comparar la lista de usuarios con una exportación en una fecha posterior.
[root@centosLocal centos]# cut /etc/passwd -d ":" -f1 > system_users002.txt &&
cat system_users002.txt | sort | wc -l
41
[root@centosLocal centos]# diff ./system_users.txt ./system_users002.txt
evilBackdoor [root@centosLocal centos]#
Con este enfoque de pequeñas herramientas encadenadas para realizar tareas más grandes, es más sencillo crear un script que ejecute estos comandos que enviar automáticamente los resultados por correo electrónico a intervalos de tiempo regulares.
Los comandos básicos que todo administrador de Linux debe dominar son:
- vim
- grep
- más y menos
- tail
- head
- wc
- sort
- uniq
- tee
- cat
- cut
- sed
- tr
- paste
En el mundo de Linux, los administradores utilizan filteringcomandos todos los días para analizar registros, filtrar la salida de comandos y realizar acciones con scripts de shell interactivos. Como se mencionó, el poder de estos comandos proviene de su capacidad para modificarse entre sí a través de un proceso llamadopiping.
El siguiente comando muestra cuántas palabras comienzan con la letra a del diccionario del usuario principal de CentOS.
[root@centosLocal ~]# egrep '^a.*$' /usr/share/dict/words | wc -l
25192
[root@centosLocal ~]#
Para introducir los permisos que se aplican a directorios y archivos en CentOS Linux, veamos el siguiente resultado del comando.
[centos@centosLocal etc]$ ls -ld /etc/yum*
drwxr-xr-x. 6 root root 100 Dec 5 06:59 /etc/yum
-rw-r--r--. 1 root root 970 Nov 15 08:30 /etc/yum.conf
drwxr-xr-x. 2 root root 187 Nov 15 08:30 /etc/yum.repos.d
Note - Los tres tipos de objetos principales que verá son
"-" - un guión para archivo simple
"d" - para un directorio
"l" - para un enlace simbólico
Nos centraremos en los tres bloques de salida para cada directorio y archivo:
- drwxr-xr-x: root: root
- -rw-r - r--: raíz: raíz
- drwxr-xr-x: root: root
Ahora analicemos esto para comprender mejor estas líneas:
re | Significa que el tipo de objeto es un directorio |
rwx | Indica los permisos de directorio aplicados al propietario. |
rx | Indica los permisos de directorio aplicados al grupo. |
rx | Indica los permisos de directorio aplicados al mundo. |
raíz | La primera instancia, indica el propietario del directorio. |
raíz | La segunda instancia, indica el grupo al que se aplican los permisos de grupo. |
Es importante comprender la diferencia entre propietario , grupo y mundo . No comprender esto puede tener grandes consecuencias en los servidores que alojan servicios en Internet.
Antes de dar un ejemplo del mundo real, primero comprendamos los permisos que se aplican a directorios y archivos .
Eche un vistazo a la siguiente tabla y luego continúe con las instrucciones.
Octal | Simbólico | Permanente. | Directorio |
---|---|---|---|
1 | X | Ejecutar | Ingrese al directorio y acceda a los archivos |
2 | w | Escribir | Eliminar o modificar los archivos de un directorio |
4 | r | Leer | Enumere los archivos dentro del directorio |
Note- Cuando los archivos deben ser accesibles para leer en un directorio, es común aplicar permisos de lectura y ejecución . De lo contrario, los usuarios tendrán dificultades para trabajar con los archivos. Dejar la escritura deshabilitada asegurará que los archivos no se puedan: renombrar, eliminar, copiar o modificar los permisos.
Aplicar permisos a directorios y archivos
Al aplicar permisos, hay que comprender dos conceptos:
- Permisos simbólicos
- Permisos octales
En esencia, cada uno es la misma pero una forma diferente de hacer referencia y asignar permisos de archivo. Para obtener una guía rápida, estudie y consulte la siguiente tabla:
Leer | Escribir | Ejecutar | |
---|---|---|---|
Octal | 4 | 2 | 1 |
Symbolic | r | w | X |
Al asignar permisos usando el octalmétodo, utilice un número de 3 bytes como: 760. El número 760 se traduce en: Propietario: rwx; Grupo: rw; Otro (o mundo) sin permisos.
Otro escenario: 733 se traduciría a: Propietario: rwx; Grupo: wx; Otro: wx.
Hay un inconveniente de los permisos que utilizan el método Octal. Los conjuntos de permisos existentes no se pueden modificar. Solo es posible reasignar todo el conjunto de permisos de un objeto.
Ahora podría preguntarse, ¿qué hay de malo en reasignar siempre permisos? Imagine una estructura de directorio grande, por ejemplo / var / www / en un servidor web de producción. Queremos quitar de forma recursiva el bit w o write en todos los directorios de Otro. Por lo tanto, obligando a que se agregue de manera proactiva solo cuando sea necesario para las medidas de seguridad. Si reasignamos todo el conjunto de permisos, eliminamos todos los demás permisos personalizados asignados a cada subdirectorio.
Por tanto, provocará un problema tanto para el administrador como para el usuario del sistema. En algún momento, una persona (o personas) necesitaría reasignar todos los permisos personalizados que se eliminaron al reasignar todo el conjunto de permisos para cada directorio y objeto.
En este caso, querríamos usar el método simbólico para modificar los permisos:
chmod -R o-w /var/www/
El comando anterior no "sobrescribirá los permisos" sino que modificará los conjuntos de permisos actuales. Así que acostúmbrese a utilizar las mejores prácticas
- Octal solo para asignar permisos
- Simbólico para modificar conjuntos de permisos
Es importante que un administrador de CentOS sea competente tanto con los permisos Octal como Simbólicos, ya que los permisos son importantes para la integridad de los datos y de todo el sistema operativo. Si los permisos son incorrectos, el resultado final serán datos confidenciales y todo el sistema operativo se verá comprometido.
Con eso cubierto, veamos algunos comandos para modificar los permisos y el propietario / miembros del objeto:
- chmod
- chown
- chgrp
- umask
chmod: cambiar los bits de permiso del modo de archivo
Mando | Acción |
---|---|
-C | Como verboso, pero solo informará los cambios realizados |
-v | Detallado, genera los diagnósticos para cada solicitud realizada |
-R | Aplica de forma recursiva la operación en archivos y directorios |
chmod nos permitirá cambiar los permisos de directorios y archivos usando conjuntos de permisos octales o simbólicos . Usaremos esto para modificar nuestra asignación y cargar directorios.
chown: Cambiar propietario y grupo del archivo
Mando | Acción |
---|---|
-C | Como verboso, pero solo informará los cambios realizados |
-v | Detallado, genera los diagnósticos para cada solicitud realizada |
-R | Aplica de forma recursiva la operación en archivos y directorios |
chown puede modificar tanto la propiedad del usuario como el grupo de objetos. Sin embargo, a menos que necesite modificar ambos al mismo tiempo, generalmente se usa chgrp para grupos.
chgrp: Cambiar la propiedad de grupo del archivo o directorio
Mando | Acción |
---|---|
-C | Me gusta detallado, pero solo informará los cambios |
-v | Detallado, genera los diagnósticos para cada solicitud realizada |
-R | Recursivamente, aplica las operaciones en archivos y directorios. |
chgrp cambiará el propietario del grupo al suministrado.
Práctica del mundo real
Cambiemos todas las asignaciones del subdirectorio en / var / www / Students / para que el grupo propietario sea el grupo de estudiantes . Luego asigne la raíz de estudiantes al grupo de profesores. Más tarde, convierta al Dr. Terry Thomas en el propietario del directorio de estudiantes , ya que tiene la tarea de estar a cargo de toda la academia de Ciencias de la Computación en la escuela.
Como podemos ver, cuando se crea, el directorio se deja bastante crudo.
[root@centosLocal ~]# ls -ld /var/www/students/
drwxr-xr-x. 4 root root 40 Jan 9 22:03 /var/www/students/
[root@centosLocal ~]# ls -l /var/www/students/
total 0
drwxr-xr-x. 2 root root 6 Jan 9 22:03 assignments
drwxr-xr-x. 2 root root 6 Jan 9 22:03 uploads
[root@centosLocal ~]#
Como administradores, nunca queremos dar nuestras credenciales de root a nadie. Pero al mismo tiempo, debemos permitir que los usuarios puedan hacer su trabajo. Dejemos que el Dr. Terry Thomas tome más control de la estructura de archivos y limite lo que los estudiantes pueden hacer.
[root@centosLocal ~]# chown -R drterryt:professors /var/www/students/
[root@centosLocal ~]# ls -ld /var/www/students/
drwxr-xr-x. 4 drterryt professors 40 Jan 9 22:03 /var/www/students/
[root@centosLocal ~]# ls -ls /var/www/students/
total 0
0 drwxr-xr-x. 2 drterryt professors 6 Jan 9 22:03 assignments
0 drwxr-xr-x. 2 drterryt professors 6 Jan 9 22:03 uploads
[root@centosLocal ~]#
Ahora, cada directorio y subdirectorio tiene un propietario de drterryt y el grupo propietario son los profesores . Dado que el directorio de tareas es para que los estudiantes entreguen el trabajo asignado, eliminemos la capacidad de enumerar y modificar archivos del grupo de estudiantes .
[root@centosLocal ~]# chgrp students /var/www/students/assignments/ && chmod
736 /var/www/students/assignments/
[root@centosLocal assignments]# ls -ld /var/www/students/assignments/
drwx-wxrw-. 2 drterryt students 44 Jan 9 23:14 /var/www/students/assignments/
[root@centosLocal assignments]#
Los estudiantes pueden copiar asignaciones al directorio de asignaciones . Pero no pueden enumerar el contenido del directorio, copiar archivos actuales o modificar archivos en el directorio de asignaciones . Por lo tanto, solo permite a los estudiantes enviar tareas completadas. El sistema de archivos CentOS proporcionará un sello de fecha de cuándo se entregaron las asignaciones.
Como propietario del directorio de asignaciones :
[drterryt@centosLocal assignments]$ whoami drterryt [drterryt@centosLocal assignments]$ ls -ld /var/www/students/assignment
drwx-wxrw-. 2 drterryt students 44 Jan 9 23:14 /var/www/students/assignments/
[drterryt@centosLocal assignments]$ ls -l /var/www/students/assignments/ total 4 -rw-r--r--. 1 adama students 0 Jan 9 23:14 myassign.txt -rw-r--r--. 1 tammyr students 16 Jan 9 23:18 terryt.txt [drterryt@centosLocal assignments]$
Podemos ver que el propietario del directorio puede enumerar archivos, así como modificarlos y eliminarlos.
Comando umask: proporciona los modos predeterminados para los permisos de archivos y directorios a medida que se crean
umask es un comando importante que proporciona los modos predeterminados para los permisos de archivos y directorios a medida que se crean.
Los permisos de umask utilizan lógica unaria negada.
Permiso | Operación |
---|---|
0 | Leer, escribir, ejecutar |
1 | Lee y escribe |
2 | Leer y ejecutar |
3 | Solo lectura |
4 | Leer y ejecutar |
5 | Escribir solamente |
6 | Ejecutar solo |
7 | no permisos |
[adama@centosLocal umask_tests]$ ls -l ./ -rw-r--r--. 1 adama students 0 Jan 10 00:27 myDir -rw-r--r--. 1 adama students 0 Jan 10 00:27 myFile.txt [adama@centosLocal umask_tests]$ whoami
adama
[adama@centosLocal umask_tests]$ umask 0022 [adama@centosLocal umask_tests]$
Ahora, cambiemos la umask de nuestro usuario actual y creemos un nuevo archivo y directorio.
[adama@centosLocal umask_tests]$ umask 077 [adama@centosLocal umask_tests]$ touch mynewfile.txt
[adama@centosLocal umask_tests]$ mkdir myNewDir [adama@centosLocal umask_tests]$ ls -l
total 0
-rw-r--r--. 1 adama students 0 Jan 10 00:27 myDir
-rw-r--r--. 1 adama students 0 Jan 10 00:27 myFile.txt
drwx------. 2 adama students 6 Jan 10 00:35 myNewDir
-rw-------. 1 adama students 0 Jan 10 00:35 mynewfile.txt
Como podemos ver, los archivos recién creados son un poco más restrictivos que antes.
umask para usuarios debe cambiarse en:
- /etc/profile
- ~/bashrc
[root@centosLocal centos]# su adama
[adama@centosLocal centos]$ umask 0022 [adama@centosLocal centos]$
Generalmente, la umask predeterminada en CentOS estará bien. Cuando tenemos problemas con un valor predeterminado de 0022 , generalmente es cuando diferentes departamentos pertenecientes a diferentes grupos necesitan colaborar en proyectos.
Aquí es donde entra en juego el rol de un administrador del sistema, para equilibrar las operaciones y el diseño del sistema operativo CentOS.
Cuando hablamos de administración de usuarios , tenemos tres términos importantes que comprender:
- Users
- Groups
- Permissions
Ya hemos hablado en profundidad de los permisos que se aplican a archivos y carpetas. En este capítulo, analicemos los usuarios y los grupos.
Usuarios de CentOS
En CentOS, hay dos tipos de cuentas:
System accounts - Se utiliza para un demonio u otra pieza de software.
Interactive accounts - Generalmente asignado a un usuario para acceder a los recursos del sistema.
La principal diferencia entre los dos tipos de usuarios es:
System accountslos demonios los utilizan para acceder a archivos y directorios. Por lo general, no se permitirá el inicio de sesión interactivo a través de shell o inicio de sesión de consola física.
Interactive accounts son utilizados por los usuarios finales para acceder a los recursos informáticos desde un shell o un inicio de sesión de consola física.
Con esta comprensión básica de los usuarios, creemos ahora un nuevo usuario para Bob Jones en el Departamento de Contabilidad. Se agrega un nuevo usuario con eladduser mando.
Los siguientes son algunos adduser interruptores comunes -
Cambiar | Acción |
---|---|
-C | Agrega un comentario a la cuenta de usuario |
-metro | Crea el directorio de inicio del usuario en la ubicación predeterminada, si no existe |
-gramo | Grupo predeterminado para asignar el usuario |
-norte | No crea un grupo privado para el usuario, generalmente un grupo con nombre de usuario |
-METRO | No crea un directorio de inicio |
-s | Shell predeterminado que no sea / bin / bash |
-u | Especifica UID (de lo contrario asignado por el sistema) |
-GRAMO | Grupos adicionales para asignar al usuario |
Al crear un nuevo usuario, use los modificadores -c, -m, -g, -n de la siguiente manera:
[root@localhost Downloads]# useradd -c "Bob Jones Accounting Dept Manager"
-m -g accounting -n bjones
Ahora veamos si nuestro nuevo usuario ha sido creado -
[root@localhost Downloads]# id bjones
(bjones) gid = 1001(accounting) groups = 1001(accounting)
[root@localhost Downloads]# grep bjones /etc/passwd
bjones:x:1001:1001:Bob Jones Accounting Dept Manager:/home/bjones:/bin/bash
[root@localhost Downloads]#
Ahora necesitamos habilitar la nueva cuenta usando el comando passwd -
[root@localhost Downloads]# passwd bjones
Changing password for user bjones.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
[root@localhost Downloads]#
La cuenta de usuario no está habilitada, lo que permite al usuario iniciar sesión en el sistema.
Deshabilitar cuentas de usuario
Existen varios métodos para deshabilitar cuentas en un sistema. Estos van desde la edición manual del archivo / etc / passwd. O incluso usando el comando passwd con el-lcambiar. Ambos métodos tienen un gran inconveniente: si el usuario tiene acceso ssh y usa una clave RSA para la autenticación, aún puede iniciar sesión con este método.
Ahora usemos el comando chage , cambiando la fecha de vencimiento de la contraseña a una fecha anterior. Además, puede ser bueno anotar en la cuenta por qué la deshabilitamos.
[root@localhost Downloads]# chage -E 2005-10-01 bjones
[root@localhost Downloads]# usermod -c "Disabled Account while Bob out of the country
for five months" bjones
[root@localhost Downloads]# grep bjones /etc/passwd
bjones:x:1001:1001:Disabled Account while Bob out of the country for four
months:/home/bjones:/bin/bash
[root@localhost Downloads]#
Administrar grupos
La gestión de grupos en Linux hace que sea conveniente para un administrador combinar los usuarios dentro de contenedores aplicando conjuntos de permisos aplicables a todos los miembros del grupo. Por ejemplo, todos los usuarios de Contabilidad pueden necesitar acceso a los mismos archivos. Así, hacemos un grupo contable, agregando usuarios de Contabilidad.
En su mayor parte, cualquier cosa que requiera permisos especiales debe hacerse en grupo. Este enfoque generalmente ahorrará tiempo al aplicar permisos especiales a un solo usuario. Por ejemplo, Sally está a cargo de los informes y solo Sally necesita acceder a ciertos archivos para generar informes. Sin embargo, ¿qué pasa si Sally se enferma un día y Bob informa? ¿O crece la necesidad de informar? Cuando se crea un grupo, un administrador solo necesita hacerlo una vez. La adición de usuarios se aplica a medida que las necesidades cambian o se expanden.
A continuación se muestran algunos comandos comunes que se usan para administrar grupos:
- chgrp
- groupadd
- groups
- usermod
chgrp - Cambia la propiedad del grupo de un archivo o directorio.
Hagamos un directorio para que las personas del grupo de contabilidad almacenen archivos y creen directorios para archivos.
[root@localhost Downloads]# mkdir /home/accounting
[root@localhost Downloads]# ls -ld /home/accounting
drwxr-xr-x. 2 root root 6 Jan 13 10:18 /home/accounting
[root@localhost Downloads]#
A continuación, démosle la propiedad del grupo al grupo de contabilidad .
[root@localhost Downloads]# chgrp -v accounting /home/accounting/
changed group of ‘/home/accounting/’ from root to accounting
[root@localhost Downloads]# ls -ld /home/accounting/
drwxr-xr-x. 2 root accounting 6 Jan 13 10:18 /home/accounting/
[root@localhost Downloads]#
Ahora, todos en el grupo de contabilidad han leído y ejecutado permisos para / home / Accounting . También necesitarán permisos de escritura.
[root@localhost Downloads]# chmod g+w /home/accounting/
[root@localhost Downloads]# ls -ld /home/accounting/
drwxrwxr-x. 2 root accounting 6 Jan 13 10:18 /home/accounting/
[root@localhost Downloads]#
Dado que el grupo de contabilidad puede tratar con documentos confidenciales, debemos aplicar algunos permisos restrictivos para otros o para el mundo .
[root@localhost Downloads]# chmod o-rx /home/accounting/
[root@localhost Downloads]# ls -ld /home/accounting/
drwxrwx---. 2 root accounting 6 Jan 13 10:18 /home/accounting/
[root@localhost Downloads]#
groupadd - Se usa para crear un nuevo grupo.
Cambiar | Acción |
---|---|
-gramo | Especifica un GID para el grupo |
-K | Anula las especificaciones para GID en /etc/login.defs |
-o | Permite anular la anulación de identificación de grupo no única |
-pags | Contraseña de grupo, que permite a los usuarios activarse |
Hagamos un nuevo grupo llamado secreto. Agregaremos una contraseña al grupo, permitiendo a los usuarios agregarse a sí mismos con una contraseña conocida.
[root@localhost]# groupadd secret
[root@localhost]# gpasswd secret
Changing the password for group secret
New Password:
Re-enter new password:
[root@localhost]# exit
exit
[centos@localhost ~]$ newgrp secret Password: [centos@localhost ~]$ groups
secret wheel rdc
[centos@localhost ~]$
En la práctica, las contraseñas para grupos no se utilizan con frecuencia. Los grupos secundarios son adecuados y compartir contraseñas entre otros usuarios no es una buena práctica de seguridad.
los groupsEl comando se usa para mostrar a qué grupo pertenece un usuario. Usaremos esto, después de realizar algunos cambios en nuestro usuario actual.
usermod se utiliza para actualizar los atributos de la cuenta.
A continuación se muestran los conmutadores de modificador de usuario comunes .
Cambiar | Acción |
---|---|
-un | Agrega, agrega usuario a grupos complementarios, solo con la opción -G |
-C | Comentario, actualiza el valor del comentario del usuario |
-re | Directorio de inicio, actualiza el directorio de inicio del usuario |
-GRAMO | Agrupa, agrega o elimina los grupos de usuarios secundarios |
-gramo | Grupo, grupo primario predeterminado del usuario |
[root@localhost]# groups centos
centos : accounting secret
[root@localhost]#
[root@localhost]# usermod -a -G wheel centos
[root@localhost]# groups centos
centos : accounting wheel secret
[root@localhost]#
Las cuotas de disco de CentOS se pueden habilitar tanto; alertar al administrador del sistema y negar más acceso al almacenamiento en disco a un usuario antes de que se exceda la capacidad del disco. Cuando un disco está lleno, dependiendo de lo que resida en el disco, un sistema completo puede detenerse hasta que se recupere.
Habilitar la administración de cuotas en CentOS Linux es básicamente un proceso de 4 pasos:
Step 1 - Habilite la administración de cuotas para grupos y usuarios en / etc / fstab.
Step 2 - Vuelva a montar el sistema de archivos.
Step 3 - Crear una base de datos de cuotas y generar una tabla de uso del disco.
Step 4 - Asignar políticas de cuotas.
Habilite la administración de cuotas en / etc / fstab
Primero, queremos hacer una copia de seguridad de nuestro archivo / etc / fstab -
[root@centosLocal centos]# cp -r /etc/fstab ./
Ahora tenemos una copia de nuestro conocido / etc / fstab en el directorio de trabajo actual.
#
# /etc/fstab
# Created by anaconda on Sat Dec 17 02:44:51 2016
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/cl-root / xfs defaults 0 0
UUID = 4b9a40bc-9480-4 /boot xfs defaults 0 0
/dev/mapper/cl-home /home xfs defaults,usrquota,grpquota 0 0
/dev/mapper/cl-swap swap swap defaults 0 0
Hicimos los siguientes cambios en la sección de opciones de / etc / fstab para el volumen o Etiqueta donde se aplicarán las cuotas para usuarios y grupos.
- usrquota
- grpquota
Como puede ver, estamos usando el xfssistema de archivos. Cuando se usa xfs, hay pasos manuales adicionales involucrados./homeestá en el mismo disco que /. La investigación adicional muestra / está configurado para noquota , que es una opción de montaje a nivel de kernel. Debemos reconfigurar nuestras opciones de arranque del kernel.
root@localhost rdc]# mount | grep ' / '
/dev/mapper/cl-root on / type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
[root@localhost rdc]#
Reconfiguración de las opciones de arranque del kernel para sistemas de archivos XFS
Este paso solo es necesario bajo dos condiciones:
- Cuando el disco / partición en el que estamos habilitando cuotas, está usando el sistema de archivos xfs
- Cuando el kernel pasa el parámetro noquota a / etc / fstab en el momento del arranque
Step 1 - Haga una copia de seguridad de / etc / default / grub.
cp /etc/default/grub ~/
Step 2- Modificar / etc / default / grub .
Aquí está el archivo predeterminado.
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=cl/root rd.lvm.lv=cl/swap rhgb quiet"
GRUB_DISABLE_RECOVERY="true"
Queremos modificar la siguiente línea -
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=cl/root rd.lvm.lv=cl/swap rhgb quiet"
a
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=cl/root rd.lvm.lv
=cl/swap rhgb quiet rootflags=usrquota,grpquota"
Note- Es importante que copiemos estos cambios textualmente. Después de reconfigurar grub.cfg, nuestro sistema no podrá arrancar si se cometieron errores en la configuración. Por favor, pruebe esta parte del tutorial en un sistema que no sea de producción.
Step 3 - Copia de seguridad de su trabajo grub.cfg
cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.bak
Cree un nuevo grub.cfg
[root@localhost rdc]# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-514.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-514.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-dbba7fa47f73457b96628ba8f3959bfd
Found initrd image: /boot/initramfs-0-rescuedbba7fa47f73457b96628ba8f3959bfd.img
done
[root@localhost rdc]#
Reiniciar
[root@localhost rdc]#reboot
Si todas las modificaciones fueran precisas, no deberíamos tener la disponibilidad para agregar cuotas al sistema de archivos xfs .
[rdc@localhost ~]$ mount | grep ' / '
/dev/mapper/cl-root on / type xfs (rw,relatime,seclabel,attr2,inode64,usrquota,grpquota)
[rdc@localhost ~]$
Hemos pasado los parámetros usrquota y grpquota a través de grub.
Ahora, vuelva a editar / etc / fstab para incluir / since / home en el mismo disco físico.
/dev/mapper/cl-root/xfs
defaults,usrquota,grpquota 0 0
Ahora habilitemos las bases de datos de cuotas.
[root@localhost rdc]# quotacheck -acfvugM
Asegúrese de que las cuotas estén habilitadas.
[root@localhost rdc]# quotaon -ap
group quota on / (/dev/mapper/cl-root) is on
user quota on / (/dev/mapper/cl-root) is on
group quota on /home (/dev/mapper/cl-home) is on
user quota on /home (/dev/mapper/cl-home) is on
[root@localhost rdc]#
Vuelva a montar el sistema de archivos
Si la partición o el disco están separados de la partición iniciada activamente, podemos volver a montar sin reiniciar. Si la cuota se configuró en un disco / partición iniciada en el directorio raíz /, es posible que necesitemos reiniciar el sistema operativo. Al forzar el remontaje y aplicar cambios, la necesidad de remontar el sistema de archivos puede variar.
[rdc@localhost ~]$ df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/cl-root 22447404 4081860 18365544 19% /
devtmpfs 903448 0 903448 0% /dev
tmpfs 919308 100 919208 1% /dev/shm
tmpfs 919308 9180 910128 1% /run
tmpfs 919308 0 919308 0% /sys/fs/cgroup
/dev/sda2 1268736 176612 1092124 14% /boot
/dev/mapper/cl-var 4872192 158024 4714168 4% /var
/dev/mapper/cl-home 18475008 37284 18437724 1% /home
tmpfs 183864 8 183856 1% /run/user/1000
[rdc@localhost ~]$
Como podemos ver, los volúmenes LVM están en uso. Así que es muy sencillo reiniciar. Esto volverá a montar / home y cargará los cambios de configuración de / etc / fstab en la configuración activa.
Crear archivos de base de datos de cuotas
CentOS ahora es capaz de trabajar con cuotas de disco en / home. Para habilitar el suministro de cuota completo, debemos ejecutar elquotacheck mando.
quotacheck creará dos archivos -
- aquota.user
- aquota.group
Estos se utilizan para almacenar información de cuotas para los discos / particiones habilitados para cuotas.
A continuación se muestran los modificadores de control de cuotas más comunes.
Cambiar | Acción |
---|---|
-u | Verificaciones de cuotas de usuarios |
-gramo | Comprobaciones de cuotas de grupo |
-C | Las cuotas deben estar habilitadas para cada sistema de archivos con habilitaciones de cuotas |
-v | Muestra una salida detallada |
Agregar límites de cuota por usuario
Para esto, usaremos el comando edquota, seguido del nombre de usuario -
[root@localhost rdc]# edquota centos
Disk quotas for user centos (uid 1000):
Filesystem blocks soft hard inodes soft hard
/dev/mapper/cl-root 12 0 0 13 0 0
/dev/mapper/cl-home 4084 0 0 140 0 0
Veamos cada columna.
Filesystem - Son las cuotas del sistema de archivos para el usuario aplicadas
blocks - Cuántos bloques está usando actualmente el usuario en cada sistema de archivos
soft- Establecer bloques para un límite suave. El límite flexible permite al usuario llevar una cuota durante un período de tiempo determinado
hard- Establecer bloques para un límite estricto. El límite estricto es la cuota total permitida
inodes - Cuántos inodos usa actualmente el usuario
soft - Límite de inodo suave
hard - Límite de inodo duro
Para comprobar nuestra cuota actual como usuario:
[centos@localhost ~]$ quota
Disk quotas for user centos (uid 1000):
Filesystem blocks quota limit grace files quota limit grace
/dev/mapper/cl-home 6052604 56123456 61234568 475 0 0 [centos@localhost ~]$
A continuación, se muestra un error que se le da a un usuario cuando se excede el límite de la cuota estricta.
[centos@localhost Downloads]$ cp CentOS-7-x86_64-LiveKDE-1611.iso.part ../Desktop/
cp: cannot create regular file ‘../Desktop/CentOS-7-x86_64-LiveKDE-
1611.iso.part’: Disk quota exceeded
[centos@localhost Downloads]$
Como podemos ver, estamos muy cerca de la cuota de disco de este usuario. Establezcamos una advertencia de límite suave. De esta forma, el usuario recibirá un aviso previo antes de que expiren los límites de cuota. Según la experiencia, recibirá quejas de los usuarios finales cuando entren en el trabajo y necesitará pasar 45 minutos limpiando archivos para ponerse manos a la obra.
Como administrador, podemos verificar el uso de la cuota con el repquota mando.
[root@localhost Downloads]# repquota /home
Block limits File limits
User used soft hard grace used soft hard grace
----------------------------------------------------------------------------------------
root -- 0 0 0 3 0 0
centos -+ 6189824 56123456 61234568 541 520 540 6days
[root@localhost Downloads]#
Como podemos ver, el usuario centos ha excedido su cuota de bloque duro y ya no puede usar más espacio en disco en / home .
- + indica que se ha excedido una cuota estricta en el sistema de archivos.
Al planificar las cuotas, es necesario hacer un poco de matemáticas. Lo que un administrador necesita saber es: ¿Cuántos usuarios hay en el sistema? ¿Cuánto espacio libre asignar entre usuarios / grupos? ¿Cuántos bytes componen un bloque en el sistema de archivos?
Defina las cuotas en términos de bloques en relación con el espacio libre en disco. Se recomienda dejar un búfer "seguro" de espacio libre en el sistema de archivos que permanecerá en el peor de los casos: todas las cuotas se superan simultáneamente. Esto es especialmente en una partición que es utilizada por el sistema para escribir registros.
systemdes la nueva forma de ejecutar servicios en Linux. systemd tiene un sysvinit reemplazado . systemd brinda tiempos de arranque más rápidos a Linux y ahora es una forma estándar de administrar los servicios de Linux. Si bien es estable, systemd aún está evolucionando.
systemd como un sistema de inicio, se usa para administrar tanto los servicios como los demonios que necesitan cambios de estado después de que se haya iniciado el kernel de Linux. Mediante el cambio de estado, se aplica el inicio, la parada, la recarga y el ajuste del estado de servicio.
Primero, verifiquemos la versión de systemd que se está ejecutando actualmente en nuestro servidor.
[centos@localhost ~]$ systemctl --version
systemd 219
+PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP
+GCRYPT +GNUTLS +ACL +XZ -LZ4 -SECCOMP +BLKID +ELFUTILS +KMOD +IDN
[centos@localhost ~]$
A partir de la versión 7 de CentOS, completamente actualizada en el momento de escribir este artículo, la versión 219 de systemd es la versión estable actual.
También podemos analizar el último tiempo de arranque del servidor con systemd-analyse
[centos@localhost ~]$ systemd-analyze
Startup finished in 1.580s (kernel) + 908ms (initrd) + 53.225s (userspace) = 55.713s
[centos@localhost ~]$
Cuando los tiempos de arranque del sistema son más lentos, podemos usar el comando systemd-analyse blame .
[centos@localhost ~]$ systemd-analyze blame
40.882s kdump.service
5.775s NetworkManager-wait-online.service
4.701s plymouth-quit-wait.service
3.586s postfix.service
3.121s systemd-udev-settle.service
2.649s tuned.service
1.848s libvirtd.service
1.437s network.service
875ms packagekit.service
855ms gdm.service
514ms firewalld.service
438ms rsyslog.service
436ms udisks2.service
398ms sshd.service
360ms boot.mount
336ms polkit.service
321ms accounts-daemon.service
Al trabajar con systemd , es importante comprender el concepto de unidades .Unitsson los recursos que systemd sabe interpretar. Las unidades se clasifican en 12 tipos de la siguiente manera:
- .service
- .socket
- .device
- .mount
- .automount
- .swap
- .target
- .path
- .timer
- .snapshot
- .slice
- .scope
En su mayor parte, trabajaremos con .service como objetivos unitarios. Se recomienda realizar más investigaciones sobre los otros tipos. Como solo las unidades .service se aplicarán al inicio y la detención de los servicios systemd .
Cada unidad se define en un archivo ubicado en:
/lib/systemd/system - archivos de unidad base
/etc/systemd/system - archivos de unidad modificados iniciados en tiempo de ejecución
Administrar servicios con systemctl
Para trabajar con systemd , necesitaremos familiarizarnos con el comando systemctl . A continuación se muestran los modificadores de línea de comando más comunes para systemctl .
Cambiar | Acción |
---|---|
-t | Valor separado por comas de tipos de unidades como servicio o socket |
-un | Muestra todas las unidades cargadas |
--estado | Muestra todas las unidades en un estado definido, ya sea: carga, sub, activo, inactivo, etc. |
-H | Ejecuta la operación de forma remota. Especifique el nombre de host o host y usuario separados por @. |
Uso básico de systemctl
systemctl [operation]
example: systemctl --state [servicename.service]
Para un vistazo rápido a todos los servicios que se ejecutan en nuestra caja.
[root@localhost rdc]# systemctl -t service
UNIT LOAD ACTIVE SUB DESCRIPTION
abrt-ccpp.service loaded active exited Install ABRT coredump hook
abrt-oops.service loaded active running ABRT kernel log watcher
abrt-xorg.service loaded active running ABRT Xorg log watcher
abrtd.service loaded active running ABRT Automated Bug Reporting Tool
accounts-daemon.service loaded active running Accounts Service
alsa-state.service loaded active running Manage Sound Card State (restore and store)
atd.service loaded active running Job spooling tools
auditd.service loaded active running Security Auditing Service
avahi-daemon.service loaded active running Avahi mDNS/DNS-SD Stack
blk-availability.service loaded active exited Availability of block devices
bluetooth.service loaded active running Bluetooth service
chronyd.service loaded active running NTP client/server
Detención de un servicio
Primero, detengamos el servicio bluetooth.
[root@localhost]# systemctl stop bluetooth
[root@localhost]# systemctl --all -t service | grep bluetooth
bluetooth.service loaded inactive dead Bluetooth service
[root@localhost]#
Como podemos ver, el servicio bluetooth ahora está inactivo.
Para volver a iniciar el servicio bluetooth.
[root@localhost]# systemctl start bluetooth
[root@localhost]# systemctl --all -t service | grep bluetooth
bluetooth.service loaded active running Bluetooth service
[root@localhost]#
Note- No especificamos bluetooth.service, ya que el .service está implícito. Es una buena práctica pensar en el tipo de unidad que agrega el servicio con el que estamos tratando. Entonces, de aquí en adelante, usaremos la extensión .service para aclarar que estamos trabajando en las operaciones de la unidad de servicio.
Las acciones principales que se pueden realizar en un servicio son:
comienzo | Inicia el servicio |
Detener | Detiene un servicio |
Recargar | Recarga la configuración activa de un servicio sin detenerlo (como kill -HUP en system v init) |
Reiniciar | Inicia y luego detiene un servicio |
Habilitar | Inicia un servicio en el momento del arranque |
Inhabilitar | Evita que un servicio se inicie automáticamente en tiempo de ejecución |
Las acciones anteriores se utilizan principalmente en los siguientes escenarios:
comienzo | Para activar un servicio que se ha puesto en estado detenido. |
Detener | Para cerrar temporalmente un servicio (por ejemplo, cuando un servicio debe detenerse para acceder a archivos bloqueados por el servicio, como cuando se actualiza el servicio) |
Recargar | Cuando se ha editado un archivo de configuración y queremos aplicar los nuevos cambios sin detener el servicio. |
Reiniciar | En el mismo escenario que la recarga, pero el servicio no admite la recarga . |
Habilitar | Cuando queremos que un servicio deshabilitado se ejecute en el momento del arranque. |
Inhabilitar | Se utiliza principalmente cuando es necesario detener un servicio, pero se inicia al arrancar. |
Para comprobar el estado de un servicio:
[root@localhost]# systemctl status network.service
network.service - LSB: Bring up/down networking
Loaded: loaded (/etc/rc.d/init.d/network; bad; vendor preset: disabled)
Active: active (exited) since Sat 2017-01-14 04:43:48 EST; 1min 31s ago
Docs: man:systemd-sysv-generator(8)
Process: 923 ExecStart = /etc/rc.d/init.d/network start (code=exited, status = 0/SUCCESS)
localhost.localdomain systemd[1]: Starting LSB: Bring up/down networking...
localhost.localdomain network[923]: Bringing up loopback interface: [ OK ]
localhost.localdomain systemd[1]: Started LSB: Bring up/down networking.
[root@localhost]#
Muéstranos el estado actual del servicio de red . Si queremos ver todos los servicios relacionados con las redes, podemos utilizar:
[root@localhost]# systemctl --all -t service | grep -i network
network.service loaded active exited LSB: Bring up/
NetworkManager-wait-online.service loaded active exited Network Manager
NetworkManager.service loaded active running Network Manager
ntpd.service loaded inactive dead Network Time
rhel-import-state.service loaded active exited Import network
[root@localhost]#
Para aquellos familiarizados con el sysinitmétodo de gestión de servicios, es importante hacer la transición a systemd . systemd es la nueva forma de iniciar y detener servicios de demonio en Linux.
systemctles la utilidad utilizada para controlar systemd. systemctl proporciona a los administradores de CentOS la capacidad de realizar una multitud de operaciones en systemd, que incluyen:
- Configurar unidades systemd
- Obtener el estado de systemd untis
- Iniciar y detener servicios
- Habilite / deshabilite los servicios de systemd para el tiempo de ejecución, etc.
La sintaxis de comando para systemctl es bastante básica, pero puede enredarse con interruptores y opciones. Presentaremos las funciones más esenciales de systemctl necesarias para administrar CentOS Linux.
Basic systemctl syntax:
systemctl [OPTIONS] COMMAND [NAME]
A continuación se muestran los comandos comunes que se usan con systemctl :
- start
- stop
- restart
- reload
- status
- is-active
- list-units
- enable
- disable
- cat
- show
Ya hemos hablado de iniciar , detener , recargar , reiniciar , habilitar y deshabilitar con systemctl. Así que repasemos los comandos restantes de uso común.
estado
En su forma más simple, el comando de estado se puede utilizar para ver el estado del sistema en su totalidad:
[root@localhost rdc]# systemctl status
● localhost.localdomain
State: running
Jobs: 0 queued
Failed: 0 units
Since: Thu 2017-01-19 19:14:37 EST; 4h 5min ago
CGroup: /
├─1 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
├─user.slice
│ └─user-1002.slice
│ └─session-1.scope
│ ├─2869 gdm-session-worker [pam/gdm-password]
│ ├─2881 /usr/bin/gnome-keyring-daemon --daemonize --login
│ ├─2888 gnome-session --session gnome-classic
│ ├─2895 dbus-launch --sh-syntax --exit-with-session
La salida anterior se ha condensado. En el mundo real systemctl status generará alrededor de 100 líneas de estados de proceso treed.
Digamos que queremos verificar el estado de nuestro servicio de firewall -
[root@localhost rdc]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2017-01-19 19:14:55 EST; 4h 12min ago
Docs: man:firewalld(1)
Main PID: 825 (firewalld)
CGroup: /system.slice/firewalld.service
└─825 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
Como puede ver, nuestro servicio de firewall está activo actualmente y lo ha estado durante más de 4 horas.
unidades de lista
El comando list-units nos permite listar todas las unidades de un cierto tipo. Comprobemos los sockets gestionados por systemd -
[root@localhost]# systemctl list-units --type=socket
UNIT LOAD ACTIVE SUB DESCRIPTION
avahi-daemon.socket loaded active running Avahi mDNS/DNS-SD Stack Activation Socket
cups.socket loaded active running CUPS Printing Service Sockets
dbus.socket loaded active running D-Bus System Message Bus Socket
dm-event.socket loaded active listening Device-mapper event daemon FIFOs
iscsid.socket loaded active listening Open-iSCSI iscsid Socket
iscsiuio.socket loaded active listening Open-iSCSI iscsiuio Socket
lvm2-lvmetad.socket loaded active running LVM2 metadata daemon socket
lvm2-lvmpolld.socket loaded active listening LVM2 poll daemon socket
rpcbind.socket loaded active listening RPCbind Server Activation Socket
systemd-initctl.socket loaded active listening /dev/initctl Compatibility Named Pipe
systemd-journald.socket loaded active running Journal Socket
systemd-shutdownd.socket loaded active listening Delayed Shutdown Socket
systemd-udevd-control.socket loaded active running udev Control Socket
systemd-udevd-kernel.socket loaded active running udev Kernel Socket
virtlockd.socket loaded active listening Virtual machine lock manager socket
virtlogd.socket loaded active listening Virtual machine log manager socket
Ahora revisemos los servicios en ejecución actuales:
[root@localhost rdc]# systemctl list-units --type=service
UNIT LOAD ACTIVE SUB DESCRIPTION
abrt-ccpp.service loaded active exited Install ABRT coredump hook
abrt-oops.service loaded active running ABRT kernel log watcher
abrt-xorg.service loaded active running ABRT Xorg log watcher
abrtd.service loaded active running ABRT Automated Bug Reporting Tool
accounts-daemon.service loaded active running Accounts Service
alsa-state.service loaded active running Manage Sound Card State (restore and store)
atd.service loaded active running Job spooling tools
auditd.service loaded active running Security Auditing Service
está activo
El comando is-active es un ejemplo de los comandos systemctl diseñados para devolver la información de estado de una unidad.
[root@localhost rdc]# systemctl is-active ksm.service
active
gato
cat es uno de los comandos que rara vez se utilizan. En lugar de usar cat en el shell y escribir la ruta a un archivo de unidad, simplemente use systemctl cat .
[root@localhost]# systemctl cat firewalld
# /usr/lib/systemd/system/firewalld.service
[Unit]
Description=firewalld - dynamic firewall daemon
Before=network.target
Before=libvirtd.service
Before = NetworkManager.service
After=dbus.service
After=polkit.service
Conflicts=iptables.service ip6tables.service ebtables.service ipset.service
Documentation=man:firewalld(1)
[Service]
EnvironmentFile = -/etc/sysconfig/firewalld
ExecStart = /usr/sbin/firewalld --nofork --nopid $FIREWALLD_ARGS ExecReload = /bin/kill -HUP $MAINPID
# supress to log debug and error output also to /var/log/messages
StandardOutput = null
StandardError = null
Type = dbus
BusName = org.fedoraproject.FirewallD1
[Install]
WantedBy = basic.target
Alias = dbus-org.fedoraproject.FirewallD1.service
[root@localhost]#
Ahora que hemos explorado systemd y systemctl con más detalle, usémoslos para administrar los recursos en cgroups o grupos de control .
cgroups o grupos de control son una característica del kernel de Linux que permite a un administrador asignar o limitar los recursos del sistema para servicios y también para agrupar.
Para enumerar los grupos de control activos en ejecución, podemos usar el siguiente comando ps :
[root@localhost]# ps xawf -eo pid,user,cgroup,args
8362 root - \_ [kworker/1:2]
1 root - /usr/lib/systemd/systemd --switched-
root --system -- deserialize 21
507 root 7:cpuacct,cpu:/system.slice /usr/lib/systemd/systemd-journald
527 root 7:cpuacct,cpu:/system.slice /usr/sbin/lvmetad -f
540 root 7:cpuacct,cpu:/system.slice /usr/lib/systemd/systemd-udevd
715 root 7:cpuacct,cpu:/system.slice /sbin/auditd -n
731 root 7:cpuacct,cpu:/system.slice \_ /sbin/audispd
734 root 7:cpuacct,cpu:/system.slice \_ /usr/sbin/sedispatch
737 polkitd 7:cpuacct,cpu:/system.slice /usr/lib/polkit-1/polkitd --no-debug
738 rtkit 6:memory:/system.slice/rtki /usr/libexec/rtkit-daemon
740 dbus 7:cpuacct,cpu:/system.slice /bin/dbus-daemon --system --
address=systemd: --nofork --nopidfile --systemd-activation
La gestión de recursos, a partir de CentOS 6.X, se ha redefinido con la implementación de systemd init . Al pensar en la gestión de recursos para los servicios, lo principal en lo que centrarse son los cgroups .cgroupshan avanzado con systemd tanto en funcionalidad como en simplicidad.
El objetivo de cgroups en la gestión de recursos es que ningún servicio pueda hacer que el sistema se caiga en su totalidad. O ningún proceso de servicio único (tal vez un script PHP mal escrito) paralizará la funcionalidad del servidor al consumir demasiados recursos.
Los cgroups permiten el control de recursos de las unidades para los siguientes recursos:
CPU - Limite las tareas intensivas de la CPU que no son críticas como otras tareas menos intensivas
Memory - Limitar la cantidad de memoria que puede consumir un servicio
Disks - Limitar la E / S del disco
** Tiempo de CPU: **
Las tareas que necesitan menos prioridad de CPU pueden tener Slices de CPU configurados de forma personalizada.
Echemos un vistazo a los siguientes dos servicios, por ejemplo.
Servicio de CPU educado 1
[root@localhost]# systemctl cat polite.service
# /etc/systemd/system/polite.service
[Unit]
Description = Polite service limits CPU Slice and Memory
After=remote-fs.target nss-lookup.target
[Service]
MemoryLimit = 1M
ExecStart = /usr/bin/sha1sum /dev/zero
ExecStop = /bin/kill -WINCH ${MAINPID}
WantedBy=multi-user.target
# /etc/systemd/system/polite.service.d/50-CPUShares.conf
[Service]
CPUShares = 1024
[root@localhost]#
Servicio de CPU malvado 2
[root@localhost]# systemctl cat evil.service
# /etc/systemd/system/evil.service
[Unit]
Description = I Eat You CPU
After=remote-fs.target nss-lookup.target
[Service]
ExecStart = /usr/bin/md5sum /dev/zero
ExecStop = /bin/kill -WINCH ${MAINPID}
WantedBy=multi-user.target
# /etc/systemd/system/evil.service.d/50-CPUShares.conf
[Service]
CPUShares = 1024
[root@localhost]#
Establezcamos el servicio educado con una prioridad de CPU menor:
systemctl set-property polite.service CPUShares = 20
/system.slice/polite.service
1 70.5 124.0K - -
/system.slice/evil.service
1 99.5 304.0K - -
Como podemos ver, durante un período de tiempo de inactividad normal del sistema, ambos procesos no autorizados siguen utilizando ciclos de CPU. Sin embargo, el que está configurado para tener menos intervalos de tiempo está usando menos tiempo de CPU. Con esto en mente, podemos ver cómo el uso de un intervalo de tiempo menor permitiría que las tareas esenciales accedan mejor a los recursos del sistema.
Para establecer servicios para cada recurso, el método set-property define los siguientes parámetros:
systemctl set-property name parameter=value
Rebanadas de CPU | CPUShares |
Limite de memoria | Limite de memoria |
Límite de memoria blanda | MemorySoftLimit |
Peso del bloque IO | BlockIOWeight |
Límite de dispositivo de bloque (especificado en / volume / path)) | BlockIODeviceWeight |
Leer IO | BlockIOReadBandwidth |
E / S de escritura en disco | BlockIOReadBandwidth |
La mayoría de las veces, los servicios estarán limitados por el uso de la CPU , los límites de memoria y la E / S de lectura / escritura .
Después de cambiar cada uno, es necesario volver a cargar systemd y reiniciar el servicio:
systemctl set-property foo.service CPUShares = 250
systemctl daemon-reload
systemctl restart foo.service
Configurar CGroups en CentOS Linux
Para crear cgroups personalizados en CentOS Linux, primero debemos instalar los servicios y configurarlos.
Step 1 - Instale libcgroup (si aún no está instalado).
[root@localhost]# yum install libcgroup
Package libcgroup-0.41-11.el7.x86_64 already installed and latest version
Nothing to do
[root@localhost]#
Como podemos ver, por defecto CentOS 7 tiene libcgroup instalado con el instalador de Everything . El uso de un instalador mínimo requerirá que instalemos las utilidades libcgroup junto con las dependencias.
Step 2 - Inicie y habilite el servicio cgconfig.
[root@localhost]# systemctl enable cgconfig
Created symlink from /etc/systemd/system/sysinit.target.wants/cgconfig.service to /usr/lib/systemd/system/cgconfig.service.
[root@localhost]# systemctl start cgconfig
[root@localhost]# systemctl status cgconfig
● cgconfig.service - Control Group configuration service
Loaded: loaded (/usr/lib/systemd/system/cgconfig.service; enabled; vendor preset: disabled)
Active: active (exited) since Mon 2017-01-23 02:51:42 EST; 1min 21s ago
Main PID: 4692 (code=exited, status = 0/SUCCESS)
Memory: 0B
CGroup: /system.slice/cgconfig.service
Jan 23 02:51:42 localhost.localdomain systemd[1]: Starting Control Group configuration service...
Jan 23 02:51:42 localhost.localdomain systemd[1]: Started Control Group configuration service.
[root@localhost]#
A continuación se muestran los comandos comunes que se utilizan con la gestión de procesos: bg, fg, nohup, ps, pstree, top, kill, killall, free, uptime, nice.
Trabajar con procesos
Quick Note: Process PID in Linux
En Linux, cada proceso en ejecución recibe un PID o Número de ID de proceso. Este PID es la forma en que CentOS identifica un proceso en particular. Como hemos comentado, systemd es el primer proceso que se inicia y se le asigna un PID de 1 en CentOS.
Pgrep se utiliza para obtener el PID de Linux para un nombre de proceso determinado.
[root@CentOS]# pgrep systemd
1
[root@CentOS]#
Como se ve, el comando pgrep devuelve el PID actual de systemd.
Gestión básica de trabajos y procesos CentOS en CentOS
Cuando se trabaja con procesos en Linux, es importante saber cómo se realizan los procesos básicos de primer plano y segundo plano en la línea de comandos.
fg - Trae el proceso a un primer plano
bg - Mover el proceso a un segundo plano
jobs - Lista de los procesos actuales adjuntos al shell
ctrl+z - Combinación de teclas Control + z para dormir el proceso actual
& - Inicia el proceso en segundo plano.
Comencemos a usar el comando de shell sleep .sleepsimplemente hará lo que se le llama, dormir durante un período de tiempo definido: dormir .
[root@CentOS ~]$ jobs [root@CentOS ~]$ sleep 10 &
[1] 12454
[root@CentOS ~]$ sleep 20 & [2] 12479 [root@CentOS ~]$ jobs
[1]- Running sleep 10 &
[2]+ Running sleep 20 &
[cnetos@CentOS ~]$
Ahora, llevemos el primer trabajo a primer plano:
[root@CentOS ~]$ fg 1
sleep 10
Si lo sigue, notará que el trabajo de primer plano está atascado en su shell. Ahora, pongamos el proceso en reposo y luego volvamos a habilitarlo en segundo plano.
- Pulsa control + z
- Escriba: bg 1, envíe el primer trabajo a un segundo plano e inícielo.
[root@CentOS ~]$ fg 1 sleep 20 ^Z [1]+ Stopped sleep 20 [root@CentOS ~]$ bg 1
[1]+ sleep 20 &
[root@CentOS ~]$
nohup
Cuando se trabaja desde un shell o terminal, vale la pena señalar que, por defecto, todos los procesos y trabajos adjuntos al shell terminarán cuando se cierre el shell o el usuario cierre la sesión. Al usar nohup, el proceso continuará ejecutándose si el usuario cierra la sesión o cierra el shell al que está adjunto el proceso.
[root@CentOS]# nohup ping www.google.com &
[1] 27299
nohup: ignoring input and appending output to ‘nohup.out’
[root@CentOS]# pgrep ping
27299
[root@CentOS]# kill -KILL `pgrep ping`
[1]+ Killed nohup ping www.google.com
[root@CentOS rdc]# cat nohup.out
PING www.google.com (216.58.193.68) 56(84) bytes of data.
64 bytes from sea15s07-in-f4.1e100.net (216.58.193.68): icmp_seq = 1 ttl = 128
time = 51.6 ms
64 bytes from sea15s07-in-f4.1e100.net (216.58.193.68): icmp_seq = 2 ttl = 128
time = 54.2 ms
64 bytes from sea15s07-in-f4.1e100.net (216.58.193.68): icmp_seq = 3 ttl = 128
time = 52.7 ms
comando ps
los psLos administradores suelen utilizar este comando para investigar instantáneas de un proceso específico. ps se usa comúnmente con grep para filtrar un proceso específico para analizar.
[root@CentOS ~]$ ps axw | grep python
762 ? Ssl 0:01 /usr/bin/python -Es /usr/sbin/firewalld --nofork -nopid
1296 ? Ssl 0:00 /usr/bin/python -Es /usr/sbin/tuned -l -P
15550 pts/0 S+ 0:00 grep --color=auto python
En el comando anterior, vemos todos los procesos que utilizan el intérprete de Python . También se incluyó con los resultados nuestro comando grep, buscando la cadena python .
A continuación se muestran los modificadores de línea de comandos más comunes que se utilizan con ps .
Cambiar | Acción |
---|---|
un | Excluye restricciones de solo los procesos de informes para el usuario actual |
X | Muestra procesos no adjuntos a un tty o shell |
w | Formatea la visualización de salida amplia de la salida |
mi | Muestra el entorno después del comando. |
-mi | Selecciona todos los procesos |
-o | Salida formateada definida por el usuario |
-u | Muestra todos los procesos de un usuario específico |
-C | Muestra todos los procesos por nombre o id de proceso |
--ordenar | Ordena los procesos por definición |
Para ver todos los procesos en uso por el usuario de nadie :
[root@CentOS ~]$ ps -u nobody PID TTY TIME CMD 1853 ? 00:00:00 dnsmasq [root@CentOS ~]$
Para ver toda la información sobre el proceso firewalld :
[root@CentOS ~]$ ps -wl -C firewalld F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 0 S 0 762 1 0 80 0 - 81786 poll_s ? 00:00:01 firewalld [root@CentOS ~]$
Veamos qué procesos consumen más memoria:
[root@CentOS ~]$ ps aux --sort=-pmem | head -10 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND cnetos 6130 0.7 5.7 1344512 108364 ? Sl 02:16 0:29 /usr/bin/gnome-shell cnetos 6449 0.0 3.4 1375872 64440 ? Sl 02:16 0:00 /usr/libexec/evolution-calendar-factory root 5404 0.6 2.1 190256 39920 tty1 Ssl+ 02:15 0:27 /usr/bin/Xorg :0 -background none -noreset -audit 4 -verbose -auth /run/gdm/auth-for-gdm-iDefCt/database -seat seat0 -nolisten tcp vt1 cnetos 6296 0.0 1.7 1081944 32136 ? Sl 02:16 0:00 /usr/libexec/evolution/3.12/evolution-alarm-notify cnetos 6350 0.0 1.5 560728 29844 ? Sl 02:16 0:01 /usr/bin/prlsga cnetos 6158 0.0 1.4 1026956 28004 ? Sl 02:16 0:00 /usr/libexec/gnome-shell-calendar-server cnetos 6169 0.0 1.4 1120028 27576 ? Sl 02:16 0:00 /usr/libexec/evolution-source-registry root 762 0.0 1.4 327144 26724 ? Ssl 02:09 0:01 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid cnetos 6026 0.0 1.4 1090832 26376 ? Sl 02:16 0:00 /usr/libexec/gnome-settings-daemon [root@CentOS ~]$
Ver todos los procesos por usuario centos y formato, mostrando la salida personalizada -
[cnetos@CentOS ~]$ ps -u cnetos -o pid,uname,comm
PID USER COMMAND
5802 centos gnome-keyring-d
5812 cnetos gnome-session
5819 cnetos dbus-launch
5820 cnetos dbus-daemon
5888 cnetos gvfsd
5893 cnetos gvfsd-fuse
5980 cnetos ssh-agent
5996 cnetos at-spi-bus-laun
comando pstree
pstreees similar a ps pero no se usa con frecuencia. Muestra los procesos en forma de árbol más ordenada.
[centos@CentOS ~]$ pstree
systemd─┬─ModemManager───2*[{ModemManager}]
├─NetworkManager─┬─dhclient
│ └─2*[{NetworkManager}]
├─2*[abrt-watch-log]
├─abrtd
├─accounts-daemon───2*[{accounts-daemon}]
├─alsactl
├─at-spi-bus-laun─┬─dbus-daemon───{dbus-daemon}
│ └─3*[{at-spi-bus-laun}]
├─at-spi2-registr───2*[{at-spi2-registr}]
├─atd
├─auditd─┬─audispd─┬─sedispatch
│ │ └─{audispd}
│ └─{auditd}
├─avahi-daemon───avahi-daemon
├─caribou───2*[{caribou}]
├─cgrulesengd
├─chronyd
├─colord───2*[{colord}]
├─crond
├─cupsd
La salida total de pstree puede superar las 100 líneas. Por lo general, ps proporcionará información más útil.
comando superior
topes uno de los comandos más utilizados para solucionar problemas de rendimiento en Linux. Es útil para estadísticas en tiempo real y monitoreo de procesos en Linux. A continuación se muestra la salida predeterminada de top cuando se abre desde la línea de comando.
Tasks: 170 total, 1 running, 169 sleeping, 0 stopped, 0 zombie
%Cpu(s): 2.3 us, 2.0 sy, 0.0 ni, 95.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1879668 total, 177020 free, 607544 used, 1095104 buff/cache
KiB Swap: 3145724 total, 3145428 free, 296 used. 1034648 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
5404 root 20 0 197832 48024 6744 S 1.3 2.6 1:13.22 Xorg
8013 centos 20 0 555316 23104 13140 S 1.0 1.2 0:14.89 gnome-terminal-
6339 centos 20 0 332336 6016 3248 S 0.3 0.3 0:23.71 prlcc
6351 centos 20 0 21044 1532 1292 S 0.3 0.1 0:02.66 prlshprof
Teclas de acceso rápido comunes que se utilizan mientras se ejecuta top ( se accede a las teclas de acceso rápido presionando la tecla mientras top se ejecuta en su shell).
Mando | Acción |
---|---|
segundo | Habilita / deshabilita el resaltado en negrita en el menú superior |
z | Cicla el esquema de color |
l | Cicla el rumbo promedio de la carga |
metro | Cicla el rumbo promedio de la memoria |
t | Encabezado de información de la tarea |
h | Menú de ayuda |
Mayús + F | Personaliza los campos de clasificación y visualización |
A continuación se muestran los modificadores de línea de comando comunes para top .
Mando | Acción |
---|---|
-o | Ordena por columna (puede anteponer - o + para ordenar de forma ascendente o descendente) |
-u | Muestra solo los procesos de un usuario específico |
-re | Actualiza el tiempo de retraso de top |
-O | Devuelve una lista de columnas cuya parte superior puede aplicar ordenación |
Clasificación de pantalla de opciones en la parte superior, presentado usando Shift + F . Esta pantalla permite personalizar la visualización superior y las opciones de clasificación.
Fields Management for window 1:Def, whose current sort field is %MEM
Navigate with Up/Dn, Right selects for move then <Enter> or Left commits,
'd' or <Space> toggles display, 's' sets sort. Use 'q' or <Esc> to end!
* PID = Process Id TGID = Thread Group Id
* USER = Effective User Name ENVIRON = Environment vars
* PR = Priority vMj = Major Faults delta
* NI = Nice Value vMn = Minor Faults delta
* VIRT = Virtual Image (KiB) USED = Res+Swap Size (KiB)
* RES = Resident Size (KiB) nsIPC = IPC namespace Inode
* SHR = Shared Memory (KiB) nsMNT = MNT namespace Inode
* S = Process Status nsNET = NET namespace Inode
* %CPU = CPU Usage nsPID = PID namespace Inode
* %MEM = Memory Usage (RES) nsUSER = USER namespace Inode
* TIME+ = CPU Time, hundredths nsUTS = UTS namespace Inode
* COMMAND = Command Name/Line
PPID = Parent Process pid
UID = Effective User Id
arriba , mostrando los procesos para el usuario rdc y ordenados por uso de memoria -
PID USER %MEM PR NI VIRT RES SHR S %CPU TIME+ COMMAND
6130 rdc 6.2 20 0 1349592 117160 33232 S 0.0 1:09.34 gnome-shell
6449 rdc 3.4 20 0 1375872 64428 21400 S 0.0 0:00.43 evolution-calen
6296 rdc 1.7 20 0 1081944 32140 22596 S 0.0 0:00.40 evolution-alarm
6350 rdc 1.6 20 0 560728 29844 4256 S 0.0 0:10.16 prlsga
6281 rdc 1.5 20 0 1027176 28808 17680 S 0.0 0:00.78 nautilus
6158 rdc 1.5 20 0 1026956 28004 19072 S 0.0 0:00.20 gnome-shell-cal
Mostrando campos superiores válidos (condensados) -
[centos@CentOS ~]$ top -O
PID
PPID
UID
USER
RUID
RUSER
SUID
SUSER
GID
GROUP
PGRP
TTY
TPGID
Matar comando
los killEl comando se usa para matar un proceso desde el shell de comandos a través de su PID. Al matar un proceso, necesitamos especificar una señal para enviar. La señal le permite al kernel saber cómo queremos terminar el proceso. Las señales más utilizadas son:
SIGTERMestá implícito ya que el kernel le permite a un proceso saber que debe detenerse pronto, ya que es seguro hacerlo. SIGTERM le da al proceso la oportunidad de salir con gracia y realizar operaciones de salida seguras.
SIGHUPla mayoría de los demonios se reiniciarán cuando se envíen SIGHUP . Esto se usa a menudo en los procesos cuando se han realizado cambios en un archivo de configuración.
SIGKILLya que SIGTERM es el equivalente a pedirle a un proceso que se apague. El kernel necesita una opción para finalizar un proceso que no cumplirá con las solicitudes. Cuando se cuelga un proceso, la opción SIGKILL se utiliza para cerrar el proceso explícitamente.
Para obtener una lista de todas las señales que se pueden enviar con matar al -l opción se puede utilizar -
[root@CentOS]# kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
[root@CentOS rdc]#
Usando SIGHUP para reiniciar el sistema.
[root@CentOS]# pgrep systemd
1
464
500
643
15071
[root@CentOS]# kill -HUP 1
[root@CentOS]# pgrep systemd
1
464
500
643
15196
15197
15198
[root@CentOS]#
pkillpermitirá al administrador enviar una matanza de señal por el nombre del proceso.
[root@CentOS]# pgrep ping
19450
[root@CentOS]# pkill -9 ping
[root@CentOS]# pgrep ping
[root@CentOS]#
killallmatará todos los procesos. Tenga cuidado al usar killall como root, ya que matará todos los procesos para todos los usuarios.
[root@CentOS]# killall chrome
comando libre
freees un comando bastante simple que se usa a menudo para verificar rápidamente la memoria de un sistema. Muestra la cantidad total de memoria física y de intercambio utilizada.
[root@CentOS]# free
total used free shared buff/cache available
Mem: 1879668 526284 699796 10304 653588 1141412
Swap: 3145724 0 3145724
[root@CentOS]#
buen comando
nicepermitirá que un administrador establezca la prioridad de programación de un proceso en términos de uso de CPU. La bondad es básicamente cómo el kernel programará los intervalos de tiempo de la CPU para un proceso o trabajo. De forma predeterminada, se asume que el proceso tiene el mismo acceso a los recursos de la CPU.
Primero, usemos top para verificar la bondad de los procesos que se están ejecutando actualmente.
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
28 root 39 19 0 0 0 S 0.0 0.0 0:00.17 khugepaged
690 root 39 19 16808 1396 1164 S 0.0 0.1 0:00.01 alsactl]
9598 rdc 39 19 980596 21904 10284 S 0.0 1.2 0:00.27 tracker-extract
9599 rdc 39 19 469876 9608 6980 S 0.0 0.5 0:00.04 tracker-miner-a
9609 rdc 39 19 636528 13172 8044 S 0.0 0.7 0:00.12 tracker-miner-f
9611 rdc 39 19 469620 8984 6496 S 0.0 0.5 0:00.02 tracker-miner-u
27 root 25 5 0 0 0 S 0.0 0.0 0:00.00 ksmd
637 rtkit 21 1 164648 1276 1068 S 0.0 0.1 0:00.11 rtkit-daemon
1 root 20 0 128096 6712 3964 S 0.3 0.4 0:03.57 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.50 ksoftirqd/0
7 root 20 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
9 root 20 0 0 0 0 S 0.0 0.0 0:02.07 rcu_sched
Queremos centrarnos en la columna NICE representada por NI . El rango de bondad puede estar entre -20 y 19 positivos. -20 representa la máxima prioridad dada.
nohup nice --20 ping www.google.com &
re bueno
renice nos permite cambiar la prioridad actual de un proceso que ya se está ejecutando.
renice 17 -p 30727
El comando anterior reducirá la prioridad de nuestro comando de proceso de ping .
firewalld es el controlador de front-end predeterminado para iptables en CentOS. El front-end de firewalld tiene dos ventajas principales sobre iptables sin procesar:
Utiliza zonas fáciles de configurar e implementar que abstraen cadenas y reglas.
Los conjuntos de reglas son dinámicas, lo que significa que las conexiones con estado no se interrumpen cuando se cambian y / o modifican las configuraciones.
Recuerde, firewalld es el contenedor de iptables, no un reemplazo. Si bien los comandos personalizados de iptables se pueden usar con firewalld , se recomienda usar firewalld para no romper la funcionalidad del firewall.
Primero, asegurémonos de que firewalld esté iniciado y habilitado.
[root@CentOS rdc]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2017-01-26 21:42:05 MST; 3h 46min ago
Docs: man:firewalld(1)
Main PID: 712 (firewalld)
Memory: 34.7M
CGroup: /system.slice/firewalld.service
└─712 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
Podemos ver que firewalld está activo (para comenzar en el arranque) y actualmente en ejecución. Si está inactivo o no se inicia podemos usar -
systemctl start firewalld && systemctl enable firewalld
Ahora que tenemos nuestro servicio firewalld configurado, asegurémonos de que esté operativo.
[root@CentOS]# firewall-cmd --state
running
[root@CentOS]#
Podemos ver que el servicio firewalld es completamente funcional.
Firewalld trabaja en el concepto de zonas . Se aplica una zona a las interfaces de red a través de Network Manager. Discutiremos esto en la configuración de redes . Pero por ahora, de forma predeterminada, cambiar la zona predeterminada cambiará cualquier adaptador de red que quede en el estado predeterminado de "Zona predeterminada".
Echemos un vistazo rápido a cada zona que viene lista para usar con firewalld .
No Señor. | Zona y descripción |
---|---|
1 | drop Nivel de confianza bajo. Todas las conexiones y paquetes entrantes se descartan y solo las conexiones salientes son posibles a través de statefullness |
2 | block Las conexiones entrantes se responden con un mensaje icmp que le informa al iniciador que la solicitud está prohibida |
3 | public Todas las redes están restringidas. Sin embargo, las conexiones entrantes seleccionadas se pueden permitir explícitamente |
4 | external Configura firewalld para NAT. La red interna sigue siendo privada pero accesible |
5 | dmz Solo se permiten determinadas conexiones entrantes. Utilizado para sistemas en aislamiento DMZ |
6 | work De forma predeterminada, confíe en más computadoras en la red asumiendo que el sistema se encuentra en un entorno de trabajo seguro |
7 | hone De forma predeterminada, hay más servicios sin filtrar. Suponiendo que un sistema está en una red doméstica donde se utilizarán servicios como NFS, SAMBA y SSDP |
8 | trusted Todas las máquinas de la red son de confianza. La mayoría de las conexiones entrantes se permiten sin restricciones.This is not meant for interfaces exposed to the Internet |
Las zonas más comunes para usar son: público, gota, trabajo y hogar.
Algunos escenarios en los que se utilizaría cada zona común son:
public- Es la zona más utilizada por un administrador. Le permitirá aplicar la configuración personalizada y cumplir con las especificaciones RFC para las operaciones en una LAN.
drop- Un buen ejemplo de cuándo usar drop es en una conferencia de seguridad, en una red WiFi pública o en una interfaz conectada directamente a Internet. drop asume que todas las solicitudes no solicitadas son maliciosas, incluidas las sondas ICMP. Por lo tanto, cualquier solicitud fuera del estado no recibirá respuesta. La desventaja de la caída es que puede romper la funcionalidad de las aplicaciones en ciertas situaciones que requieren un estricto cumplimiento de RFC.
work- Se encuentra en una LAN corporativa semisegura. Donde todo el tráfico se puede asumir como moderadamente seguro. Esto significa que no es WiFi y posiblemente tengamos IDS, IPS y seguridad física o 802.1x en su lugar. También debemos estar familiarizados con las personas que utilizan la LAN.
home- Estás en una LAN doméstica. Usted es personalmente responsable de cada sistema y usuario de la LAN. Conoce todas las máquinas de la LAN y ninguna se ha visto comprometida. A menudo, surgen nuevos servicios para compartir contenido multimedia entre personas de confianza y no es necesario dedicar tiempo adicional por motivos de seguridad.
Las zonas y las interfaces de red funcionan en un nivel de uno a varios. Una interfaz de red solo puede tener una zona aplicada a la vez. Mientras que, una zona se puede aplicar a muchas interfaces simultáneamente.
Veamos qué zonas están disponibles y cuál es la zona aplicada actualmente.
[root@CentOS]# firewall-cmd --get-zones
work drop internal external trusted home dmz public block
[root@CentOS]# firewall-cmd --get-default-zone
public
[root@CentOS]#
¿Listo para agregar algunas reglas personalizadas en firewalld?
Primero, veamos cómo se ve nuestra caja, para un explorador de puertos desde el exterior.
bash-3.2# nmap -sS -p 1-1024 -T 5 10.211.55.1
Starting Nmap 7.30 ( https://nmap.org ) at 2017-01-27 23:36 MST
Nmap scan report for centos.shared (10.211.55.1)
Host is up (0.00046s latency).
Not shown: 1023 filtered ports
PORT STATE SERVICE
22/tcp open ssh
Nmap done: 1 IP address (1 host up) scanned in 3.71 seconds
bash-3.2#
Permitamos que las solicitudes entrantes lleguen al puerto 80.
Primero, verifique qué zona se aplica por defecto.
[root@CentOs]# firewall-cmd --get-default-zone
public
[root@CentOS]#
Luego, configure la regla que permite al puerto 80 a la zona predeterminada actual.
[root@CentOS]# firewall-cmd --zone=public --add-port = 80/tcp
success
[root@CentOS]#
Ahora, marquemos nuestra casilla después de permitir las conexiones del puerto 80.
bash-3.2# nmap -sS -p 1-1024 -T 5 10.211.55.1
Starting Nmap 7.30 ( https://nmap.org ) at 2017-01-27 23:42 MST
Nmap scan report for centos.shared (10.211.55.1)
Host is up (0.00053s latency).
Not shown: 1022 filtered ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp closed http
Nmap done: 1 IP address (1 host up) scanned in 3.67 seconds
bash-3.2#
Ahora permite el tráfico no solicitado a 80.
Pongamos la zona predeterminada para eliminar y veamos qué sucede con el escaneo de puertos.
[root@CentOS]# firewall-cmd --set-default-zone=drop
success
[root@CentOS]# firewall-cmd --get-default-zone
drop
[root@CentOs]#
Ahora escaneemos el host con la interfaz de red en una zona más segura.
bash-3.2# nmap -sS -p 1-1024 -T 5 10.211.55.1
Starting Nmap 7.30 ( https://nmap.org ) at 2017-01-27 23:50 MST
Nmap scan report for centos.shared (10.211.55.1)
Host is up (0.00094s latency).
All 1024 scanned ports on centos.shared (10.211.55.1) are filtered
Nmap done: 1 IP address (1 host up) scanned in 12.61 seconds
bash-3.2#
Ahora todo está filtrado desde fuera.
Como se demuestra a continuación, el host ni siquiera responderá a las solicitudes de ping ICMP cuando esté en caída .
bash-3.2# ping 10.211.55.1
PING 10.211.55.1 (10.211.55.1): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
Request timeout for icmp_seq 2
Establezcamos la zona predeterminada en pública nuevamente.
[root@CentOs]# firewall-cmd --set-default-zone=public
success
[root@CentOS]# firewall-cmd --get-default-zone
public
[root@CentOS]#
Ahora revisemos nuestro conjunto de reglas de filtrado actual en público .
[root@CentOS]# firewall-cmd --zone=public --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: enp0s5
sources:
services: dhcpv6-client ssh
ports: 80/tcp
protocols:
masquerade: no
forward-ports:
sourceports:
icmp-blocks:
rich rules:
[root@CentOS rdc]#
Tal como está configurado, nuestra regla de filtro del puerto 80 está solo dentro del contexto de la configuración en ejecución. Esto significa que una vez que se reinicia el sistema o se reinicia el servicio firewalld, nuestra regla se descartará.
Pronto configuraremos un demonio httpd , así que hagamos que nuestros cambios sean persistentes:
[root@CentOS]# firewall-cmd --zone=public --add-port=80/tcp --permanent
success
[root@CentOS]# systemctl restart firewalld
[root@CentOS]#
Ahora, nuestra regla del puerto 80 en la zona pública es persistente entre reinicios y reinicios del servicio.
A continuación se muestran los comandos de firewalld comunes que se aplican con firewall-cmd .
Mando | Acción |
---|---|
firewall-cmd --get-zones | Enumera todas las zonas que se pueden aplicar a una interfaz. |
firewall-cmd —status | Devuelve el estado actual del servicio firewalld |
firewall-cmd --get-default-zone | Obtiene la zona predeterminada actual |
firewall-cmd --set-default-zone = <zona> | Establece la zona predeterminada en el contexto actual |
firewall-cmd --get-active-zone | Obtiene las zonas actuales en contexto según se aplica a una interfaz |
firewall-cmd --zone = <zone> --list-all | Muestra la configuración de la zona suministrada |
firewall-cmd --zone = <zone> --addport = <puerto / protocolo de transporte> | Aplica una regla de puerto al filtro de zona |
--permanente | Hace que los cambios en la zona sean persistentes. La bandera se usa en línea con los comandos de modificación |
Estos son los conceptos básicos para administrar y configurar firewalld .
Configurar los servicios de firewall basados en host en CentOS puede ser una tarea compleja en escenarios de redes más sofisticados. El uso y la configuración avanzados de firewalld e iptables en CentOS pueden requerir un tutorial completo. Sin embargo, hemos presentado los conceptos básicos que deberían ser suficientes para completar la mayoría de las tareas diarias.
PHP es uno de los lenguajes web más prolíficos en uso en la actualidad. Instalación de una lámpara de pila en CentOS es algo va a necesitar cada administrador del sistema para llevar a cabo, muy probablemente más pronto que tarde.
Una pila LAMP tradicional consta de (L) inux (A) pache (M) ySQL (P) HP.
Hay tres componentes principales en una pila LAMP en CentOS:
- Servidor web
- Plataforma / lenguaje de desarrollo web
- Servidor de base de datos
Note- El término LAMP Stack también puede incluir las siguientes tecnologías: PostgreSQL, MariaDB, Perl, Python, Ruby, NGINX Webserver.
Para este tutorial, nos quedaremos con la pila LAMP tradicional de CentOS GNU Linux: servidor web Apache, servidor de base de datos MySQL y PHP.
De hecho, usaremos MariaDB. Los archivos de configuración, las bases de datos y las tablas de MySQL son transparentes para MariaDB. MariaDB ahora se incluye en el repositorio estándar de CentOS en lugar de MySQL. Esto se debe a las limitaciones de las licencias y el cumplimiento de código abierto, ya que Oracle se ha hecho cargo del desarrollo de MySQL.
Lo primero que debemos hacer es instalar Apache.
[root@CentOS]# yum install httpd
Loaded plugins: fastestmirror, langpacks
base
| 3.6 kB 00:00:00
extras
| 3.4 kB 00:00:00
updates
| 3.4 kB 00:00:00
extras/7/x86_64/primary_d
| 121 kB 00:00:00
Loading mirror speeds from cached hostfile
* base: mirror.sigmanet.com
* extras: linux.mirrors.es.net
* updates: mirror.eboundhost.com
Resolving Dependencies
--> Running transaction check
---> Package httpd.x86_64 0:2.4.6-45.el7.centos will be installed
--> Processing Dependency: httpd-tools = 2.4.6-45.el7.centos for package:
httpd-2.4.6-45.el7.centos.x86_64
--> Processing Dependency: /etc/mime.types for package: httpd-2.4.645.el7.centos.x86_64
--> Running transaction check
---> Package httpd-tools.x86_64 0:2.4.6-45.el7.centos will be installed
---> Package mailcap.noarch 0:2.1.41-2.el7 will be installed
--> Finished Dependency Resolution
Installed:
httpd.x86_64 0:2.4.6-45.el7.centos
Dependency Installed:
httpd-tools.x86_64 0:2.4.6-45.el7.centos
mailcap.noarch 0:2.1.41-2.el7
Complete!
[root@CentOS]#
Configuremos el servicio httpd .
[root@CentOS]# systemctl start httpd && systemctl enable httpd
Ahora, asegurémonos de que se pueda acceder al servidor web a través de firewalld.
bash-3.2# nmap -sS -p 1-1024 -T 5 -sV 10.211.55.1
Starting Nmap 7.30 ( https://nmap.org ) at 2017-01-28 02:00 MST
Nmap scan report for centos.shared (10.211.55.1)
Host is up (0.00054s latency).
Not shown: 1022 filtered ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 6.6.1 (protocol 2.0)
80/tcp open http Apache httpd 2.4.6 ((CentOS))
Service detection performed. Please report any incorrect results at
https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 10.82 seconds bash-3.2#
Como puede ver en la sonda del servicio nmap, el servidor web Apache está escuchando y respondiendo a las solicitudes en el host CentOS.
Instalar servidor de base de datos MySQL
[root@CentOS rdc]# yum install mariadb-server.x86_64 && yum install mariadb-
devel.x86_64 && mariadb.x86_64 && mariadb-libs.x86_64
Estamos instalando los siguientes paquetes de repositorio para MariaDB:
mariadb-server.x86_64
El paquete principal de demonios del servidor MariaDB.
mariadb-devel.x86_64
Los archivos deben compilarse desde la fuente con compatibilidad MySQL / MariaDB.
mariadb.x86_64
Utilidades del cliente MariaDB para administrar MariaDB Server desde la línea de comandos.
mariadb-libs.x86_64
Bibliotecas comunes para MariaDB que podrían ser necesarias para otras aplicaciones compiladas con soporte MySQL / MariaDB.
Ahora, comencemos y habilitemos el servicio MariaDB.
[root@CentOS]# systemctl start mariadb
[root@CentOS]# systemctl enable mariadb
Note- A diferencia de Apache, no habilitaremos las conexiones a MariaDB a través de nuestro firewall basado en host (firewalld). Cuando se utiliza un servidor de base de datos, se considera una mejor práctica de seguridad permitir solo conexiones de socket locales, a menos que se necesite específicamente el acceso de socket remoto.
Asegurémonos de que MariaDB Server acepte conexiones.
[root@CentOS#] netstat -lnt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN
tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
[root@CentOS rdc]#
Como podemos ver, MariaDB está escuchando en el puerto 3306 tcp. Dejaremos nuestro firewall basado en host (firewalld) bloqueando las conexiones entrantes al puerto 3306.
Instalar y configurar PHP
[root@CentOS#] yum install php.x86_64 && php-common.x86_64 && php-mysql.x86_64
&& php-mysqlnd.x86_64 && php-pdo.x86_64 && php-soap.x86_64 && php-xml.x86_64
Recomendaría instalar los siguientes paquetes php para una compatibilidad común:
- php-common.x86_64
- php-mysql.x86_64
- php-mysqlnd.x86_64
- php-pdo.x86_64
- php-soap.x86_64
- php-xml.x86_64
[root@CentOS]# yum install -y php-common.x86_64 php-mysql.x86_64 php-
mysqlnd.x86_64 php-pdo.x86_64 php-soap.x86_64 php-xml.x86_64
Este es nuestro archivo php simple ubicado en la raíz web de Apache de / var / www / html /
[root@CentOS]# cat /var/www/html/index.php
<html>
<head>
<title>PHP Test Page</title>
</head>
<body>
PHP Install
<?php
echo "We are now running PHP on GNU Centos Linux!<br />"
?>
</body>
</html>
[root@CentOS]#
Cambiemos el grupo propietario de nuestra página al usuario del sistema bajo el que se ejecuta nuestro demonio http.
[root@CentOS]# chgrp httpd /var/www/html/index.php && chmod g+rx /var/www/html/index.php
---
Cuando se solicita manualmente a través de ncat.
bash-3.2# ncat 10.211.55.1 80
GET / index.php
HTTP/1.1 200 OK
Date: Sat, 28 Jan 2017 12:06:02 GMT
Server: Apache/2.4.6 (CentOS) PHP/5.4.16
X-Powered-By: PHP/5.4.16
Content-Length: 137
Connection: close
Content-Type: text/html; charset=UTF-8
<html>
<head>
<title>PHP Test Page</title>
</head>
<body>
PHP Install
We are now running PHP on GNU Centos Linux!<br />
</body>
</html>
bash-3.2#
PHP y LAMP son tecnologías de programación web muy populares. La instalación y configuración de LAMP seguramente aparecerá en su lista de necesidades como administrador de CentOS. Los paquetes CentOS fáciles de usar han requerido mucho trabajo para compilar Apache, MySQL y PHP desde el código fuente.
Python es un lenguaje interpretado ampliamente utilizado que ha aportado profesionalismo al mundo de la codificación de aplicaciones con secuencias de comandos en Linux (y otros sistemas operativos). Donde Perl fue una vez el estándar de la industria, Python ha superado a Perl en muchos aspectos.
Algunas de las fortalezas de Python frente a Perl son:
Progresión rápida en el refinamiento
Bibliotecas que son estándar para el idioma
La legibilidad del código está pensada en la definición del lenguaje.
Muchos marcos profesionales para todo, desde el soporte de GUI hasta el desarrollo web
Python puede hacer cualquier cosa que Perl pueda hacer y, en muchos casos, de mejor manera. Aunque Perl todavía tiene su lugar entre la caja de herramientas de un administrador de Linux, aprender Python es una gran opción como conjunto de habilidades.
Los mayores inconvenientes de Python a veces están relacionados con sus fortalezas. En la historia, Python fue diseñado originalmente para enseñar programación. A veces, sus fundamentos básicos de "fácil lectura" y "hacer las cosas de la manera correcta" pueden causar complejidades innecesarias al escribir un código simple. Además, sus bibliotecas estándar han causado problemas en la transición de las versiones 2.X a 3.X.
Los scripts de Python se utilizan realmente en el núcleo de CentOS para funciones vitales para la funcionalidad del sistema operativo. Debido a esto, es importante aislar nuestro entorno Python de desarrollo del entorno Python central de CentOS.
Para empezar, actualmente hay dos versiones de Python: Python 2.X y Python 3.X.
Ambas etapas todavía están en producción activa, aunque la versión 2.X se está acercando rápidamente a la depreciación (y lo ha estado durante algunos años). La razón de las dos versiones activas de Python fue básicamente solucionar las deficiencias de la versión 2.X. Esto requirió que se rehicieran algunas funciones básicas de la versión 3.X de una manera que no podría admitir algunos scripts de la versión 2.X.
Básicamente, la mejor manera de superar esta transición es: Desarrollar para 3.X y mantenerse actualizado con la última versión 2.X para scripts heredados. Actualmente, CentOS 7.X se basa en una revisión semi-actual de la versión 2.X.
Al momento de escribir estas líneas, las versiones más actuales de Python son: 3.4.6 y 2.7.13.
No dejes que esto confunda o saque conclusiones de Python. Configurar un entorno Python es realmente bastante simple. Con los frameworks y bibliotecas de Python, esta tarea es realmente fácil de realizar.
Antes de configurar nuestros entornos Python, necesitamos un entorno sano. Para comenzar, asegurémonos de que nuestra instalación de CentOS esté completamente actualizada y de que instalemos algunas utilidades de construcción.
Step 1 - Actualiza CentOS.
[root@CentOS]# yum -y update
Step 2 - Instalar utilidades de compilación.
[root@CentOS]# yum -y groupinstall "development tools"
Step 3 - Instale algunos paquetes necesarios.
[root@CentOS]# yum install -y zlib-dev openssl-devel sqlite-devel bip2-devel
Ahora necesitamos instalar Python 2.X y 3.X actuales desde la fuente.
- Descargar archivos comprimidos
- Extraer archivos
- Compilar código fuente
Comencemos creando un directorio de compilación para cada instalación de Python en / usr / src /
[root@CentOS]# mkdir -p /usr/src/pythonSource
Ahora descarguemos los archivos tar de origen para cada uno:
[root@CentOS]# wget https://www.python.org/ftp/python/2.7.13/Python-2.7.13.tar.xz
[root@CentOS]# wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0.tar.xz
Ahora necesitamos extraer cada uno del archivo.
Step 1 - Instale xz-libs y extraiga los archivos tar.
[root@CentOS]# yum install xz-libs
[root@CentOS python3]# xz -d ./*.xz
[root@CentOS python3]# ls
Python-2.7.13.tar Python-3.6.0.tar
[root@CentOS python3]#
Step 2 - Desinstale cada instalador de su tarball.
[root@CentOS]# tar -xvf ./Python-2.7.13.tar
[root@CentOS]# tar -xvf ./Python-3.6.0.tar
Step 3 - Ingrese a cada directorio y ejecute el script de configuración.
[root@CentOS]# ./configure --prefix=/usr/local
root@CentOS]# make altinstall
Note - Asegúrese de usar altinstally no instalar. Esto mantendrá CentOS y las versiones de desarrollo de Python separadas. De lo contrario, puede romper la funcionalidad de CentOS.
Ahora verá que comienza el proceso de compilación. Toma una taza de café y tómate un descanso de 15 minutos hasta completarlo. Dado que instalamos todas las dependencias necesarias para Python, el proceso de compilación debería completarse sin errores.
Asegurémonos de tener instalada la última versión 2.X de Python.
[root@CentOS Python-2.7.13]# /usr/local/bin/python2.7 -V
Python 2.7.13
[root@CentOS Python-2.7.13]#
Note - Querrá prefijar la línea shebang que apunta a nuestro entorno de desarrollo para Python 2.X.
[root@CentOS Python-2.7.13]# cat ver.py
#!/usr/local/bin/python2.7
import sys
print(sys.version)
[root@CentOS Python-2.7.13]# ./ver.py
2.7.13 (default, Jan 29 2017, 02:24:08)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]
Así, tenemos instalaciones de Python separadas para las versiones 2.X y 3.X. Desde aquí, podemos usar cada uno y utilidades comopip y virtualenv para aliviar aún más la carga de administrar los entornos de Python y la instalación de paquetes.
Ruby es un gran lenguaje tanto para el desarrollo web como para la administración de Linux. Ruby proporciona muchos beneficios que se encuentran en todos los lenguajes anteriores discutidos: PHP, Python y Perl.
Para instalar Ruby, lo mejor es arrancar a través de rbenv, lo que permite a los administradores instalar y administrar entornos Ruby fácilmente.
El otro método para instalar Ruby son los paquetes estándar de CentOS para Ruby. Es recomendable utilizar el método rbenv con todos sus beneficios. Los paquetes CentOS serán más fáciles para los que no son expertos en Ruby.
Primero, obtengamos algunas dependencias necesarias para el instalador de rbenv.
- git-core
- zlib
- zlib-devel
- gcc-c++
- patch
- readline
- readline-devel
- libyaml-devel
- libffi-devel
- openssl-devel
- make
- bzzip2
- autoconf
- automake
- libtool
- bison
- curl
- sqlite-devel
Es posible que la mayoría de estos paquetes ya estén instalados según las opciones y roles elegidos al instalar CentOS. Es bueno instalar todo aquello de lo que no estamos seguros, ya que esto puede generar menos dolores de cabeza al instalar paquetes que requieren dependencias.
[root@CentOS]# yum -y install git-core zlib zlib-devel gcc-c++ patch readline
readline-devel libyaml-devel libffi-devel openssl-devel make bzip2 autoconf
automake libtool bison curl sqlite-devel
Método 1: rbenv para entornos de desarrollo dinámicos de Ruby
Ahora, como usuario que usará Ruby :
[rdc@CentOS ~]$ git clone https://github.com/rbenv/rbenv.git
[rdc@CentOS ~]$ https://github.com/rbenv/ruby-build.git
ruby-build proporcionará características de instalación a rbenv -
Note- Necesitamos cambiar a root o un usuario de administración antes de ejecutar install.sh
[rdc@CentOS ruby-build]$ cd ~/ruby-build
[rdc@CentOS ruby-build]# ./install.sh
Configuremos nuestro shell para rbenv y asegurémonos de haber instalado las opciones correctas.
[rdc@CentOS ~]$ source ~/rbenv/rbenv.d/exec/gem-rehash.bash [rdc@CentOS ruby-build]$ ~/rbenv/bin/rbenv
rbenv 1.1.0-2-g4f8925a
Usage: rbenv <command> [<args>]
Algunos comandos rbenv útiles son:
Comandos | Acción |
---|---|
local | Establece o muestra la versión de Ruby específica de la aplicación local |
global | Establece o muestra la versión global de Ruby |
cáscara | Establece o muestra la versión de Ruby específica de shell |
Instalar en pc | Instala una versión de Ruby usando ruby-build |
desinstalar | Desinstala una versión específica de Ruby |
refrito | Repite rbenv shims (ejecute esto después de instalar ejecutables) |
versión | Muestra la versión actual de Ruby y su origen. |
versiones | Lista todas las versiones de Ruby disponibles para rbenv |
cual | Muestra la ruta completa a un ejecutable. |
De dónde | Enumera todas las versiones de Ruby que contienen el ejecutable dado |
Instalemos ahora Ruby -
[rdc@CentOS bin]$ ~/rbenv/bin/rbenv install -v 2.2.1
Después de que se complete la compilación -
[rdc@CentOS ~]$ ./ruby -v
ruby 2.2.1p85 (2015-02-26 revision 49769) [x86_64-linux]
[rdc@CentOS ~]$
Ahora tenemos un entorno Ruby en funcionamiento con una versión actualizada y funcional de la rama Ruby 2.X.
Método 2: instalar Ruby desde paquetes CentOS
Este es el método más simple. Sin embargo, puede estar limitado por la versión y las gemas empaquetadas desde CentOS. Para un trabajo de desarrollo serio, se recomienda encarecidamente utilizar el método rbenv para instalar Ruby.
Instale Ruby, los paquetes de desarrollo necesarios y algunas gemas comunes.
[root@CentOS rdc]# yum install -y ruby.x86_64 ruby-devel.x86_64 ruby-
libs.x86_64 ruby-gem-json.x86_64 rubygem-rake.noarch
Desafortunadamente, nos quedamos con una versión algo desactualizada de Ruby.
[root@CentOS rdc]# ruby -v
ruby 2.0.0p648 (2015-12-16) [x86_64-linux]
[root@CentOS rdc]#
Perlha existido durante mucho tiempo. Originalmente fue diseñado como un lenguaje de informes utilizado para analizar archivos de texto. Con una popularidad creciente, Perl ha agregado un módulo de soporte o CPAN, sockets, subprocesos y otras características necesarias en un poderoso lenguaje de scripting.
La mayor ventaja de Perl sobre PHP, Python o Ruby es: hace las cosas con un mínimo de esfuerzo. Esta filosofía de Perl no siempre significa que hace las cosas de la manera correcta. Sin embargo, para las tareas de administración en Linux, Perl se considera la opción preferida para un lenguaje de scripting.
Algunas ventajas de Perl sobre Python o Ruby son:
Potente procesamiento de texto
Perl hace que la escritura de scripts sea rápida y sucia (por lo general, un script de Perl será varias docenas de líneas más corto que un equivalente en Python o Ruby)
Perl puede hacer cualquier cosa (casi)
Algunos inconvenientes de Perl son:
La sintaxis puede ser confusa
El estilo de codificación en Perl puede ser único y atascar la colaboración
Perl no está realmente orientado a objetos
Por lo general, no se piensa mucho en la estandarización y las mejores prácticas cuando se usa Perl.
Al decidir si usar Perl, Python o PHP; Deben hacerse las siguientes preguntas:
- ¿Esta aplicación alguna vez necesitará control de versiones?
- ¿Alguna vez otras personas necesitarán modificar el código?
- ¿Necesitarán otras personas utilizar esta aplicación?
- ¿Se utilizará esta aplicación en otra máquina o arquitectura de CPU?
Si las respuestas a todo lo anterior son "no", Perl es una buena opción y puede acelerar las cosas en términos de resultados finales.
Con esto mencionado, configuremos nuestro servidor CentOS para usar la versión más reciente de Perl.
Antes de instalar Perl, debemos comprender el soporte para Perl. Oficialmente, Perl solo es compatible con las dos últimas versiones estables. Por lo tanto, queremos asegurarnos de mantener nuestro entorno de desarrollo aislado de la versión CentOS.
El motivo del aislamiento es: si alguien lanza una herramienta en Perl a la comunidad CentOS, lo más probable es que se modifique para que funcione en Perl tal como se envió con CentOS. Sin embargo, también queremos tener instalada la última versión para fines de desarrollo. Al igual que Python, CentOS envía Perl enfocado en la confiabilidad y no en la vanguardia.
Revisemos nuestra versión actual de Perl en CentOS 7.
[root@CentOS]# perl -v
This is perl 5, version 16, subversion 3 (v5.16.3) built for x86_64-linux-thread-multi
Actualmente estamos ejecutando Perl 5.16.3. La versión más actual a la fecha de este escrito es: perl-5.24.0
Definitivamente queremos actualizar nuestra versión, pudiendo usar módulos Perl actualizados en nuestro código. Afortunadamente, existe una gran herramienta para mantener los entornos Perl y mantener aislada nuestra versión CentOS de Perl. Se llamaperlbrew.
Instalemos Perl Brew.
[root@CentOS]# curl -L https://install.perlbrew.pl | bash
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 170 100 170 0 0 396 0 --:--:-- --:--:-- --:--:-- 397
100 1247 100 1247 0 0 1929 0 --:--:-- --:--:-- --:--:-- 1929
Ahora que tenemos Perl Brew instalado, creemos un entorno para la última versión de Perl.
Primero, necesitaremos la versión de Perl actualmente instalada para iniciar la instalación de perlbrew. Por lo tanto, obtengamos algunos módulos de Perl necesarios del repositorio de CentOS.
Note - Cuando esté disponible, siempre queremos usar módulos CentOS Perl versus CPAN con nuestra instalación CentOS Perl.
Step 1 - Instale el módulo CentOS Perl Make :: Maker.
[root@CentOS]# yum -y install perl-ExtUtils-MakeMaker.noarch
Step 2 - Instale la última versión de perl.
[root@CentOS build]# source ~/perl5/perlbrew/etc/bashrc
[root@CentOS build]# perlbrew install -n -j4 --threads perl-5.24.1
Las opciones que elegimos para nuestra instalación de Perl son:
n - Sin pruebas
j4 - Ejecutar 4 subprocesos en paralelo para las rutinas de instalación (estamos usando una CPU de cuatro núcleos)
threads - Habilitar el soporte de subprocesos para Perl
Después de que nuestra instalación se haya realizado correctamente, cambiemos a nuestro entorno Perl más reciente.
[root@CentOS]# ~/perl5/perlbrew/bin/perlbrew use perl-5.24.1
A sub-shell is launched with perl-5.24.1 as the activated perl. Run 'exit' to finish it.
[root@CentOS]# perl -v
This is perl 5, version 24, subversion 1 (v5.24.1) built for x86_64-linuxthread-multi
(with 1 registered patch, see perl -V for more detail)
Copyright 1987-2017, Larry Wall
Perl may be copied only under the terms of either the Artistic License or the GNU General
Public License, which may be found in the Perl 5 source kit.
Complete documentation for Perl, including FAQ lists, should be found on this system
using "man perl" or "perldoc perl". If you have access to the Internet, point your
browser at http://www.perl.org/, the Perl Home Page.
[root@CentOS]#
Impresión de script de perl simple versión de perl que se ejecuta dentro del contexto de nuestro entorno perlbrew -
[root@CentOS]# cat ./ver.pl
#!/usr/bin/perl
print $^V . "\n";
[root@CentOS]# perl ./ver.pl
v5.24.1
[root@CentOS]#
Una vez que perl está instalado, podemos cargar módulos cpan con cpanm de perl brew -
[root@CentOS]# perl-brew install-cpanm
Ahora usemos el instalador cpanm para crear el módulo LWP con nuestra versión actual de Perl de 5.24.1 en perl brew.
Step 1 - Cambie al contexto de nuestra versión actual de Perl.
[root@CentOS ~]# ~/perl5/perlbrew/bin/perlbrew use perl-5.24.1
Se lanza un sub-shell con perl-5.24.1 como perl activado. Ejecute 'salir' para terminarlo.
[root@CentOS ~]#
Step 2 - Instale el módulo Perl del agente de usuario de LWP.
[root@CentOS ~]# ~/perl5/perlbrew/bin/cpanm -i LWP::UserAgent
Step 3 - Ahora probemos nuestro entorno Perl con el nuevo módulo CPAN.
[root@CentOS ~]# cat ./get_header.pl
#!/usr/bin/perl
use LWP;
my $browser = LWP::UserAgent->new(); my $response = $browser->get("http://www.slcc.edu/"); unless(!$response->is_success) {
print $response->header("Server");
}
[root@CentOS ~]# perl ./get_header.pl
Microsoft-IIS/8.5 [root@CentOS ~]#
¡Ahí tienes! Perl Brew hace que el aislamiento de entornos de Perl sea muy sencillo y puede considerarse como una práctica recomendada a medida que las cosas se ponen en práctica con Perl.
LDAP conocido como Light Weight Directory Access Protocoles un protocolo que se utiliza para acceder a los contenedores de servicios X.500 dentro de una empresa conocida por un directorio. Aquellos que estén familiarizados con la administración de Windows Server pueden pensar que LDAP es de naturaleza muy similar a Active Directory. Incluso es un concepto ampliamente utilizado de entrelazar estaciones de trabajo Windows en una empresa OpenLDAP CentOS. En el otro espectro, una estación de trabajo CentOS Linux puede compartir recursos y participar con la funcionalidad básica en un dominio de Windows.
La implementación de LDAP en CentOS como Agente de servidor de directorio, Agente de sistema de directorio o DSA (estos acrónimos son todos iguales) es similar a las instalaciones anteriores de Novell Netware que utilizan la estructura de árbol de directorios con NDS.
Breve historia de LDAP
LDAP se creó básicamente como una forma eficiente de acceder a directorios X.500 con recursos empresariales. Tanto X.500 como LDAP comparten las mismas características y son tan similares que los clientes LDAP pueden acceder a los directorios X.500 con algunos ayudantes. Aunque LDAP también tiene su propio servidor de directorio llamadoslapd. La principal diferencia entre LDAP y DAP es que la versión ligera está diseñada para funcionar sobre TCP.
Mientras que DAP usa el modelo OSI completo. Con el advenimiento de la prominencia de Internet, TCP / IP y Ethernet en las redes de hoy, es raro encontrar una implantación de servicios de directorio que utilice directorios empresariales DAP y X.500 nativos fuera de los modelos informáticos heredados específicos.
Los principales componentes utilizados con openldap para CentOS Linux son:
openldap | Bibliotecas de soporte LDAP |
---|---|
servidor openldap | Servidor LDAP |
clientes openldap | Utilidades de cliente LDAP |
openldap-devel | Bibliotecas de desarrollo para OpenLDAP |
compay-openldap | Bibliotecas compartidas OpenLDAP |
bofetada | Demonio del servidor de directorios de OpenLDAP |
sorber | Se utiliza para la replicación LDAP en un dominio empresarial |
Note - Al nombrar su empresa, es una buena práctica utilizar el .localTLD. El uso de .net o .com puede causar dificultades al segregar una infraestructura de dominio interno y en línea. Imagine el trabajo adicional para una empresa que utiliza internamente acme.com para operaciones tanto externas como internas. Por lo tanto, puede ser conveniente tener recursos de Internet llamados acme.com o acme.net . Luego, los recursos empresariales de redes locales se representan como acme.local . Esto implicará configurar registros DNS, pero pagará en simplicidad, elocuencia y seguridad.
Instalar Open LDAP en CentOS
Instale openldap, openldap-servers, openldap-clients y migrationstools desde YUM .
[root@localhost]# yum -y install openldap openldap-servers openldap-clients
migration tools
Loaded plugins: fastestmirror, langpacks
updates
| 3.4 kB 00:00:00
updates/7/x86_64/primary_db
| 2.2 MB 00:00:05
Determining fastest mirrors
(1/2): extras/7/x86_64/primary_db
| 121 kB 00:00:01
(2/2): base/7/x86_64/primary_db
| 5.6 MB 00:00:16
Package openldap-2.4.40-13.el7.x86_64 already installed and latest version
Resolving Dependencies
--> Running transaction check
---> Package openldap-clients.x86_64 0:2.4.40-13.el7 will be installed
---> Package openldap-servers.x86_64 0:2.4.40-13.el7 will be installed
--> Finished Dependency Resolution
base/7/x86_64/group_gz
| 155 kB 00:00:00
Dependencies Resolved
===============================================================================
===============================================================================
Package Arch
Version Repository Size
===============================================================================
===============================================================================
Installing:
openldap-clients x86_64
2.4.40-13.el7 base 188 k
openldap-servers x86_64
2.4.40-13.el7 base 2.1 M
Transaction Summary
===============================================================================
===============================================================================
Install 2 Packages
Total download size: 2.3 M
Installed size: 5.3 M
Downloading packages:
Installed:
openldap-clients.x86_64 0:2.4.40-13.el7
openldap-servers.x86_64 0:2.4.40-13.el7
Complete!
[root@localhost]#
Ahora, comencemos y habilitemos el servicio slapd :
[root@centos]# systemctl start slapd
[root@centos]# systemctl enable slapd
En este punto, asegurémonos de que tenemos nuestra estructura openldap en / etc / openldap .
root@localhost]# ls /etc/openldap/
certs check_password.conf ldap.conf schema slapd.d
[root@localhost]#
Luego, asegúrese de que nuestro servicio slapd esté funcionando.
root@centos]# netstat -antup | grep slapd
tcp 0 0 0.0.0.0:389 0.0.0.0:* LISTEN 1641/slapd
tcp6 0 0 :::389 :::* LISTEN 1641/slapd
[root@centos]#
A continuación, configuremos nuestra instalación Open LDAP .
Asegúrese de que se haya creado nuestro usuario ldap del sistema .
[root@localhost]# id ldap
uid=55(ldap) gid=55(ldap) groups=55(ldap)
[root@localhost]#
Genere nuestras credenciales LDAP.
[root@localhost]# slappasswd
New password:
Re-enter new password:
{SSHA}20RSyjVv6S6r43DFPeJgASDLlLoSU8g.a10
[root@localhost]#
Necesitamos guardar la salida de slappasswd.
Configurar LDAP abierto
Step 1 - Configure LDAP para el dominio y agregue un usuario administrativo.
Primero, queremos configurar nuestro entorno openLDAP. A continuación se muestra una plantilla para usar con el comando ldapmodify .
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=vmnet,dc=local
dn: olcDatabase = {2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=ldapadm,dc=vmnet,dc=local
dn: olcDatabase = {2}hdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: <output from slap
Realice cambios en: /etc/openldap/slapd.d/cn=config/olcDatabase = {1} monitor.ldif con el comando ldapmodify.
[root@localhost]# ldapmodify -Y EXTERNAL -H ldapi:/// -f /home/rdc/Documents/db.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber = 0+uidNumber = 0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase = {2}hdb,cn=config"
modifying entry "olcDatabase = {2}hdb,cn=config"
modifying entry "olcDatabase = {2}hdb,cn=config"
[root@localhost cn=config]#
Comprobemos la configuración LDAP modificada.
root@linux1 ~]# vi /etc/openldap/slapd.d/cn=config/olcDatabase={2}hdb.ldif
[root@centos]# cat /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{2\}hdb.ldif
# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify.
# CRC32 a163f14c
dn: olcDatabase = {2}hdb
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {2}hdb
olcDbDirectory: /var/lib/ldap
olcDbIndex: objectClass eq,pres
olcDbIndex: ou,cn,mail,surname,givenname eq,pres,sub
structuralObjectClass: olcHdbConfig
entryUUID: 1bd9aa2a-8516-1036-934b-f7eac1189139
creatorsName: cn=config
createTimestamp: 20170212022422Z
olcSuffix: dc=vmnet,dc=local
olcRootDN: cn=ldapadm,dc=vmnet,dc=local
olcRootPW:: e1NTSEF1bUVyb1VzZTRjc2dkYVdGaDY0T0k =
entryCSN: 20170215204423.726622Z#000000#000#000000
modifiersName: gidNumber = 0+uidNumber = 0,cn=peercred,cn=external,cn=auth
modifyTimestamp: 20170215204423Z
[root@centos]#
Como puede ver, nuestras modificaciones empresariales LDAP se realizaron correctamente.
A continuación, queremos crear un certificado ssl autofirmado para OpenLDAP. Esto asegurará la comunicación entre el servidor empresarial y los clientes.
Step 2 - Cree un certificado autofirmado para OpenLDAP.
Usaremos openssl para crear un certificado ssl autofirmado. Vaya al capítulo siguiente,Create LDAP SSL Certificate with opensslpara obtener instrucciones para proteger las comunicaciones con OpenLDAP. Luego, cuando los certificados ssl estén configurados, habremos completado nuestra configuración empresarial OpenLDAP.
Step 3 - Configure OpenLDAP para utilizar comunicaciones seguras con certificado.
Cree un archivo certs.ldif en vim con la siguiente información:
dn: cn=config
changetype: modify
replace: olcTLSCertificateFile
olcTLSCertificateFile: /etc/openldap/certs/yourGeneratedCertFile.pem
dn: cn=config
changetype: modify
replace: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/openldap/certs/youGeneratedKeyFile.pem
Luego, nuevamente, use el comando ldapmodify para fusionar los cambios en la configuración de OpenLDAP.
[root@centos rdc]# ldapmodify -Y EXTERNAL -H ldapi:/// -f certs.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber = 0+uidNumber = 0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "cn=config"
[root@centos]#
Finalmente, probemos nuestra configuración de OpenLADP.
[root@centos]# slaptest -u
config file testing succeeded
[root@centos]#
Step 4 - Configurar la base de datos de slapd.
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG &&
chown ldap:ldap /var/lib/ldap/*
Actualiza el esquema OpenLDAP.
Agregue los esquemas LDAP coseno y nis.
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
Finalmente, cree el esquema empresarial y agréguelo a la configuración actual de OpenLDAP.
Lo siguiente es para un dominio llamado vmnet. local con un administrador LDAP llamado ldapadm .
dn: dc=vmnet,dc=local
dc: vmnet
objectClass: top
objectClass: domain
dn: cn=ldapadm ,dc=vmnet,dc=local
objectClass: organizationalRole
cn: ldapadm
description: LDAP Manager
dn: ou = People,dc=vmnet,dc=local
objectClass: organizationalUnit
ou: People
dn: ou = Group,dc=vmnet,dc=local
objectClass: organizationalUnit
ou: Group
Finalmente, importe esto en el esquema OpenLDAP actual.
[root@centos]# ldapadd -x -W -D "cn=ldapadm,dc=vmnet,dc=local" -f ./base.ldif
Enter LDAP Password:
adding new entry "dc=vmnet,dc=local"
adding new entry "cn=ldapadm ,dc=vmnet,dc=local"
adding new entry "ou=People,dc=vmnet,dc=local"
adding new entry "ou=Group,dc=vmnet,dc=local"
[root@centos]#
Step 5 - Configurar un usuario empresarial OpenLDAP.
Abra vim o su editor de texto favorito y copie el siguiente formato. Esto está configurado para un usuario llamado "entacct" en el dominio LDAP "vmnet.local".
dn: uid=entacct,ou=People,dc=vmnet,dc=local
objectClass: top
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
cn: entacct
uid: entacct
uidNumber: 9999
gidNumber: 100
homeDirectory: /home/enyacct
loginShell: /bin/bash
gecos: Enterprise User Account 001
userPassword: {crypt}x
shadowLastChange: 17058
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
Ahora importe los archivos anteriores, tal como se guardaron, en el esquema OpenLdap.
[root@centos]# ldapadd -x -W -D "cn=ldapadm,dc=vmnet,dc=local" -f entuser.ldif
Enter LDAP Password:
adding new entry "uid=entacct,ou=People,dc=vmnet,dc=local"
[root@centos]#
Antes de que los usuarios puedan acceder a LDAP Enterprise, debemos asignar una contraseña de la siguiente manera:
ldappasswd -s password123 -W -D "cn=ldapadm,dc=entacct,dc=local" -x "uid=entacct
,ou=People,dc=vmnet,dc=local"
-s especifica la contraseña del usuario
-x es el nombre de usuario al que se aplica la contraseña actualizada
-D es el * nombre distinguido "para autenticar contra el esquema LDAP.
Finalmente, antes de iniciar sesión en la cuenta Enterprise, verifiquemos nuestra entrada OpenLDAP .
[root@centos rdc]# ldapsearch -x cn=entacct -b dc=vmnet,dc=local
# extended LDIF
#
# LDAPv3
# base <dc=vmnet,dc=local> with scope subtree
# filter: cn=entacct
# requesting: ALL
#
# entacct, People, vmnet.local
dn: uid=entacct,ou=People,dc=vmnet,dc=local
objectClass: top
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
cn: entacct
uid: entacct
uidNumber: 9999
gidNumber: 100
homeDirectory: /home/enyacct
loginShell: /bin/bash
gecos: Enterprise User Account 001
userPassword:: e2NyeXB0fXg=
shadowLastChange: 17058
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
La conversión de elementos como / etc / passwd y / etc / groups a la autenticación OpenLDAP requiere el uso de herramientas de migración. Estos se incluyen en el paquete migrationtools . Luego, se instala en / usr / share / migrationtools .
[root@centos openldap-servers]# ls -l /usr/share/migrationtools/
total 128
-rwxr-xr-x. 1 root root 2652 Jun 9 2014 migrate_aliases.pl
-rwxr-xr-x. 1 root root 2950 Jun 9 2014 migrate_all_netinfo_offline.sh
-rwxr-xr-x. 1 root root 2946 Jun 9 2014 migrate_all_netinfo_online.sh
-rwxr-xr-x. 1 root root 3011 Jun 9 2014 migrate_all_nis_offline.sh
-rwxr-xr-x. 1 root root 3006 Jun 9 2014 migrate_all_nis_online.sh
-rwxr-xr-x. 1 root root 3164 Jun 9 2014 migrate_all_nisplus_offline.sh
-rwxr-xr-x. 1 root root 3146 Jun 9 2014 migrate_all_nisplus_online.sh
-rwxr-xr-x. 1 root root 5267 Jun 9 2014 migrate_all_offline.sh
-rwxr-xr-x. 1 root root 7468 Jun 9 2014 migrate_all_online.sh
-rwxr-xr-x. 1 root root 3278 Jun 9 2014 migrate_automount.pl
-rwxr-xr-x. 1 root root 2608 Jun 9 2014 migrate_base.pl
Step 6 - Finalmente, necesitamos permitir el acceso al servicio slapd para que pueda atender las solicitudes.
firewall-cmd --permanent --add-service=ldap
firewall-cmd --reload
Configurar el acceso del cliente LDAP
La configuración del acceso del cliente LDAP requiere los siguientes paquetes en el cliente: openldap, clientes open-ldap y nss_ldap.
Configurar la autenticación LDAP para sistemas cliente es un poco más fácil.
Step 1 - Instalar paquetes dependientes -
# yum install -y openldap-clients nss-pam-ldapd
Step 2- Configure la autenticación LDAP con authconfig .
authconfig --enableldap --enableldapauth --ldapserver=10.25.0.1 --
ldapbasedn="dc=vmnet,dc=local" --enablemkhomedir --update
Step 3 - Reinicie el servicio nslcd.
systemctl restart nslcd
Antecedentes de TLS y SSL
TLS es el nuevo estándar para la seguridad de la capa de sockets, a partir de SSL. TLS ofrece mejores estándares de cifrado con otras características de envoltura de protocolo y seguridad que promueven SSL. A menudo, los términos TLS y SSL se utilizan indistintamente. Sin embargo, como administrador profesional de CentOS, es importante tener en cuenta las diferencias y la historia que separa a cada uno.
SSL sube a la versión 3.0. SSL fue desarrollado y promovido como estándar industrial bajo Netscape. Después de que Netscape fuera comprado por AOL (un ISP popular en los 90 también conocido como America Online), AOL nunca promovió realmente el cambio necesario para las mejoras de seguridad en SSL.
En la versión 3.1, la tecnología SSL pasó a los estándares de sistemas abiertos y se cambió a TLS . Dado que los derechos de autor de SSL todavía eran propiedad de AOL, se acuñó un nuevo término:TLS - Transport Layer Security. Por eso es importante reconocer que TLS es de hecho diferente de SSL . Especialmente, dado que las tecnologías SSL más antiguas tienen problemas de seguridad conocidos y algunas se consideran obsoletas en la actualidad.
Note- Este tutorial utilizará el término TLS cuando se habla de tecnologías 3.1 y superiores. Luego SSL al comentar específicamente sobre tecnologías SSL 3.0 e inferiores.
Versiones de SSL vs TLS
La siguiente tabla muestra cómo se relacionarían las versiones TLS y SSL entre sí. He escuchado a algunas personas hablar en términos de SSL versión 3.2. Sin embargo, probablemente obtuvieron la terminología leyendo un blog. Como administrador profesional, siempre queremos utilizar la terminología estándar. Por lo tanto, al hablar, SSL debería ser una referencia a tecnologías pasadas. Cosas simples pueden hacer que un buscador de trabajo de CentOS parezca un CS Major experimentado.
TLS | SSL |
---|---|
- | 3,0 |
1.0 | 3.1 |
1.1 | 3.2 |
1.2 | 3.3 |
TLS realiza dos funciones principales importantes para los usuarios de Internet en la actualidad: una, verifica quién es una parte, conocida comoauthentication. Dos, ofreceend-to-end encryption en la capa de transporte para los protocolos de nivel superior que carecen de esta función nativa (ftp, http, protocolos de correo electrónico y más).
El primero verifica quién es una de las partes y es importante para la seguridad como cifrado de extremo a extremo. Si un consumidor tiene una conexión encriptada a un sitio web que no está autorizado para recibir pagos, los datos financieros aún están en riesgo. Esto es lo que no tendrá ningún sitio de phishing:a properly signed TLS certificate verifying website operators are who they claim to be from a trusted CA.
Solo hay dos métodos para evitar no tener un certificado debidamente firmado: engañar al usuario para que permita la confianza de un navegador web para un certificado autofirmado o esperar que el usuario no sea experto en tecnología y no sepa la importancia de un certificado confiable Autoridad (o una CA).
En este tutorial, vamos a utilizar lo que se conoce como un autofirmado certificado. Esto significa que, sin otorgar explícitamente a este certificado el estado de confiable en cada navegador web que visite el sitio web, se mostrará un error que desalienta a los usuarios a visitar el sitio. Luego, hará que el usuario realice algunas acciones antes de acceder a un sitio con un certificado autofirmado. Recuerde, por motivos de seguridad, esto es algo bueno.
Instalar y configurar openssl
openssl es el estándar para implementaciones de código abierto de TLS. openssl se usa en sistemas como Linux, distribuciones BSD, OS X e incluso es compatible con Windows.
openssl es importante, ya que proporciona seguridad en la capa de transporte y abstrae la programación detallada de autenticación y cifrado de extremo a extremo para un desarrollador. Es por eso que openssl se usa con casi todas las aplicaciones de código abierto que usan TLS. También se instala de forma predeterminada en todas las versiones modernas de Linux.
De forma predeterminada, openssl debe instalarse en CentOS desde al menos la versión 5 en adelante. Solo para asegurar, intentemos instalar openssl a través de YUM. Simplemente ejecute install, ya que YUM es lo suficientemente inteligente como para hacernos saber si un paquete ya está instalado. Si estamos ejecutando una versión anterior de CentOS por razones de compatibilidad, hacer una instalación de yum -y asegurará que openssl se actualice contra la vulnerabilidad de sangrado de corazón semi-reciente.
When running the installer, it was found there was actually an update to openssl.
[root@centos]# yum -y install openssl
Resolving Dependencies
--> Running transaction check
---> Package openssl.x86_64 1:1.0.1e-60.el7 will be updated
---> Package openssl.x86_64 1:1.0.1e-60.el7_3.1 will be an update
--> Processing Dependency: openssl-libs(x86-64) = 1:1.0.1e-60.el7_3.1 for
package: 1:openssl-1.0.1e-60.el7_3.1.x86_64
--> Running transaction check
---> Package openssl-libs.x86_64 1:1.0.1e-60.el7 will be updated
---> Package openssl-libs.x86_64 1:1.0.1e-60.el7_3.1 will be an update
--> Finished Dependency Resolution
Dependencies Resolved
===============================================================================
===============================================================================
Package Arch
Version Repository Size
===============================================================================
===============================================================================
Updating:
openssl x86_64
1:1.0.1e-60.el7_3.1 updates 713 k
Updating for dependencies:
Create Self-signed Certificate for OpenLDAP
This is a method to create a self-signed for our previous OpenLDAP installation.
To create an self-signed OpenLDAP Certificate.
openssl req -new -x509 -nodes -out /etc/openldap/certs/myldaplocal.pem -keyout
/etc/openldap/certs/myldaplocal.pem -days 365
[root@centos]# openssl req -new -x509 -nodes -out /etc/openldap/certs/vmnet.pem
-keyout /etc/openldap/certs/vmnet.pem -days 365
Generating a 2048 bit RSA private key
.............................................+++
................................................+++
writing new private key to '/etc/openldap/certs/vmnet.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:US
State or Province Name (full name) []:Califonia
Locality Name (eg, city) [Default City]:LA
Organization Name (eg, company) [Default Company Ltd]:vmnet
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:centos
Email Address []:[email protected]
[root@centos]#
Now our OpenLDAP certificates should be placed in /etc/openldap/certs/
[root@centos]# ls /etc/openldap/certs/*.pem
/etc/openldap/certs/vmnetcert.pem /etc/openldap/certs/vmnetkey.pem
[root@centos]#
As you can see, we have both the certificate and key installed in the /etc/openldap/certs/ directories. Finally, we need to change the permissions to each, since they are currently owned by the root user.
[root@centos]# chown -R ldap:ldap /etc/openldap/certs/*.pem
[root@centos]# ls -ld /etc/openldap/certs/*.pem
-rw-r--r--. 1 ldap ldap 1395 Feb 20 10:00 /etc/openldap/certs/vmnetcert.pem
-rw-r--r--. 1 ldap ldap 1704 Feb 20 10:00 /etc/openldap/certs/vmnetkey.pem
[root@centos]#
Create Self-signed Certificate for Apache Web Server
In this tutorial, we will assume Apache is already installed. We did install Apache in another tutorial (configuring CentOS Firewall) and will go into advanced installation of Apache for a future tutorial. So, if you have not already installed Apache, please follow along.
Once Apache HTTPd can be installed using the following steps −
Step 1 − Install mod_ssl for Apache httpd server.
First we need to configure Apache with mod_ssl. Using the YUM package manager this is pretty simple −
[root@centos]# yum -y install mod_ssl
Then reload your Apache daemon to ensure Apache uses the new configuration.
[root@centos]# systemctl reload httpd
At this point, Apache is configured to support TLS connections on the local host.
Step 2 − Create the self-signed ssl certificate.
First, let's configure our private TLS key directory.
[root@centos]# mkdir /etc/ssl/private
[root@centos]# chmod 700 /etc/ssl/private/
Note − Be sure only the root has read/write access to this directory. With world read/write access, your private key can be used to decrypt sniffed traffic.
Generating the certificate and key files.
[root@centos]# sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout
/etc/ssl/private/self-gen-apache.key -out /etc/ssl/certs/self-sign-apache.crt
Generating a 2048 bit RSA private key
..........+++
....+++
-----
Country Name (2 letter code) [XX]:US
State or Province Name (full name) []:xx
Locality Name (eg, city) [Default City]:xxxx
Organization Name (eg, company) [Default Company Ltd]:VMNET
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:centos.vmnet.local
Email Address []:
[root@centos]#
Note − You can use public IP Address of the server if you don't have a registered domain name.
Let's take a look at our certificate −
[root@centos]# openssl x509 -in self-sign-apache.crt -text -noout
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 17620849408802622302 (0xf489d52d94550b5e)
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=US, ST=UT, L=xxxx, O=VMNET, CN=centos.vmnet.local
Validity
Not Before: Feb 24 07:07:55 2017 GMT
Not After : Feb 24 07:07:55 2018 GMT
Subject: C=US, ST=UT, L=xxxx, O=VMNET, CN=centos.vmnet.local
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
00:c1:74:3e:fc:03:ca:06:95:8d:3a:0b:7e:1a:56:
f3:8d:de:c4:7e:ee:f9:fa:79:82:bf:db:a9:6d:2a:
57:e5:4c:31:83:cf:92:c4:e7:16:57:59:02:9e:38:
47:00:cd:b8:31:b8:34:55:1c:a3:5d:cd:b4:8c:b0:
66:0c:0c:81:8b:7e:65:26:50:9d:b7:ab:78:95:a5:
31:5e:87:81:cd:43:fc:4d:00:47:5e:06:d0:cb:71:
9b:2a:ab:f0:90:ce:81:45:0d:ae:a8:84:80:c5:0e:
79:8a:c1:9b:f4:38:5d:9e:94:4e:3a:3f:bd:cc:89:
e5:96:4a:44:f5:3d:13:20:3d:6a:c6:4d:91:be:aa:
ef:2e:d5:81:ea:82:c6:09:4f:40:74:c1:b1:37:6c:
ff:50:08:dc:c8:f0:67:75:12:ab:cd:8d:3e:7b:59:
e0:83:64:5d:0c:ab:93:e2:1c:78:f0:f4:80:9e:42:
7d:49:57:71:a2:96:c6:b8:44:16:93:6c:62:87:0f:
5c:fe:df:29:89:03:6e:e5:6d:db:0a:65:b2:5e:1d:
c8:07:3d:8a:f0:6c:7f:f3:b9:32:b4:97:f6:71:81:
6b:97:e3:08:bd:d6:f8:19:40:f1:15:7e:f2:fd:a5:
12:24:08:39:fa:b6:cc:69:4e:53:1d:7e:9a:be:4b:
Here is an explanation for each option we used with the openssl command −
Command | Action |
---|---|
req -X509 | Use X.509 CSR management PKI standard for key management. |
-nodes | Do not secure our certificate with a passphrase. Apache must be able to use the certificate without interruption of a passphrase. |
-days 2555 | Tells the validity of the certificate to 7 years or 2555 days. Time period can be adjusted as needed. |
-newkey rsa:2048 | Specified to generate both key and certificate using RSA at 2048 bits in length. |
Next, we want to create a Diffie-Heliman group for negotiating PFS with clients.
[centos#] openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
This will take from 5 to 15 minutes.
Perfect Forward Secrecy − Used to secure session data in case the private key has been compromised. This will generate a key used between the client and the server that is unique for each session.
Now, add the Perfect Forward Secrecy configuration to our certificate.
[root@centos]# cat /etc/ssl/certs/dhparam.pem | tee -a /etc/ssl/certs/self-sign-apache.crt
Configure Apache to Use Key and Certificate Files
We will be making changes to /etc/httpd/conf.d/ssl.conf −
We will make the following changes to ssl.conf. However, before we do that we should back the original file up. When making changes to a production server in an advanced text editor like vi or emcas, it is a best practice to always backup configuration files before making edits.
[root@centos]# cp /etc/httpd/conf.d/ssl.conf ~/
Now let's continue our edits after copying a known-working copy of ssl.conf to the root of our home folder.
- Locate
- Edit both DocumentRoot and ServerName as follows.
\\# General setup for the virtual host, inherited from global configuration
DocumentRoot "/var/www/html"
ServerName centos.vmnet.local:443
DocumentRoot this is the path to your default apache directory. In this folder should be a default page that will display a HTTP request asking for the default page of your web server or site.
ServerName is the server name that can be either an ip address or the host name of the server. For TLS, it is a best practice to create a certificate with a host name. From our OpenLdap tutorial, we created a hostname of centos on the local enterprise domain: vmnet.local
Ahora queremos comentar las siguientes líneas.
SSLProtocol
# SSL Protocol support:
# List the enable protocol levels with which clients will be able to
# connect. Disable SSLv2 access by default:
~~~~> #SSLProtocol all -SSLv2
# SSL Cipher Suite:
# List the ciphers that the client is permitted to negotiate.
# See the mod_ssl documentation for a complete list.
~~~~> #SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA
Luego, déjele saber a Apache dónde encontrar nuestro certificado y el par de claves pública / privada.
Especifique la ruta a nuestro archivo de certificado autofirmado
# Server Certificate:
# Point SSLCertificateFile at a PEM encoded certificate. If
# the certificate is encrypted, then you will be prompted for a
# pass phrase. Note that a kill -HUP will prompt again. A new
# certificate can be generated using the genkey(1) command.
~~~~> SSLCertificateFile /etc/ssl/certs/self-sign-apache.crt
specify path to our private key file
# Server Private Key:
# If the key is not combined with the certificate, use this
# directive to point at the key file. Keep in mind that if
# you've both a RSA and a DSA private key you can configure
# both in parallel (to also allow the use of DSA ciphers, etc.)
~~~~> SSLCertificateKeyFile /etc/ssl/private/self-gen-apache.key
Finalmente, necesitamos permitir conexiones entrantes a https a través del puerto 443.
En este capítulo, aprenderemos un poco sobre los antecedentes de cómo surgió Apache HTTP Server y luego instalaremos la versión estable más actual en CentOS Linux 7.
Breve historia del servidor web Apache
Apache es un servidor web que existe desde hace mucho tiempo. De hecho, ¡casi tanto como la existencia de http!
Apache comenzó como un proyecto bastante pequeño en el Centro Nacional de Aplicaciones de Supercomputación, también conocido como NCSA. A mediados de los noventa, "httpd", como se le llamaba, era con mucho la plataforma de servidor web más popular en Internet, con aproximadamente el 90% o más de la cuota de mercado.
En este momento, era un proyecto simple. El personal de TI calificado conocido como webmaster era responsable de: mantener las plataformas de servidor web y el software del servidor web, así como el desarrollo del sitio tanto de front-end como de back-end. En el núcleo de httpd estaba su capacidad para utilizar módulos personalizados conocidos como complementos o extensiones. Un webmaster también tenía la habilidad suficiente para escribir parches en el software del servidor central.
En algún momento a fines de la década de los 90, el desarrollador senior y gerente de proyectos de httpd dejó NCSA para hacer otras cosas. Esto dejó al demonio web más popular en un estado de estancamiento.
Dado que el uso de httpd estaba tan extendido, un grupo de webmasters de httpd experimentados pidió una cumbre sobre el futuro de httpd. Se decidió coordinar y aplicar las mejores extensiones y parches en una versión estable actual. Entonces, nació el actual abuelo de los servidores http y fue bautizado como Apache HTTP Server.
Little Known Historical Fact- Apache no lleva el nombre de una tribu de guerreros nativos americanos. De hecho, fue acuñado y nombrado con un giro: hecho a partir de muchas correcciones (o parches) de muchos científicos informáticos talentosos: unpatchy o Apache.
Instale la versión estable actual en CentOS Linux 7
Step 1 - Instale httpd a través de yum.
yum -y install httpd
En este punto, el servidor HTTP Apache se instalará a través de yum.
Step 2 - Edite el archivo httpd.conf específico para sus necesidades httpd.
Con una instalación predeterminada de Apache, el archivo de configuración de Apache se llama httpd.conf y se encuentra en / etc / httpd / . Entonces, vamos a abrirlo en vim .
Las primeras líneas de httpd.conf se abrieron en vim -
#
# This is the main Apache HTTP server configuration file. It contains the
# configuration directives that give the server its instructions.
# See <URL:http://httpd.apache.org/docs/2.4/> for detailed information.
# In particular, see
# <URL:http://httpd.apache.org/docs/2.4/mod/directives.html>
# for a discussion of each configuration directive.
Realizaremos los siguientes cambios para permitir que nuestra instalación de CentOS atienda solicitudes http desde el puerto http 80.
Puerto y host de escucha
# Listen: Allows you to bind Apache to specific IP addresses and/or
# ports, instead of the default. See also the <VirtualHost>
# directive.
#
# Change this to Listen on specific IP addresses as shown below to
# prevent Apache from glomming onto all bound IP addresses.
#
#Listen 12.34.56.78:80
Listen 80
Desde aquí, cambiamos Apache para que escuche en un determinado puerto o dirección IP. Por ejemplo, si queremos ejecutar servicios httpd en un puerto alternativo como 8080. O si tenemos nuestro servidor web configurado con múltiples interfaces con direcciones IP independientes.
Escucha
Evita que Apache se conecte a cada demonio de escucha en cada dirección IP. Esto es útil para dejar de especificar solo tráfico IPv6 o IPv4. O incluso vincularse a todas las interfaces de red en un host de múltiples hosts.
#
# Listen: Allows you to bind Apache to specific IP addresses and/or
# ports, instead of the default. See also the <VirtualHost>
# directive.
#
# Change this to Listen on specific IP addresses as shown below to
# prevent Apache from glomming onto all bound IP addresses.
#
Listen 10.0.0.25:80
#Listen 80
Raiz del documento
La "raíz del documento" es el directorio predeterminado donde Apache buscará un archivo de índice para atender las solicitudes al visitar su servidor: http://www.yoursite.com/ recuperará y servirá el archivo de índice de la raíz de su documento.
#
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
DocumentRoot "/var/www/html"
Step 3 - Inicie y habilite el servicio httpd.
[root@centos rdc]# systemctl start httpd && systemctl reload httpd
[root@centos rdc]#
Step 4 - Configure el firewall para permitir el acceso a las solicitudes del puerto 80.
[root@centos]# firewall-cmd --add-service=http --permanent
Como se mencionó brevemente al configurar CentOS para su uso con Maria DB, no hay un paquete MySQL nativo en el repositorio de yum de CentOS 7 . Para dar cuenta de esto, necesitaremos agregar un repositorio alojado en MySQL.
MariaDB vs MySQL en CentOS Linux
Una cosa a tener en cuenta es que MySQL requerirá un conjunto diferente de dependencias base de MariaDB. El uso de MySQL también romperá el concepto y la filosofía de CentOS: paquetes de producción diseñados para la máxima confiabilidad.
Entonces, al decidir si usar Maria o MySQL, se deben considerar dos opciones: ¿Funcionará mi esquema de base de datos actual con Maria? ¿Qué ventaja me da instalar MySQL sobre María?
Los componentes de Maria son 100% transparentes a la estructura de MySQL, con cierta eficiencia adicional con mejores licencias. A menos que surja una razón convincente, se recomienda configurar CentOS para usar MariaDB.
Las principales razones para favorecer a María en CentOS son:
La mayoría de la gente usará MariaDB. Cuando tenga problemas, obtendrá más ayuda con María.
CentOS está diseñado para ejecutarse con Maria. Por tanto, María ofrecerá una mejor estabilidad.
Maria es oficialmente compatible con CentOS.
Descargue y agregue el repositorio MySQL
Queremos descargar e instalar el repositorio MySQL desde -
http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
Step 1 - Descarga el repositorio.
El repositorio viene convenientemente empaquetado en un paquete rpm para una fácil instalación. Se puede descargar con wget -
[root@centos]# wget http://repo.mysql.com/mysql-community-release-el75.noarch.rpm
--2017-02-26 03:18:36-- http://repo.mysql.com/mysql-community-release-el75.noarch.rpm
Resolving repo.mysql.com (repo.mysql.com)... 104.86.98.130
Step 2 - Instale MySQL desde YUM.
Ahora podemos usar el administrador de paquetes yum para instalar MySQL -
[root@centos]# yum -y install mysql-server
Step 3 - Inicie y habilite el servicio MySQL Daemon.
[root@centos]# systemctl start mysql
[root@centos]# systemctl enable mysql
Step 4 - Asegúrese de que nuestro servicio MySQL esté funcionando.
[root@centos]# netstat -antup | grep 3306
tcp6 0 0 :::3306 :::* LISTEN 6572/mysqld
[root@centos]#
Nota: No permitiremos el paso de ninguna regla de firewall. Es común tener MySQL configurado para usarUnix Domain Sockets. Esto asegura que solo el servidor web de la pila LAMP, localmente, pueda acceder a la base de datos MySQL, eliminando una dimensión completa en el vector de ataque en el software de la base de datos.
Para enviar un correo electrónico desde nuestro servidor CentOS 7, necesitaremos la configuración para configurar un Agente de transferencia de correo (MTA) moderno. Mail Transfer Agent es el demonio responsable de enviar correo saliente para usuarios del sistema o dominios corporativos de Internet a través de SMTP.
Vale la pena señalar que este tutorial solo enseña el proceso de configuración del demonio para uso local. No entramos en detalles sobre la configuración avanzada para configurar un MTA para operaciones comerciales. Esta es una combinación de muchas habilidades que incluyen, entre otras: DNS, obtener una dirección IP enrutable estática que no está en la lista negra y configurar ajustes avanzados de seguridad y servicio. En resumen, este tutorial está destinado a familiarizarlo con la configuración básica. No utilice este tutorial para la configuración MTA de un host orientado a Internet.
Con su enfoque combinado tanto en la seguridad como en la facilidad de administración, hemos elegido Postfixcomo MTA para este tutorial. El MTA predeterminado instalado en las versiones anteriores de CentOS es Sendmail .Sendmailes un gran MTA. Sin embargo, según la humilde opinión del autor, Postfix llega a un punto óptimo al abordar las siguientes notas para un MTA. Con la versión más actual de CentOS, Postfix ha reemplazado a Sendmail como el MTA predeterminado.
Postfix es un MTA ampliamente utilizado y bien documentado. Se mantiene y desarrolla activamente. Requiere una configuración mínima en mente (esto es solo correo electrónico) y es eficiente con los recursos del sistema (nuevamente, esto es solo correo electrónico).
Step 1 - Instale Postfix desde YUM Package Manager.
[root@centos]# yum -y install postfix
Step 2 - Configurar el archivo de configuración de Postfix.
El archivo de configuración de Postfix se encuentra en: /etc/postfix/main.cf
En una configuración simple de Postfix, se debe configurar lo siguiente para un host específico: nombre de host, dominio, origen, inet_interfaces y destino.
Configure the hostname- El nombre de host es un nombre de dominio completo del host de Postfix. En el capítulo de OpenLDAP, nombramos el cuadro CentOS: centos en el dominio vmnet.local . Sigamos con eso para este capítulo.
# The myhostname parameter specifies the internet hostname of this
# mail system. The default is to use the fully-qualified domain name
# from gethostname(). $myhostname is used as a default value for many
# other configuration parameters.
#
myhostname = centos.vmnet.local
Configure the domain- Como se indicó anteriormente, el dominio que usaremos en este tutorial es vmnet.local
# The mydomain parameter specifies the local internet domain name.
# The default is to use $myhostname minus the first component. # $mydomain is used as a default value for many other configuration
# parameters.
#
mydomain = vmnet.local
Configure the origin - Para la configuración de un solo servidor y dominio, solo necesitamos descomentar las siguientes secciones y dejar las variables Postfix predeterminadas.
# SENDING MAIL
#
# The myorigin parameter specifies the domain that locally-posted
# mail appears to come from. The default is to append $myhostname, # which is fine for small sites. If you run a domain with multiple # machines, you should (1) change this to $mydomain and (2) set up
# a domain-wide alias database that aliases each user to
# [email protected].
#
# For the sake of consistency between sender and recipient addresses,
# myorigin also specifies the default domain name that is appended
# to recipient addresses that have no @domain part.
#
myorigin = $myhostname myorigin = $mydomain
Configure the network interfaces- Dejaremos a Postfix escuchando en nuestra interfaz de red única y todos los protocolos y direcciones IP asociados con esa interfaz. Esto se hace simplemente dejando la configuración predeterminada habilitada para Postfix.
# The inet_interfaces parameter specifies the network interface
# addresses that this mail system receives mail on. By default,
# the software claims all active interfaces on the machine. The
# parameter also controls delivery of mail to user@[ip.address].
#
# See also the proxy_interfaces parameter, for network addresses that
# are forwarded to us via a proxy or network address translator.
#
# Note: you need to stop/start Postfix when this parameter changes.
#
#inet_interfaces = all
#inet_interfaces = $myhostname #inet_interfaces = $myhostname, localhost
#inet_interfaces = localhost
# Enable IPv4, and IPv6 if supported
inet_protocols = all
Step 3 - Configurar el soporte SASL para Postfix.
Sin el soporte de autenticación SASL, Postfix solo permitirá el envío de correo electrónico de usuarios locales. O dará un error de retransmisión denegada cuando los usuarios envíen correo electrónico fuera del dominio local.
Note - SASL o Simple Application Security Layer Frameworkes un marco diseñado para la autenticación que admite diferentes técnicas entre diferentes protocolos de capa de aplicación. En lugar de dejar los mecanismos de autenticación en manos del protocolo de la capa de aplicación, los desarrolladores (y consumidores) de SASL aprovechan los protocolos de autenticación actuales para protocolos de nivel superior que pueden no tener la conveniencia o una autenticación más segura (cuando se habla de acceso a servicios seguros) incorporada.
Instale el paquete "cyrus-sasl *
[root@centos]# yum -y install cyrus-sasl
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: repos.forethought.net
* extras: repos.dfw.quadranet.com
* updates: mirrors.tummy.com
Package cyrus-sasl-2.1.26-20.el7_2.x86_64 already installed and latest version
Nothing to do
Configurar /etc/postfix/main.cf para autenticación SASL
smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions =
permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination
smtpd_sasl_security_options = noanonymous
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
Mis opciones SASL en main.conf
##Configure SASL Options Entries:
smtpd_sasl_auth_enable = yes
smptd_recipient_restrictions =
permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination
smtp_sasl_type = dovecot
smtp_sasl_path = private/auth/etc
Step 4 - Configure FirewallD para permitir los servicios SMTP entrantes.
[root@centos]# firewall-cmd --permanent --add-service=smtp
success
[root@centos]# firewall-cmd --reload
success
[root@centos]#
Ahora verifiquemos para asegurarnos de que nuestro host CentOS esté permitiendo y respondiendo a las solicitudes en el puerto 25 (SMTP).
Nmap scan report for 172.16.223.132
Host is up (0.00035s latency).
Not shown: 993 filtered ports
PORT STATE SERVICE
20/tcp closed ftp-data
21/tcp open ftp
22/tcp open ssh
25/tcp open smtp
80/tcp open http
389/tcp open ldap
443/tcp open https
MAC Address: 00:0C:29:BE:DF:5F (VMware)
Como puede ver, SMTP está escuchando y el demonio está respondiendo a las solicitudes de nuestra LAN interna.
Instale el servidor Dovecot IMAP y POP3
Dovecot es un servidor IMAP y POP3 seguro diseñado para manejar las necesidades de correo entrante de una organización más pequeña a más grande. Debido a su prolífico uso con CentOS, usaremos Dovecot como un ejemplo de instalación y configuración de un servidor de correo entrante para CentOS y MTA SASL Provider.
Como se señaló anteriormente, no configuraremos registros MX para DNS ni crearemos reglas seguras que permitan a nuestros servicios manejar el correo de un dominio. Por lo tanto, el simple hecho de configurar estos servicios en un host orientado a Internet puede dejar un margen de apalancamiento para los agujeros de seguridad sin registros SPF.
Step 1 - Instale Dovecot.
[root@centos]# yum -y install dovecot
Step 2 - Configurar palomar.
El archivo de configuración principal de dovecot se encuentra en: /etc/dovecot.conf . Primero haremos una copia de seguridad del archivo de configuración principal. Es una buena práctica hacer siempre una copia de seguridad de los archivos de configuración antes de realizar ediciones. De esta manera, un editor de texto destruye los saltos de línea (por ejemplo), y se pierden años de cambios. Revertir es tan fácil como copiar la copia de seguridad actual en producción.
Habilitar protocolos y servicio demonio para dovecot
# Protocols we want to be serving.
protocols = imap imaps pop3 pop3s
Ahora, debemos habilitar el demonio dovecot para que escuche al inicio:
[root@localhost]# systemctl start dovecot
[root@localhost]# systemctl enable dovecot
Asegurémonos de que Dovecot esté escuchando localmente en los puertos especificados para: imap, pop3, imap protected y pop3 protected.
[root@localhost]# netstat -antup | grep dovecot
tcp 0 0 0.0.0.0:110 0.0.0.0:* LISTEN 4368/dovecot
tcp 0 0 0.0.0.0:143 0.0.0.0:* LISTEN 4368/dovecot
tcp 0 0 0.0.0.0:993 0.0.0.0:* LISTEN 4368/dovecot
tcp 0 0 0.0.0.0:995 0.0.0.0:* LISTEN 4368/dovecot
tcp6 0 0 :::110 :::* LISTEN 4368/dovecot
tcp6 0 0 :::143 :::* LISTEN 4368/dovecot
tcp6 0 0 :::993 :::* LISTEN 4368/dovecot
tcp6 0 0 :::995 :::* LISTEN 4368/dovecot
[root@localhost]#
Como se ve, dovecot está escuchando en los puertos especificados para IPv4 e IPv4.
POP3 | 110 |
POP3 | 995 |
IMAP | 143 |
IMAP | 993 |
Ahora, necesitamos crear algunas reglas de firewall.
[root@localhost]# firewall-cmd --permanent --add-port=110/tcp
success
[root@localhost]# firewall-cmd --permanent --add-port=143/tcp
success
[root@localhost]# firewall-cmd --permanent --add-port=995/tcp
success
[root@localhost]# firewall-cmd --permanent --add-port=993/tcp
success
[root@localhost]# firewall-cmd --reload
success
[root@localhost]#
Nuestro Sever correo entrante está aceptando solicitudes de POP3 , POP3s , IMAP , y IMAPs a los hosts en la LAN.
Port Scanning host: 192.168.1.143
Open TCP Port: 21 ftp
Open TCP Port: 22 ssh
Open TCP Port: 25 smtp
Open TCP Port: 80 http
Open TCP Port: 110 pop3
Open TCP Port: 143 imap
Open TCP Port: 443 https
Open TCP Port: 993 imaps
Open TCP Port: 995 pop3s
Antes de profundizar en la instalación de FTP en CentOS, necesitamos aprender un poco sobre su uso y seguridad. FTPes un protocolo realmente eficiente y refinado para transferir archivos entre los sistemas informáticos. FTP se ha utilizado y perfeccionado durante algunas décadas. Para transferir archivos de manera eficiente a través de una red con latencia o por pura velocidad, FTP es una excelente opción. Más que SAMBA o SMB.
Sin embargo, FTP tiene algunos problemas de seguridad. De hecho, algunos problemas de seguridad graves. FTP utiliza un método de autenticación de texto plano realmente débil. Es por esta razón que las sesiones autenticadas deben depender de sFTP o FTPS, donde TLS se usa para el cifrado de extremo a extremo de las sesiones de inicio de sesión y transferencia.
Con las advertencias anteriores, el FTP simple y corriente todavía tiene su uso en el entorno empresarial actual. El uso principal son los repositorios de archivos FTP anónimos. Esta es una situación en la que no se justifica la autenticación para descargar o cargar archivos. Algunos ejemplos de uso de FTP anónimo son:
Las grandes empresas de software todavía utilizan repositorios ftp anónimos que permiten a los usuarios de Internet descargar shareware y parches.
Permitir a los usuarios de Internet cargar y descargar documentos públicos.
Algunas aplicaciones enviarán automáticamente archivos de configuración o registros archivados y cifrados a un repositorio a través de FTP.
Por lo tanto, como administrador de CentOS, poder instalar y configurar FTP sigue siendo una habilidad diseñada.
Usaremos un demonio FTP llamado vsFTP, o demonio FTP muy seguro. vsFTP se ha utilizado en desarrollo durante un tiempo. Tiene la reputación de ser seguro, fácil de instalar y configurar, y es confiable.
Step 1 - Instale vsFTPd con YUM Package Manager.
[root@centos]# yum -y install vsftpd.x86_64
Step 2 - Configure vsFTP para que se inicie al arrancar con systemctl.
[root@centos]# systemctl start vsftpd
[root@centos]# systemctl enable vsftpd
Created symlink from /etc/systemd/system/multi-
user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.
Step 3 - Configure FirewallD para permitir el control de FTP y las sesiones de transferencia.
[root@centos]# firewall-cmd --add-service=ftp --permanent
success
[root@centos]#
Asegúrese de que nuestro demonio FTP se esté ejecutando.
[root@centos]# netstat -antup | grep vsftp
tcp6 0 0 :::21 :::* LISTEN 13906/vsftpd
[root@centos]#
Step 4 - Configure vsFTPD para acceso anónimo.
Cree un directorio raíz de FTP
[root@centos]# mkdir /ftp
Cambiar el propietario y el grupo de la raíz de FTP a ftp
[root@centos]# chown ftp:ftp /ftp
Set minimal permissions for FTP root:
[root@centos]# chmod -R 666 /ftp/
[root@centos]# ls -ld /ftp/
drw-rw-rw-. 2 ftp ftp 6 Feb 27 02:01 /ftp/
[root@centos]#
En este caso, les dimos a los usuarios acceso de lectura / escritura a todo el árbol FTP raíz.
Configurar /etc/vsftpd/vsftpd.conf "
[root@centos]# vim /etc/vsftpd/vsftpd.conf
# Example config file /etc/vsftpd/vsftpd.conf
#
# The default compiled in settings are fairly paranoid. This sample file
# loosens things up a bit, to make the ftp daemon more usable.
# Please see vsftpd.conf.5 for all compiled in defaults.
#
# READ THIS: This example file is NOT an exhaustive list of vsftpd options.
# Please read the vsftpd.conf.5 manual page to get a full idea of vsftpd's
# capabilities.
Querremos cambiar las siguientes directivas en el archivo vsftp.conf .
Habilite la carga anónima descomentando anon_mkdir_write_enable = YES
chown los archivos subidos a propiedad del usuario del sistema ftp
chown_uploads = SÍ
chown_username = ftp
Cambie el usuario del sistema utilizado por vsftp al usuario de ftp: nopriv_user = ftp
Configure el banner personalizado para que el usuario lea antes de iniciar sesión.
ftpd_banner = Bienvenido a nuestro repositorio FTP anónimo. Todas las conexiones se supervisan y registran.
Establezcamos solo conexiones IPv4 -
escuchar = SI
listen_ipv6 = NO
Ahora, necesitamos reiniciar o HUP el servicio vsftp para aplicar nuestros cambios.
[root@centos]# systemctl restart vsftpd
Vamos a conectarnos a nuestro servidor FTP y asegurarnos de que nuestro demonio FTP esté respondiendo.
[root@centos rdc]# ftp 10.0.4.34
Connected to localhost (10.0.4.34).
220 Welcome to our Anonymous FTP Repo. All connections are monitored and logged.
Name (localhost:root): anonymous
331 Please specify the password.
Password:
'230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
Cuando hablemos de administración remota en CentOS como administrador, exploraremos dos métodos:
- Gestión de consola
- Gestión de GUI
Gestión de consola remota
La administración de consola remota significa realizar tareas de administración desde la línea de comandos a través de un servicio como ssh. Para utilizar CentOS Linux de forma eficaz, como administrador, deberá dominar la línea de comandos. Linux en su esencia fue diseñado para ser utilizado desde la consola. Incluso hoy en día, algunos administradores de sistemas prefieren la potencia del comando y ahorran dinero en el hardware ejecutando equipos Linux básicos sin terminal físico y sin GUI instalada.
Gestión remota de GUI
La administración remota de GUI generalmente se logra de dos maneras: una X-Session remota o un protocolo de capa de aplicación GUI como VNC. Cada uno tiene sus ventajas y desventajas. Sin embargo, en su mayor parte, VNC es la mejor opción para la administración. Permite el control gráfico desde otros sistemas operativos como Windows u OS X que no soportan de forma nativa el protocolo X Windows.
El uso de sesiones X remotas es nativo de los administradores de ventanas y administradores de escritorio de X-Window que se ejecutan en X. Sin embargo, toda la arquitectura de sesiones X se usa principalmente con Linux. No todos los administradores del sistema tendrán una computadora portátil Linux a mano para establecer una sesión X remota. Por lo tanto, lo más común es utilizar una versión adaptada de VNC Server.
Los mayores inconvenientes de VNC son: VNC no es compatible de forma nativa con un entorno multiusuario como X-Sessions remotas. Por lo tanto, para el acceso GUI a los usuarios finales, las XSessions remotas serían la mejor opción. Sin embargo, nos preocupa principalmente la administración de un servidor CentOS de forma remota.
Analizaremos la configuración de VNC para varios administradores frente a unos pocos cientos de usuarios finales con X-Sessions remotas.
Sentar las bases para la seguridad con SSH para el acceso a la consola remota
ssh o Secure Shelles ahora el estándar para administrar de forma remota cualquier servidor Linux. SSH, a diferencia de telnet, usa TLS para la autenticidad y el cifrado de extremo a extremo de las comunicaciones. Cuando se configura correctamente, un administrador puede estar bastante seguro de que tanto su contraseña como el servidor son de confianza de forma remota.
Antes de configurar SSH, hablemos un poco sobre la seguridad básica y el acceso menos común. Cuando SSH se ejecuta en su puerto predeterminado de 22; más temprano que tarde, recibirá ataques de diccionario de fuerza bruta contra nombres de usuario y contraseñas comunes. Esto solo viene con el territorio. No importa cuántos hosts agregue a sus archivos de denegación, solo vendrán desde diferentes direcciones IP a diario.
Con algunas reglas comunes, simplemente puede tomar algunas medidas proactivas y dejar que los malos pierdan el tiempo. A continuación, se muestran algunas reglas de seguridad que se deben seguir al usar SSH para la administración remota en un servidor de producción:
Nunca use un nombre de usuario o contraseña común. Los nombres de usuario en el sistema no deben ser los predeterminados del sistema ni estar asociados con la dirección de correo electrónico de la empresa como:[email protected]
El acceso de root o el acceso de administración no deben permitirse a través de SSH. Use un nombre de usuario único y su para root o una cuenta de administración una vez autenticado a través de SSH.
La política de contraseñas es imprescindible: Contraseñas de usuario SSH complejas como: "This & IS & a & GUD & P @ ssW0rd & 24 & me". Cambie las contraseñas cada pocos meses para eliminar la susceptibilidad a ataques incrementales de fuerza bruta.
Desactive las cuentas abandonadas o que no se utilicen durante períodos prolongados. Si un gerente de contratación tiene un mensaje de voz que indica que no hará entrevistas durante un mes; que puede llevar a personas conocedoras de la tecnología con mucho tiempo libre, por ejemplo.
Mire sus registros a diario. Como administrador del sistema, dedique al menos 30 a 40 minutos cada mañana a revisar los registros de seguridad y del sistema. Si se le pregunta, dígales a todos que no tiene tiempo para no ser proactivo. Esta práctica ayudará a aislar las señales de advertencia antes de que se presente un problema a los usuarios finales y las ganancias de la empresa.
Note On Linux Security- Cualquier persona interesada en la administración de Linux debe buscar activamente las noticias y la tecnología actual de ciberseguridad. Si bien escuchamos sobre todo sobre otros sistemas operativos que se han visto comprometidos, una caja de Linux insegura es un tesoro buscado por los ciberdelincuentes. Con el poder de Linux en una conexión a Internet de alta velocidad, un ciberdelincuente experto puede utilizar Linux para aprovechar los ataques a otros sistemas operativos.
Instalar y configurar SSH para acceso remoto
Step 1 - Instale el servidor SSH y todos los paquetes dependientes.
[root@localhost]# yum -y install openssh-server
'Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: repos.centos.net
* extras: repos.dfw.centos.com
* updates: centos.centos.com
Resolving Dependencies
--> Running transaction check
---> Package openssh-server.x86_64 0:6.6.1p1-33.el7_3 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
Step 2 - Haga un uso regular seguro para agregar para el acceso al shell.
[root@localhost ~]# useradd choozer
[root@localhost ~]# usermod -c "Remote Access" -d /home/choozer -g users -G
wheel -a choozer
Note- Añadimos el nuevo usuario a la rueda de grupo que permite capacidad de Do en la raíz una vez que el acceso SSH ha sido autenticada. También usamos un nombre de usuario que no se encuentra en listas de palabras comunes. De esta forma, nuestra cuenta no se bloqueará cuando SSH sea atacado.
El archivo que contiene los ajustes de configuración para el servidor sshd es / etc / ssh / sshd_config .
Las partes que queremos editar inicialmente son:
LoginGraceTime 60m
PermitRootLogin no
Step 3- Vuelva a cargar el demonio SSH sshd .
[root@localhost]# systemctl reload sshd
Es bueno establecer el período de gracia de cierre de sesión en 60 minutos. Algunas tareas de administración complejas pueden superar el valor predeterminado de 2 minutos. Realmente no hay nada más frustrante que tener un tiempo de espera de sesión SSH al configurar o investigar cambios.
Step 4 - Intentemos iniciar sesión con las credenciales de root.
bash-3.2# ssh centos.vmnet.local
[email protected]'s password:
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
Step 5- Ya no podemos iniciar sesión de forma remota a través de ssh con credenciales de root . Así que iniciemos sesión en nuestra cuenta de usuario sin privilegios y accedamos a la cuenta raíz .
bash-3.2# ssh [email protected]
[email protected]'s password:
[choozer@localhost ~]$ su root
Password:
[root@localhost choozer]#
Step 6- Finalmente, asegurémonos de que el servicio SSHD se cargue en el arranque y que firewalld permita conexiones SSH externas.
[root@localhost]# systemctl enable sshd
[root@localhost]# firewall-cmd --permanent --add-service=ssh
success
[root@localhost]# firewall-cmd --reload
success
[root@localhost]#
SSH ahora está configurado y listo para la administración remota. Dependiendo de la frontera de su empresa, es posible que el dispositivo de frontera de filtrado de paquetes deba configurarse para permitir la administración remota SSH fuera de la LAN corporativa.
Configurar VNC para la administración remota de CentOS
Hay algunas formas de habilitar la administración remota de CentOS a través de VNC en CentOS 6 - 7. La forma más fácil, pero más limitante, es simplemente usando un paquete llamado vino .Vinoes una aplicación de conexión de escritorio de red virtual para Linux diseñada en torno a la plataforma de escritorio Gnome. Por lo tanto, se asume que la instalación se completó con Gnome Desktop. Si no se ha instalado Gnome Desktop, hágalo antes de continuar. Vino se instalará con una instalación GUI de Gnome de forma predeterminada.
Para configurar el uso compartido de la pantalla con Vino en Gnome, queremos ir a las Preferencias del sistema CentOS para compartir la pantalla.
Applications->System Tools->Settings->Sharing
Notas para configurar VNC Desktop Sharing -
Disable New Connections must ask for access- Esta opción requerirá acceso físico para aceptar todas las conexiones. Esta opción evitará la administración remota a menos que haya alguien en el escritorio físico.
Enable Require a password- Esto es independiente de la contraseña de usuario. Controlará el acceso al escritorio virtual y aún requerirá la contraseña de usuario para acceder a un escritorio bloqueado (esto es bueno para la seguridad).
Forward UP&P Ports: If available leave disabled- El reenvío de puertos UP&P enviará solicitudes Universal Plug and Play para un dispositivo de capa 3 para permitir conexiones VNC al host automáticamente. No queremos esto.
Asegúrese de que vino esté escuchando en el puerto VNC 5900.
[root@localhost]# netstat -antup | grep vino
tcp 0 0 0.0.0.0:5900 0.0.0.0:* LISTEN 4873/vino-server
tcp6 0 0 :::5900 :::* LISTEN 4873/vino-server
[root@localhost]#
Configuremos ahora nuestro Firewall para permitir conexiones VNC entrantes.
[root@localhost]# firewall-cmd --permanent --add-port=5900/tcp
success
[root@localhost]# firewall-cmd --reload
success
[root@localhost rdc]#
Finalmente, como puede ver, podemos conectar nuestro CentOS Box y administrarlo con un cliente VNC en Windows u OS X.
Es tan importante obedecer las mismas reglas para VNC como las que establecemos para SSH. Al igual que SSH, VNC se escanea continuamente a través de rangos de IP y se prueba para detectar contraseñas débiles. También vale la pena señalar que dejar el inicio de sesión predeterminado de CentOS habilitado con un tiempo de espera de la consola ayuda con la seguridad de VNC remota. Como un atacante necesitará el VNC y la contraseña de usuario, asegúrese de que su contraseña para compartir pantalla sea diferente y tan difícil de adivinar como la contraseña de usuario.
Después de ingresar la contraseña de uso compartido de pantalla de VNC, también debemos ingresar la contraseña de usuario para acceder a un escritorio bloqueado.
Security Note- De forma predeterminada, VNC no es un protocolo encriptado. Por lo tanto, la conexión VNC debe canalizarse a través de SSH para el cifrado.
Configurar túnel SSH a través de VNC
La configuración de un túnel SSH proporcionará una capa de cifrado SSH para canalizar la conexión VNC. Otra gran característica es que usa compresión SSH para agregar otra capa de compresión a las actualizaciones de la pantalla de VNC GUI. ¡Más seguro y más rápido siempre es bueno cuando se trata de la administración de servidores CentOS!
Entonces, desde su cliente que iniciará la conexión VNC, configuremos un túnel SSH remoto. En esta demostración, estamos usando OS X. Primero necesitamos sudo -s para rootear .
bash-3.2# sudo -s
password:
Ingrese la contraseña del usuario y ahora deberíamos tener un shell de root con un indicador # -
bash-3.2#
Ahora, creemos nuestro túnel SSH .
ssh -f [email protected] -L 2200:192.168.1.143:5900 -N
Analicemos este comando:
ssh - Ejecuta la utilidad ssh local
-f - ssh debería ejecutarse en segundo plano después de que la tarea se ejecute por completo
[email protected] - Usuario ssh remoto en el servidor CentOS que aloja servicios VNC
-L 2200:192.168.1.143:5900 - Cree nuestro túnel [Puerto local]: [host remoto]: [puerto remoto del servicio VNC]
-N le dice a ssh que no deseamos ejecutar un comando en el sistema remoto
bash-3.2# ssh -f [email protected] -L 2200:192.168.1.143:5900 -N
[email protected]'s password:
Después de ingresar con éxito la contraseña del usuario ssh remoto, se crea nuestro túnel ssh . ¡Ahora la parte genial! Para conectar, apuntamos nuestro cliente VNC al localhost en el puerto de nuestro túnel, en este caso el puerto 2200. A continuación se muestra la configuración en el cliente VNC de Mac Laptop -
¡Y finalmente, nuestra conexión de escritorio VNC remota!
Lo bueno de la tunelización SSH es que se puede utilizar para casi cualquier protocolo. Los túneles SSH se utilizan comúnmente para eludir el filtrado de puertos de entrada y salida por parte de un ISP, así como para engañar a los IDS / IPS de la capa de aplicación mientras evitan la supervisión de otra capa de sesión.
Su ISP puede filtrar el puerto 5900 para cuentas no comerciales pero permitir SSH en el puerto 22 (o se podría ejecutar SSH en cualquier puerto si el puerto 22 está filtrado).
IPS e IDS a nivel de aplicación analizan la carga útil. Por ejemplo, un desbordamiento de búfer común o inyección SQL. El cifrado SSH de extremo a extremo cifrará los datos de la capa de aplicación.
SSH Tunneling es una gran herramienta en la caja de herramientas de un administrador de Linux para hacer las cosas. Sin embargo, como administrador, queremos explorar el bloqueo de la disponibilidad de los usuarios con menos privilegios que tienen acceso al túnel SSH.
Administration Security Note- Restringir el túnel SSH es algo que requiere reflexión por parte de un administrador. Evaluar por qué los usuarios necesitan SSH Tunneling en primer lugar; qué usuarios necesitan tunelización; junto con la probabilidad práctica de riesgo y el impacto en el peor de los casos.
Este es un tema avanzado que se extiende más allá del ámbito de una cartilla de nivel intermedio. Se recomienda la investigación sobre este tema para aquellos que deseen alcanzar los niveles superiores de la administración de CentOS Linux.
Utilice el túnel SSH para X-Windows remoto
El diseño de X-Windows en Linux es realmente elegante en comparación con el de Windows. Si queremos controlar una caja Linux remota desde otra caja Linux, podemos aprovechar los mecanismos integrados en X.
X-Windows (a menudo llamado simplemente "X"), proporciona el mecanismo para mostrar las ventanas de la aplicación que se originan en una caja de Linux a la parte de visualización de X en otra caja de Linux. Entonces, a través de SSH, podemos solicitar que una aplicación X-Windows se envíe a la pantalla de otra caja de Linux en todo el mundo.
Para ejecutar una aplicación X de forma remota a través de un túnel ssh, solo necesitamos ejecutar un solo comando:
[root@localhost]# ssh -X [email protected]
The syntax is - ssh -X [usuario] @ [host], y el host debe ejecutar ssh con un usuario válido.
A continuación se muestra una captura de pantalla de GIMP que se ejecuta en una estación de trabajo Ubuntu a través de un túnel ssh remoto de XWindows.
Es bastante sencillo ejecutar aplicaciones de forma remota desde otro servidor o estación de trabajo Linux. También es posible iniciar una X-Session completa y tener todo el entorno de escritorio de forma remota a través de algunos métodos.
XDMCP
Paquetes de software sin cabeza como NX
Configurar pantallas y escritorios alternativos en X y administradores de escritorio como Gnome o KDE
Este método se usa más comúnmente para servidores sin cabeza sin pantalla física y realmente excede el alcance de un manual de nivel intermedio. Sin embargo, es bueno conocer las opciones disponibles.
Existen varias herramientas de terceros que pueden agregar capacidades mejoradas para el monitoreo del tráfico de CentOS. En este tutorial, nos centraremos en aquellos que están empaquetados en los principales repositorios de distribución de CentOS y en el repositorio de Fedora EPEL.
Siempre habrá situaciones en las que un administrador (por una razón u otra) se quede solo con herramientas en los repositorios principales de CentOS. La mayoría de las utilidades discutidas están diseñadas para ser utilizadas por un administrador con el caparazón de acceso físico. Cuando se monitorea el tráfico con una web-gui accesible, usar utilidades de terceros como ntop-ng o Nagios es la mejor opción (en lugar de volver a crear dichas instalaciones desde cero).
Para obtener más información sobre ambas soluciones configurables de interfaz gráfica de usuario web, a continuación se muestran algunos enlaces para comenzar con la investigación.
Monitoreo de tráfico para escenarios LAN / WAN
Nagios
Nagios ha existido durante mucho tiempo, por lo tanto, está probado y probado. En un momento fue todo gratis y de código abierto, pero desde entonces se ha convertido en una solución empresarial con modelos de licencias de pago para satisfacer la necesidad de sofisticación empresarial. Por lo tanto, antes de planificar cualquier implementación con Nagios, asegúrese de que las versiones con licencia de código abierto satisfagan sus necesidades o planee gastar con un presupuesto empresarial en mente.
La mayoría del software de monitoreo de tráfico de Nagios de código abierto se puede encontrar en: https://www.nagios.org
Para una historia resumida de Nagious, aquí está la página oficial de Historia de Nagios: https://www.nagios.org/about/history/
ntopng
Otra gran herramienta que permite monitorear el ancho de banda y el tráfico a través de una interfaz gráfica de usuario web se llama ntopng . ntopng es similar a la utilidad de Unix ntop y puede recopilar datos para una LAN o WAN completa. Al proporcionar una interfaz gráfica de usuario web para la administración, la configuración y la creación de gráficos, es fácil de usar para todos los departamentos de TI.
Al igual que Nagious, ntopng tiene disponibles versiones empresariales de código abierto y de pago. Para obtener más información sobre ntopng , visite el sitio web:http://www.ntop.org/
Instale el repositorio de Fedora EPEL ─ Paquetes adicionales para Enterprise Linux
Para acceder a algunas de las herramientas necesarias para el monitoreo del tráfico, necesitaremos configurar nuestro sistema CentOS para usar el Repositorio EPEL.
El repositorio EPEL no es mantenido ni respaldado oficialmente por CentOS. Sin embargo, es mantenido por un grupo de voluntarios de Fedora Core para abordar los paquetes comúnmente utilizados por los profesionales de Enterprise Linux no incluidos en CentOS, Fedora Core o Red Hat Linux Enterprise.
Caution -
Recuerde, el Repositorio EPEL no es oficial para CentOS y puede romper la compatibilidad y funcionalidad en servidores de producción con dependencias comunes. Teniendo esto en cuenta, se recomienda probar siempre en un servidor que no sea de producción y que ejecute los mismos servicios que los de producción antes de implementarlo en una caja crítica del sistema.
Realmente, la mayor ventaja de usar el repositorio EHEL sobre cualquier otro repositorio de terceros con CentOS es que podemos estar seguros de que los binarios no están contaminados. Se considera una buena práctica no utilizar los repositorios de una fuente que no sea de confianza.
Dicho todo esto, el repositorio oficial de EPEL es tan común con CentOS que se puede instalar fácilmente a través de YUM.
[root@CentOS rdc]# yum -y install epel-release
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: repo1.dal.innoscale.net
* extras: repo1.dal.innoscale.net
* updates: mirror.hmc.edu
Resolving Dependencies
--> Running transaction check
---> Package epel-release.noarch 0:7-9 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
--{ condensed output }--
Después de instalar el repositorio EPEL, desearemos actualizarlo.
[root@CentOS rdc]# yum repolist
Loaded plugins: fastestmirror, langpacks
epel/x86_64/metalink
| 11 kB 00:00:00
epel
| 4.3 kB 00:00:00
(1/3): epel/x86_64/group_gz
| 170 kB 00:00:00
(2/3): epel/x86_64/updateinfo
| 753 kB 00:00:01
(3/3): epel/x86_64/primary_db
--{ condensed output }--
En este punto, nuestro repositorio EPEL debería estar configurado y listo para usar. Comencemos instalando nload para la supervisión del ancho de banda de la interfaz.
Las herramientas en las que nos centraremos en este tutorial son:
- nload
- ntop
- ifstst
- iftop
- vnstat
- cerdos netos
- Wireshark
- Volcado de TCP
- Traceroute
Todos estos son estándar para monitorear el tráfico en empresas de Linux. El uso de cada rango de simple a avanzado, por lo que solo discutiremos brevemente herramientas como Wireshark y TCP Dump.
Instalar y usar nload
Con nuestros repositorios EPEL instalados y configurados en CentOS, ahora deberíamos poder instalar y usar nload . Esta utilidad está diseñada para graficar el ancho de banda por interfaz en tiempo real.
Como la mayoría de las otras instalaciones básicas, nload se instala a través del administrador de paquetes YUM.
[root@CentOS rdc]# yum -y install nload
Resolving Dependencies
--> Running transaction check
---> Package nload.x86_64 0:0.7.4-4.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
===============================================================================
===============================================================================
Package Arch
Version Repository Size
===============================================================================
===============================================================================
Installing:
nload x86_64
0.7.4-4.el7 epel 70 k
Transaction Summary
===============================================================================
===============================================================================
Install 1 Package
Total download size: 70 k
Installed size: 176 k
Downloading packages:
--{ condensed output }--
Ahora tenemos nload instalado y su uso es bastante sencillo.
[root@CentOS rdc]# nload enp0s5
nload supervisará la interfaz especificada. En este caso, enp0s5 una interfaz Ethernet, en tiempo real desde el terminal para cargas de tráfico de red y uso total de ancho de banda.
Como se ve, nload trazará los datos entrantes y salientes de la interfaz especificada, además de proporcionar una representación física del flujo de datos con las marcas "#".
La captura de pantalla que se muestra es de una página web simple que se está cargando con tráfico de demonios en segundo plano.
Los conmutadores de línea de comando comunes para nload son:
Mando | Acción |
---|---|
-un | Periodo de tiempo |
-t | Intervalo de actualización de tiempo en milisegundos, el valor predeterminado es 500 |
-u | Configura la visualización de la medición del tráfico h |
-U | Establece las unidades de medida del tráfico total de entrada / salida con las mismas opciones que -u |
La sintaxis estándar de nload es:
nload [options] <interface>
Si no se especifica ninguna interfaz, nload tomará automáticamente la primera interfaz Ethernet. Intentemos medir la entrada / salida total de datos en Megabytes y las velocidades actuales de transferencia de datos en Megabits.
[root@CentOS rdc]# nload -U M -u m
Los datos que entran / salen de la interfaz actual se miden en megabits por segundo y cada fila "Ttl", que representa el total de datos de entrada / salida, se muestra en megabytes.
nload es útil para que un administrador vea cuántos datos han pasado a través de una interfaz y cuántos datos entran / salen actualmente de una interfaz específica.
Para ver otras interfaces sin cerrar nload, simplemente use las teclas de flecha izquierda / derecha. Esto recorrerá todas las interfaces disponibles en el sistema.
Es posible monitorear múltiples interfaces simultáneamente usando el conmutador -m -
[root@CentOS rdc]# nload -u K -U M -m lo -m enp0s5
control de carga de dos interfaces simultáneamente (lo y enp0s5) -
systemd ha cambiado la forma en que se administra el registro del sistema para CentOS Linux. En lugar de que todos los demonios del sistema coloquen registros en ubicaciones individuales, en lugar de utilizar herramientas como tail o grep como forma principal de clasificar y filtrar las entradas del registro,journald ha aportado un único punto de administración para analizar los registros del sistema.
Los componentes principales detrás del registro de systemd son: journal, jounralctl y journald.conf
journald es el demonio de registro principal y se configura editando journald.conf, mientras que journalctl se usa para analizar los eventos registrados por journald .
Los eventos registrados por journald incluyen: eventos del kernel, procesos de usuario y servicios daemon.
Establecer la zona horaria correcta del sistema
Antes de usar journalctl , debemos asegurarnos de que la hora de nuestro sistema esté configurada en la hora correcta. Para hacer esto, queremos usar timedatectl .
Comprobemos la hora actual del sistema.
[root@centos rdc]# timedatectl status
Local time: Mon 2017-03-20 00:14:49 MDT
Universal time: Mon 2017-03-20 06:14:49 UTC
RTC time: Mon 2017-03-20 06:14:49
Time zone: America/Denver (MDT, -0600)
NTP enabled: yes
NTP synchronized: yes
RTC in local TZ: no
DST active: yes
Last DST change: DST began at
Sun 2017-03-12 01:59:59 MST
Sun 2017-03-12 03:00:00 MDT
Next DST change: DST ends (the clock jumps one hour backwards) at
Sun 2017-11-05 01:59:59 MDT
Sun 2017-11-05 01:00:00 MST
[root@centos rdc]#
Actualmente, el sistema es correcto para la zona horaria local. Si su sistema no lo está, establezcamos la zona horaria correcta. Después de cambiar la configuración, CentOS calculará automáticamente el desplazamiento de la zona horaria de la zona horaria actual, ajustando el reloj del sistema de inmediato.
Hagamos una lista de todas las zonas horarias con timedatectl -
[root@centos rdc]# timedatectl list-timezones
Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
Africa/Algiers
Africa/Asmara
Africa/Bamako
Africa/Bangui
Africa/Banjul
Africa/Bissau
Esa es la salida contenida de timedatectl list-timezones . Para encontrar una zona horaria local específica, se puede usar el comando grep:
[root@centos rdc]# timedatectl list-timezones | grep -i "america/New_York"
America/New_York
[root@centos rdc]#
La etiqueta utilizada por CentOS suele ser País / Región con un guión bajo en lugar de un espacio (New_York versus "New York").
Ahora establezcamos nuestra zona horaria -
[root@centos rdc]# timedatectl set-timezone "America/New_York"
[root@centos rdc]# date
Mon Mar 20 02:28:44 EDT 2017
[root@centos rdc]#
El reloj de su sistema debería ajustar automáticamente la hora.
Utilice journalctl para analizar registros
Cambios de línea de comando comunes cuando se usa journalctl -
Cambiar | Acción |
---|---|
-k | Muestra solo los mensajes del kernel |
-u | Listas por unidad específica (httpd, sshd, etc ...) |
-segundo | Inicia el desplazamiento de la etiqueta |
-o | Registra el formato de salida |
-pags | Filtra por tipo de registro (nombre o número) |
-F | Nombre de campo o valor de nombre de campo |
--UTC | Hora en compensación UTC |
--ya que | Filtrar por período de tiempo |
Examinar los registros de arranque
Primero, examinaremos y configuraremos los registros de arranque en CentOS Linux. Lo primero que notará es que CentOS, por defecto, no almacena el registro de arranque que es persistente entre los reinicios.
Para verificar los registros de arranque por instancia de reinicio, podemos ejecutar el siguiente comando:
[root@centos rdc]# journalctl --list-boots
-4 bca6380a31a2463aa60ba551698455b5 Sun 2017-03-19 22:01:57 MDT—Sun 2017-03-19 22:11:02 MDT
-3 3aaa9b84f9504fa1a68db5b49c0c7208 Sun 2017-03-19 22:11:09 MDT—Sun 2017-03-19 22:15:03 MDT
-2 f80b231272bf48ffb1d2ce9f758c5a5f Sun 2017-03-19 22:15:11 MDT—Sun 2017-03-19 22:54:06 MDT
-1 a071c1eed09d4582a870c13be5984ed6 Sun 2017-03-19 22:54:26 MDT—Mon 2017-03-20 00:48:29 MDT
0 9b4e6cdb43b14a328b1fa6448bb72a56 Mon 2017-03-20 00:48:38 MDT—Mon 2017-03-20 01:07:36 MDT
[root@centos rdc]#
Después de reiniciar el sistema, podemos ver otra entrada.
[root@centos rdc]# journalctl --list-boots
-5 bca6380a31a2463aa60ba551698455b5 Sun 2017-03-19 22:01:57 MDT—Sun 2017-03-19 22:11:02 MDT
-4 3aaa9b84f9504fa1a68db5b49c0c7208 Sun 2017-03-19 22:11:09 MDT—Sun 2017-03-19 22:15:03 MDT
-3 f80b231272bf48ffb1d2ce9f758c5a5f Sun 2017-03-19 22:15:11 MDT—Sun 2017-03-19 22:54:06 MDT
-2 a071c1eed09d4582a870c13be5984ed6 Sun 2017-03-19 22:54:26 MDT—Mon 2017-03-20 00:48:29 MDT
-1 9b4e6cdb43b14a328b1fa6448bb72a56 Mon 2017-03-20 00:48:38 MDT—Mon 2017-03-20 01:09:57 MDT
0 aa6aaf0f0f0d4fcf924e17849593d972 Mon 2017-03-20 01:10:07 MDT—Mon 2017-03-20 01:12:44 MDT
[root@centos rdc]#
Ahora, examinemos la última instancia de registro de arranque:
root@centos rdc]# journalctl -b -5
-- Logs begin at Sun 2017-03-19 22:01:57 MDT, end at Mon 2017-03-20 01:20:27 MDT. --
Mar 19 22:01:57 localhost.localdomain systemd-journal[97]: Runtime journal is using 8.0M
(max allowed 108.4M
Mar 19 22:01:57 localhost.localdomain kernel: Initializing cgroup subsys cpuset
Mar 19 22:01:57 localhost.localdomain kernel: Initializing cgroup subsys cpu
Mar 19 22:01:57 localhost.localdomain kernel: Initializing cgroup subsys cpuacct
Mar 19 22:01:57 localhost.localdomain kernel: Linux version 3.10.0514.6.2.el7.x86_64
([email protected].
Mar 19 22:01:57 localhost.localdomain kernel: Command line:
BOOT_IMAGE=/vmlinuz-3.10.0-514.6.2.el7.x86_64 ro
Mar 19 22:01:57 localhost.localdomain kernel: Disabled fast string operations
Mar 19 22:01:57 localhost.localdomain kernel: e820: BIOS-provided physical RAM map:
Arriba está la salida condensada de nuestro último arranque. También podríamos consultar un registro de inicio de horas, días, semanas, meses e incluso años. Sin embargo, por defecto CentOS no almacena registros de arranque persistentes. Para habilitar el almacenamiento persistente de los registros de arranque, debemos realizar algunos cambios de configuración:
- Cree puntos de almacenamiento central para los registros de arranque
- Dar los permisos adecuados a una nueva carpeta de registro
- Configurar journald.conf para registro persistente
Configurar la ubicación de inicio para registros de inicio persistentes
El lugar inicial donde journald querrá almacenar registros de arranque persistentes es / var / log / journal . Dado que esto no existe de forma predeterminada, vamos a crearlo:
[root@centos rdc]# mkdir /var/log/journal
Ahora, démosle al directorio los permisos adecuados de acceso al demonio journald -
systemd-tmpfiles --create --prefix /var/log/journal
Finalmente, digamos a journald que debe almacenar registros de arranque persistentes. En vim o en su editor de texto favorito, abra /etc/systemd/jounrald.conf " .
# See journald.conf(5) for details.
[Journal]=Storage=peristent
La línea que nos interesa es Storage = . Primero elimine el comentario # , luego cambie aStorage = persistentcomo se muestra arriba. Guarde y reinicie su sistema CentOS y tenga cuidado de que haya varias entradas al ejecutar journalctl list-boots .
Note- Un ID de máquina en constante cambio como el de un proveedor de VPS puede hacer que journald falle al almacenar registros de arranque persistentes. Hay muchas soluciones para tal escenario. Es mejor leer detenidamente las correcciones actuales publicadas en los foros de administración de CentOS, que seguir los consejos confiables de aquellos que han encontrado soluciones alternativas de VPS plausibles.
Para examinar un registro de arranque específico, simplemente necesitamos obtener cada desplazamiento usando journald --list-boots el desplazamiento con la opción -b . Entonces, para verificar el segundo registro de inicio que usaríamos:
journalctl -b -2
El valor predeterminado para -b sin un desplazamiento de registro de inicio especificado siempre será el registro de inicio actual después del último reinicio.
Analizar registros por tipo de registro
Los eventos de journald están numerados y categorizados en 7 tipos separados:
0 - emerg :: System is unusable
1 - alert :: Action must be taken immediatly
2 - crit :: Action is advised to be taken immediatly
3 - err :: Error effecting functionality of application
4 - warning :: Usually means a common issue that can affect security or usilbity
5 - info :: logged informtation for common operations
6 - debug :: usually disabled by default to troubleshoot functionality
Por lo tanto, si queremos ver todas las advertencias, se puede emitir el siguiente comando a través de journalctl :
[root@centos rdc]# journalctl -p 4
-- Logs begin at Sun 2017-03-19 22:01:57 MDT, end at Wed 2017-03-22 22:33:42 MDT. --
Mar 19 22:01:57 localhost.localdomain kernel: ACPI: RSDP 00000000000f6a10 00024
(v02 PTLTD )
Mar 19 22:01:57 localhost.localdomain kernel: ACPI: XSDT 0000000095eea65b 0005C
(v01 INTEL 440BX 06040000 VMW 01
Mar 19 22:01:57 localhost.localdomain kernel: ACPI: FACP 0000000095efee73 000F4
(v04 INTEL 440BX 06040000 PTL 00
Mar 19 22:01:57 localhost.localdomain kernel: ACPI: DSDT 0000000095eec749 1272A
(v01 PTLTD Custom 06040000 MSFT 03
Mar 19 22:01:57 localhost.localdomain kernel: ACPI: FACS 0000000095efffc0 00040
Mar 19 22:01:57 localhost.localdomain kernel: ACPI: BOOT 0000000095eec721 00028
(v01 PTLTD $SBFTBL$ 06040000 LTP 00 Mar 19 22:01:57 localhost.localdomain kernel: ACPI: APIC 0000000095eeb8bd 00742 (v01 PTLTD ? APIC 06040000 LTP 00 Mar 19 22:01:57 localhost.localdomain kernel: ACPI: MCFG 0000000095eeb881 0003C (v01 PTLTD $PCITBL$ 06040000 LTP 00
Mar 19 22:01:57 localhost.localdomain kernel: ACPI: SRAT 0000000095eea757 008A8
(v02 VMWARE MEMPLUG 06040000 VMW 00
Mar 19 22:01:57 localhost.localdomain kernel: ACPI: HPET 0000000095eea71f 00038
(v01 VMWARE VMW HPET 06040000 VMW 00
Mar 19 22:01:57 localhost.localdomain kernel: ACPI: WAET 0000000095eea6f7 00028
(v01 VMWARE VMW WAET 06040000 VMW 00
Mar 19 22:01:57 localhost.localdomain kernel: Zone ranges:
Mar 19 22:01:57 localhost.localdomain kernel: DMA [mem 0x000010000x00ffffff]
Mar 19 22:01:57 localhost.localdomain kernel: DMA32 [mem 0x010000000xffffffff]
Mar 19 22:01:57 localhost.localdomain kernel: Normal empty
Mar 19 22:01:57 localhost.localdomain kernel: Movable zone start for each node
Mar 19 22:01:57 localhost.localdomain kernel: Early memory node ranges
Mar 19 22:01:57 localhost.localdomain kernel: node 0: [mem 0x000010000x0009dfff]
Mar 19 22:01:57 localhost.localdomain kernel: node 0: [mem 0x001000000x95edffff]
Mar 19 22:01:57 localhost.localdomain kernel: node 0: [mem 0x95f000000x95ffffff]
Mar 19 22:01:57 localhost.localdomain kernel: Built 1 zonelists in Node order,
mobility grouping on. Total pages: 60
Mar 19 22:01:57 localhost.localdomain kernel: Policy zone: DMA32
Mar 19 22:01:57 localhost.localdomain kernel: ENERGY_PERF_BIAS: Set to
'normal', was 'performance'
Lo anterior muestra todas las advertencias de los últimos 4 días en el sistema.
La nueva forma de ver y leer los registros con systemd requiere poca práctica e investigación para familiarizarse. Sin embargo, con diferentes formatos de salida y un aviso particular para hacer que todos los registros de demonios empaquetados sean universales, vale la pena adoptarlo. journald ofrece una gran flexibilidad y eficiencia sobre los métodos tradicionales de análisis de registros.
Antes de explorar métodos específicos de CentOS para implementar un plan de respaldo estándar, analicemos primero las consideraciones típicas para una política de respaldo de nivel estándar. Lo primero a lo que queremos acostumbrarnos es la3-2-1 backup rule.
3-2-1 Estrategia de respaldo
En toda la industria, a menudo escuchará el término modelo de respaldo 3-2-1. Este es un muy buen enfoque para vivir al implementar un plan de respaldo. 3-2-1 se define de la siguiente manera:3copias de datos; por ejemplo, podemos tener la copia de trabajo; una copia puesta en el servidor CentOS diseñado para redundancia usando rsync; y los respaldos USB rotados y externos se realizan a partir de los datos del servidor de respaldo.2diferentes medios de respaldo. En realidad, tendríamos tres medios de copia de seguridad diferentes en este caso: la copia de trabajo en un SSD de una computadora portátil o estación de trabajo, los datos del servidor CentOS en una matriz RADI6 y las copias de seguridad externas colocadas en unidades USB.1copia de datos fuera del sitio; estamos rotando las unidades USB fuera del sitio todas las noches. Otro enfoque moderno puede ser un proveedor de respaldo en la nube.
Recuperación del sistema
Un plan de restauración completo es simplemente un plan diseñado por un administrador de CentOS para poner los sistemas vitales en línea con todos los datos intactos. Suponiendo que el 100% de los sistemas fallaran y se perdiera todo el hardware del sistema anterior, un administrador debe tener un plan para lograr el tiempo de actividad con datos de usuario intactos que supongan un tiempo de inactividad mínimo. El kernel monolítico utilizado en Linux en realidad hace que las restauraciones completas usando imágenes del sistema sean mucho más fáciles que Windows. Donde Windows usa una arquitectura de micro-kernel.
Una restauración completa de datos y una recuperación completa se logra generalmente a través de una combinación de métodos que incluyen imágenes de disco de producción configuradas de trabajo de servidores operativos clave, copias de seguridad redundantes de los datos del usuario que cumplen con la regla 3-2-1. Incluso algunos archivos confidenciales que pueden almacenarse en una caja fuerte segura a prueba de fuego con acceso limitado al personal de confianza de la empresa.
Un plan multifásico de recuperación de datos y restauración completa mediante herramientas nativas de CentOS puede consistir en:
dd para crear y restaurar imágenes de disco de producción de servidores configurados
rsync para realizar copias de seguridad incrementales de todos los datos del usuario
tar y gzip para almacenar copias de seguridad cifradas de archivos con contraseñas y notas de los administradores. Por lo general, esto se puede guardar en una unidad USB, cifrar y guardar en una caja fuerte a la que acceda un gerente senior. Además, esto garantiza que alguien más conocerá las credenciales de seguridad vitales si el administrador actual gana la lotería y desaparece en una isla soleada en algún lugar.
Si un sistema falla debido a una falla de hardware o un desastre, las siguientes serán las diferentes fases de las operaciones de restauración:
Cree un servidor que funcione con una imagen completa configurada
Restaurar datos al servidor de trabajo desde copias de seguridad
Tener acceso físico a las credenciales necesarias para realizar las dos primeras operaciones.
Utilice rsync para copias de seguridad a nivel de archivo
rsync es una gran utilidad para sincronizar directorios de archivos de forma local o con otro servidor. rsync ha sido utilizado durante años por los administradores del sistema, por lo que es muy refinado con el fin de realizar copias de seguridad de los datos. En opinión del autor, una de las mejores características de la sincronización es su capacidad para ser programada desde la línea de comandos.
En este tutorial, analizaremos rsync de varias formas:
- Explore y hable sobre algunas opciones comunes
- Crea copias de seguridad locales
- Cree copias de seguridad remotas a través de SSH
- Restaurar copias de seguridad locales
rsynclleva el nombre de su propósito: Remote Sync y es potente y flexible en su uso.
A continuación se muestra una copia de seguridad remota básica de rsync sobre ssh:
MiNi:~ rdc$ rsync -aAvz --progress ./Desktop/ImportantStuff/
[email protected]:home/rdc/ Documents/RemoteStuff/
[email protected]'s password:
sending incremental file list
6,148 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=23/25)
2017-02-14 16_26_47-002 - Veeam_Architecture001.png
33,144 100% 31.61MB/s 0:00:00 (xfr#2, to-chk=22/25)
A Guide to the WordPress REST API | Toptal.pdf
892,406 100% 25.03MB/s 0:00:00 (xfr#3, to-chk=21/25)
Rick Cardon Technologies, LLC..webloc
77 100% 2.21kB/s 0:00:00 (xfr#4, to-chk=20/25)
backbox-4.5.1-i386.iso
43,188,224 1% 4.26MB/s 0:08:29
sent 2,318,683,608 bytes received 446 bytes 7,302,941.90 bytes/sec
total size is 2,327,091,863 speedup is 1.00
MiNi:~ rdc$
La siguiente sincronización envió casi 2,3 GB de datos a través de nuestra LAN. La belleza de rsync es que funciona de forma incremental a nivel de bloque, archivo por archivo. Esto significa que, si cambiamos solo dos caracteres en un archivo de texto de 1 MB, ¡solo uno o dos bloques se transferirán a través de la LAN en la próxima sincronización!
Además, la función incremental se puede deshabilitar a favor de más ancho de banda de red utilizado para una menor utilización de la CPU. Esto podría resultar aconsejable si copia constantemente varios archivos de base de datos de 10 MB cada 10 minutos en un Backup-Lan dedicado de 1 Gb. El razonamiento es: estos siempre cambiarán y se transmitirán de forma incremental cada 10 minutos y pueden gravar la carga de la CPU remota. Dado que la carga total de transferencia no excederá los 5 minutos, es posible que deseemos sincronizar los archivos de la base de datos en su totalidad.
A continuación se muestran los conmutadores más comunes con rsync :
rsync syntax:
rsync [options] [local path] [[remote host:remote path] or [target path
Cambiar | Acción |
---|---|
-un | Modo de archivo y asume -r, -p, -t, -g, -l |
-re | Sincronizar solo el árbol de directorios, sin archivos |
-r | Recursivo en directorio |
-l | Copiar enlaces simbólicos como enlaces simbólicos |
-pags | Conservar los permisos |
-gramo | Conservar grupo |
-v | Salida detallada |
-z | Comprimir sobre enlace de red |
-X | Conservar atributos extendidos |
-UN | Conservar las ACL |
-t | Conservar marcas de tiempo |
-W | Transfiera el archivo completo, no los bloques incrementales |
-u | No sobrescriba archivos en el destino |
--Progreso | Mostrar el progreso de la transferencia |
--Eliminar | Eliminar archivos antiguos en el objetivo |
- tamaño máximo = XXX | Tamaño máximo de archivo para sincronizar |
Cuando usar rsync
Mi preferencia personal por rsync es cuando se realizan copias de seguridad de archivos desde un host de origen a un host de destino. Por ejemplo, todos los directorios de inicio para la recuperación de datos o incluso fuera del sitio y en la nube para la recuperación de desastres.
Copia de seguridad local con rsync
Ya hemos visto cómo transferir archivos de un host a otro. El mismo método se puede utilizar para sincronizar directorios y archivos localmente.
Hagamos una copia de seguridad incremental manual de / etc / en el directorio de nuestro usuario raíz.
Primero, necesitamos crear un directorio fuera de ~ / root para la copia de seguridad sincronizada -
[root@localhost rdc]# mkdir /root/etc_baks
Luego, asegúrese de que haya suficiente espacio libre en disco.
[root@localhost rdc]# du -h --summarize /etc/
49M /etc/
[root@localhost rdc]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/cl-root 43G 15G 28G 35% /
Somos buenos para sincronizar todo nuestro directorio / etc / -
rsync -aAvr /etc/ /root/etc_baks/
Nuestro directorio / etc / sincronizado -
[root@localhost etc_baks]# ls -l ./
total 1436
drwxr-xr-x. 3 root root 101 Feb 1 19:40 abrt
-rw-r--r--. 1 root root 16 Feb 1 19:51 adjtime
-rw-r--r--. 1 root root 1518 Jun 7 2013 aliases
-rw-r--r--. 1 root root 12288 Feb 27 19:06 aliases.db
drwxr-xr-x. 2 root root 51 Feb 1 19:41 alsa
drwxr-xr-x. 2 root root 4096 Feb 27 17:11 alternatives
-rw-------. 1 root root 541 Mar 31 2016 anacrontab
-rw-r--r--. 1 root root 55 Nov 4 12:29 asound.conf
-rw-r--r--. 1 root root 1 Nov 5 14:16 at.deny
drwxr-xr-x. 2 root root 32 Feb 1 19:40 at-spi2
--{ condensed output }--
Ahora hagamos un rsync incremental -
[root@localhost etc_baks]# rsync -aAvr --progress /etc/ /root/etc_baks/
sending incremental file list
test_incremental.txt
0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=1145/1282)
sent 204620 bytes received 2321 bytes 413882.00 bytes/sec
total size is 80245040 speedup is 387.77
[root@localhost etc_baks]#
Solo se copió nuestro archivo test_incremental.txt .
Copias de seguridad diferenciales remotas con rsync
Hagamos nuestro respaldo completo inicial de rsync en un servidor con un plan de respaldo implementado. Este ejemplo es en realidad una copia de seguridad de una carpeta en una estación de trabajo Mac OS X en un servidor CentOS. Otro gran aspecto de rsync es que se puede usar en cualquier plataforma a la que se haya trasladado rsync.
MiNi:~ rdc$ rsync -aAvz Desktop/ImportanStuff/
[email protected]:Documents/RemoteStuff
[email protected]'s password:
sending incremental file list
./
A Guide to the WordPress REST API | Toptal.pdf
Rick Cardon Tech LLC.webloc
VeeamDiagram.png
backbox-4.5.1-i386.iso
dhcp_admin_script_update.py
DDWRT/
DDWRT/.DS_Store
DDWRT/ddwrt-linksys-wrt1200acv2-webflash.bin
DDWRT/ddwrt_mod_notes.docx
DDWRT/factory-to-ddwrt.bin
open_ldap_config_notes/
open_ldap_config_notes/ldap_directory_a.png
open_ldap_config_notes/open_ldap_notes.txt
perl_scripts/
perl_scripts/mysnmp.pl
php_scripts/
php_scripts/chunked.php
php_scripts/gettingURL.php
sent 2,318,281,023 bytes received 336 bytes 9,720,257.27 bytes/sec
total size is 2,326,636,892 speedup is 1.00
MiNi:~ rdc$
Ahora hemos hecho una copia de seguridad de una carpeta desde una estación de trabajo a un servidor que ejecuta un volumen RAID6 con medios de recuperación de desastres rotados almacenados fuera del sitio. El uso de rsync nos ha proporcionado una copia de seguridad estándar 3-2-1 con solo un servidor que tiene una costosa matriz de discos redundantes y copias de seguridad diferenciales rotadas.
Ahora hagamos otra copia de seguridad de la misma carpeta usando rsync después de que se haya agregado un solo archivo nuevo llamado test_file.txt .
MiNi:~ rdc$ rsync -aAvz Desktop/ImportanStuff/
[email protected]:Documents/RemoteStuff
[email protected]'s password:
sending incremental file list
./
test_file.txt
sent 814 bytes received 61 bytes 134.62 bytes/sec
total size is 2,326,636,910 speedup is 2,659,013.61
MiNi:~ rdc$
Como puede ver, solo el nuevo archivo se envió al servidor a través de rsync . La comparación diferencial se realizó archivo por archivo.
Algunas cosas a tener en cuenta son: Esto solo copia el nuevo archivo: test_file.txt, ya que era el único archivo con cambios. rsync usa ssh. Nunca necesitamos usar nuestra cuenta de root en ninguna de las dos máquinas.
Rsync , simple, potente y eficaz, es ideal para realizar copias de seguridad de carpetas y estructuras de directorios enteras. Sin embargo, rsync por sí solo no automatiza el proceso. Aquí es donde debemos profundizar en nuestra caja de herramientas y encontrar la mejor, pequeña y simple herramienta para el trabajo.
Para automatizar las copias de seguridad de rsync con cronjobs , es esencial que los usuarios de SSH se configuren con claves SSH para la autenticación. Esto, combinado con cronjobs, permite que rsync se realice automáticamente a intervalos programados.
Utilice DD para imágenes de recuperación de bare metal bloque a bloque
DD es una utilidad de Linux que ha existido desde los albores del kernel de Linux que se reunió con las utilidades de GNU.
dd en términos más simples copia una imagen de un área de disco seleccionada. Luego brinda la capacidad de copiar bloques seleccionados de un disco físico. Entonces, a menos que tenga copias de seguridad, una vez que dd escribe en un disco, todos los bloques se reemplazan. La pérdida de datos anteriores excede las capacidades de recuperación para la recuperación de datos de nivel profesional incluso a un precio muy alto.
El proceso completo para crear una imagen de sistema de arranque con dd es el siguiente:
- Arranque desde el servidor CentOS con una distribución de Linux de arranque
- Busque la designación del disco de arranque que se va a crear
- Decidir la ubicación donde se almacenará la imagen de recuperación
- Encuentre el tamaño de bloque usado en su disco
- Inicie la operación de imagen dd
En este tutorial, por razones de tiempo y simplicidad, crearemos una imagen ISO del registro de arranque maestro desde una máquina virtual CentOS. Luego almacenaremos esta imagen fuera del sitio. En caso de que nuestro MBR se dañe y deba restaurarse, el mismo proceso se puede aplicar a todo un disco o partición de arranque. Sin embargo, el tiempo y el espacio en disco necesarios son un poco exagerados para este tutorial.
Se recomienda que los administradores de CentOS se vuelvan competentes en la restauración de un disco / partición totalmente de arranque en un entorno de prueba y realicen una restauración completa. Esto eliminará mucha presión cuando finalmente se necesite completar la práctica en una situación de la vida real con los gerentes y unas pocas docenas de usuarios finales contando el tiempo de inactividad. En tal caso, 10 minutos de resolver las cosas pueden parecer una eternidad y hacer sudar.
Note- Cuando utilice dd, asegúrese de NO confundir los volúmenes de origen y de destino. Puede destruir datos y servidores de arranque copiando su ubicación de copia de seguridad en una unidad de arranque. O posiblemente, peor aún, destruir los datos para siempre copiando los datos a un nivel muy bajo con DD.
A continuación se muestran los parámetros y conmutadores de línea de comandos comunes para dd :
Cambiar | Acción |
---|---|
si = | En archivo o fuente a copiar |
de = | Archivo de salida o copia del archivo de entrada |
bs | Establecer el tamaño del bloque de entrada y salida |
obs | Establecer el tamaño del bloque del archivo de salida |
SII | Establecer el tamaño del bloque del archivo de entrada |
contar | Establecer el número de bloques a copiar |
conv | Opciones adicionales para agregar para imágenes |
No hay error | No dejes de procesar un error |
sincronizar | Bloques de entrada de pads sin montar en caso de error o desalineación |
Note on block size- El tamaño de bloque predeterminado para dd es de 512 bytes. Este era el tamaño de bloque estándar de las unidades de disco duro de menor densidad. Los HDD de mayor densidad de hoy en día han aumentado a 4096 bytes (4kB) tamaños de bloque para permitir discos que van desde 1TB o más. Por lo tanto, querremos verificar el tamaño del bloque del disco antes de usar dd con discos duros más nuevos y de mayor capacidad.
Para este tutorial, en lugar de trabajar en un servidor de producción con dd , usaremos una instalación de CentOS que se ejecuta en VMWare. También configuraremos VMWare para que arranque una imagen ISO de Linux de arranque en lugar de trabajar con una memoria USB de arranque.
Primero, necesitaremos descargar la imagen de CentOS titulada: CentOS Gnome ISO . Esto es casi 3GB y se recomienda guardar siempre una copia para crear memorias USB de arranque y arrancar en instalaciones de servidores virtuales para la resolución de problemas y las imágenes completas.
Otras distribuciones de Linux de arranque también funcionarán. Linux Mint se puede utilizar para ISO de arranque, ya que tiene un gran soporte de hardware y herramientas de disco GUI pulidas para el mantenimiento.
La imagen de arranque de CentOS GNOME Live se puede descargar desde: http://buildlogs.centos.org/rolling/7/isos/x86_64/CentOS-7-x86_64-LiveGNOME.iso
Configuremos nuestra instalación de VMWare Workstation para arrancar desde nuestra imagen de arranque de Linux. Los pasos son para VMWare en OS X. Sin embargo, son similares en VMWare Workstation en Linux, Windows e incluso Virtual Box.
Note- Usar una solución de escritorio virtual como Virtual Box o VMWare Workstation es una excelente manera de configurar escenarios de laboratorio para aprender las tareas de administración de CentOS. Proporciona la capacidad de instalar varias instalaciones de CentOS, prácticamente sin configuración de hardware, lo que permite que la persona se concentre en la administración e incluso guarde el estado del servidor antes de realizar cambios.
Primero configuremos un cd-rom virtual y adjuntemos nuestra imagen ISO para arrancar en lugar de la instalación del servidor virtual CentOS -
Ahora, configure el disco de inicio -
Ahora, cuando se inicie, nuestra máquina virtual se iniciará desde la imagen ISO de inicio de CentOS y permitirá el acceso a los archivos en el servidor Virtual CentOS que se configuró previamente.
Revisemos nuestros discos para ver de dónde queremos copiar el MBR (la salida condensada es la siguiente).
MiNt ~ # fdisk -l
Disk /dev/sda: 60 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Hemos localizado nuestros dos discos físicos: sda y sdb . Cada uno tiene un tamaño de bloque de 512 bytes. Entonces, ahora ejecutaremos el comando dd para copiar los primeros 512 bytes para nuestro MBR en SDA1.
La mejor forma de hacerlo es:
[root@mint rdc]# dd if=/dev/sda bs=512 count=1 | gzip -c >
/mnt/sdb/images/mbr.iso.gz
1+0 records in
1+0 records out
512 bytes copied, 0.000171388 s, 3.0 MB/s
[root@mint rdc]# ls /mnt/sdb/
mbr-iso.gz
[root@mint rdc]#
Así, tenemos una imagen completa de nuestro registro de arranque maestro. Si tenemos suficiente espacio para crear una imagen de la unidad de arranque, podríamos crear fácilmente una imagen de arranque del sistema completo:
dd if=/dev/INPUT/DEVICE-NAME-HERE conv=sync,noerror bs=4K | gzip -c >
/mnt/sdb/boot-server-centos-image.iso.gz
La conv = sincronización se utiliza cuando bytes deben estar alineados para un medio físico. En este caso, dd puede obtener un error si no se leen las alineaciones exactas de 4K (digamos ... un archivo que es solo 3K pero necesita tomar un mínimo de un solo bloque de 4K en el disco. O simplemente hay una lectura de error y el El archivo no puede ser leído por dd.). Por lo tanto, dd con conv = sync, noerror rellenará el 3K con datos triviales pero útiles para el medio físico en alineaciones de bloques de 4K. Si bien no presenta un error que pueda poner fin a una gran operación.
Cuando trabajamos con datos de discos, siempre queremos incluir: conv = sync, parámetro noerror .
Esto se debe simplemente a que los discos no son flujos como los datos TCP. Están formados por bloques alineados a un tamaño determinado. Por ejemplo, si tenemos bloques de 512 bytes, un archivo de solo 300 bytes todavía necesita 512 bytes completos de espacio en disco (posiblemente 2 bloques para información de inodo como permisos y otra información del sistema de archivos).
Utilice gzip y tar para almacenamiento seguro
gzip y tar son dos utilidades que un administrador de CentOS debe acostumbrarse a usar. Se utilizan para mucho más que simplemente descomprimir archivos.
Usando Gnu Tar en CentOS Linux
Tar es una utilidad de archivo similar a winrar en Windows. Su nombre Tape Archive abreviado como tar resume bastante bien la utilidad. tar tomará archivos y los colocará en un archivo por conveniencia lógica. Por lo tanto, en lugar de las docenas de archivos almacenados en / etc. podríamos simplemente "guardarlos" en un archivo para realizar copias de seguridad y almacenarlos.
tar ha sido el estándar para almacenar archivos archivados en Unix y Linux durante muchos años. Por lo tanto, usar tar junto con gzip o bzip se considera una mejor práctica para los archivos en cada sistema.
A continuación se muestra una lista de opciones y conmutadores de línea de comando comunes que se utilizan con tar:
Cambiar | Acción |
---|---|
-C | Crea un nuevo archivo .tar |
-C | Extrae a un directorio diferente |
-j | Utiliza compresión bzip2 |
-z | Utiliza compresión gzip |
-v | Muestra detallada el progreso del archivo |
-t | Muestra el contenido del archivo |
-F | Nombre de archivo del archivo |
-X | Extrae el archivo tar |
A continuación se muestra la sintaxis básica para crear un archivo tar .
tar -cvf [tar archive name]
Note on Compression mechanisms with tar- Se recomienda seguir uno de los dos esquemas de compresión comunes cuando se usa tar: gzip y bzip2. Los archivos gzip consumen menos recursos de CPU pero suelen ser de mayor tamaño. Si bien bzip2 tardará más en comprimirse, utilizan más recursos de CPU; pero resultará en un final más pequeño.
Al usar la compresión de archivos, siempre querremos usar extensiones de archivo estándar para que todos, incluidos nosotros mismos, sepan (en lugar de adivinar por ensayo y error) qué esquema de compresión se necesita para extraer archivos.
bzip2 | .tbz |
bzip2 | .tar.tbz |
bzip2 | .tb2 |
gzip | .tar.gz |
gzip | .tgz |
Cuando necesite extraer archivos en una caja de Windows o para usarlos en Windows, se recomienda usar .tar.tbz o .tar.gz, ya que la mayoría de las extensiones de tres caracteres confundirán a los administradores de Windows y solo a los administradores de Windows (sin embargo, eso es a veces el resultado deseado)
Creemos un archivo tar comprimido con gzip a partir de nuestras copias de seguridad remotas copiadas desde la estación de trabajo Mac -
[rdc@mint Documents]$ tar -cvz -f RemoteStuff.tgz ./RemoteStuff/
./RemoteStuff/
./RemoteStuff/.DS_Store
./RemoteStuff/DDWRT/
./RemoteStuff/DDWRT/.DS_Store
./RemoteStuff/DDWRT/ddwrt-linksys-wrt1200acv2-webflash.bin
./RemoteStuff/DDWRT/ddwrt_mod_notes.docx
./RemoteStuff/DDWRT/factory-to-ddwrt.bin
./RemoteStuff/open_ldap_config_notes/
./RemoteStuff/open_ldap_config_notes/ldap_directory_a.png
./RemoteStuff/open_ldap_config_notes/open_ldap_notes.txt
./RemoteStuff/perl_scripts/
./RemoteStuff/perl_scripts/mysnmp.pl
./RemoteStuff/php_scripts/
./RemoteStuff/php_scripts/chunked.php
./RemoteStuff/php_scripts/gettingURL.php
./RemoteStuff/A Guide to the WordPress REST API | Toptal.pdf
./RemoteStuff/Rick Cardon Tech LLC.webloc
./RemoteStuff/VeeamDiagram.png
./RemoteStuff/backbox-4.5.1-i386.iso
./RemoteStuff/dhcp_admin_script_update.py
./RemoteStuff/test_file.txt
[rdc@mint Documents]$ ls -ld RemoteStuff.tgz
-rw-rw-r--. 1 rdc rdc 2317140451 Mar 12 06:10 RemoteStuff.tgz
Note- En lugar de agregar todos los archivos directamente al archivo, archivamos toda la carpeta RemoteStuff . Este es el método más sencillo. Simplemente porque cuando se extrae, todo el directorio RemoteStuff se extrae con todos los archivos dentro del directorio de trabajo actual como ./currentWorkingDirectory/RemoteStuff/
Ahora extraigamos el archivo dentro del directorio / root / home.
[root@centos ~]# tar -zxvf RemoteStuff.tgz
./RemoteStuff/
./RemoteStuff/.DS_Store
./RemoteStuff/DDWRT/
./RemoteStuff/DDWRT/.DS_Store
./RemoteStuff/DDWRT/ddwrt-linksys-wrt1200acv2-webflash.bin
./RemoteStuff/DDWRT/ddwrt_mod_notes.docx
./RemoteStuff/DDWRT/factory-to-ddwrt.bin
./RemoteStuff/open_ldap_config_notes/
./RemoteStuff/open_ldap_config_notes/ldap_directory_a.png
./RemoteStuff/open_ldap_config_notes/open_ldap_notes.txt
./RemoteStuff/perl_scripts/
./RemoteStuff/perl_scripts/mysnmp.pl
./RemoteStuff/php_scripts/
./RemoteStuff/php_scripts/chunked.php
./RemoteStuff/php_scripts/gettingURL.php
./RemoteStuff/A Guide to the WordPress REST API | Toptal.pdf
./RemoteStuff/Rick Cardon Tech LLC.webloc
./RemoteStuff/VeeamDiagram.png
./RemoteStuff/backbox-4.5.1-i386.iso
./RemoteStuff/dhcp_admin_script_update.py
./RemoteStuff/test_file.txt
[root@mint ~]# ping www.google.com
Como se vio anteriormente, todos los archivos simplemente se extrajeron en el directorio contenedor dentro de nuestro directorio de trabajo actual.
[root@centos ~]# ls -l
total 2262872
-rw-------. 1 root root 1752 Feb 1 19:52 anaconda-ks.cfg
drwxr-xr-x. 137 root root 8192 Mar 9 04:42 etc_baks
-rw-r--r--. 1 root root 1800 Feb 2 03:14 initial-setup-ks.cfg
drwxr-xr-x. 6 rdc rdc 4096 Mar 10 22:20 RemoteStuff
-rw-r--r--. 1 root root 2317140451 Mar 12 07:12 RemoteStuff.tgz
-rw-r--r--. 1 root root 9446 Feb 25 05:09 ssl.conf [root@centos ~]#
Utilice gzip para comprimir copias de seguridad de archivos
Como se señaló anteriormente, podemos usar bzip2 o gzip de tar con el -j o -zinterruptores de línea de comando. También podemos usar gzip para comprimir archivos individuales. Sin embargo, usar bzip o gzip por sí solo no ofrece tantas funciones como cuando se combina con tar .
Cuando se usa gzip , la acción predeterminada es eliminar los archivos originales, reemplazando cada uno con una versión comprimida agregando la extensión .gz.
Algunos modificadores de línea de comando comunes para gzip son:
Cambiar | Acción |
---|---|
-C | Mantiene los archivos después de colocarlos en el archivo |
-l | Obtenga estadísticas del archivo comprimido |
-r | Comprime de forma recursiva archivos en los directorios |
-1 a 9 | Especifica el nivel de compresión en una escala del 1 al 9 |
gzip funciona más o menos archivo por archivo y no como archivo como algunas utilidades zip de Windows O / S. La razón principal de esto es que tar ya proporciona funciones de archivo avanzadas. gzip está diseñado para proporcionar solo un mecanismo de compresión.
Por lo tanto, cuando piense en gzip , piense en un solo archivo. Cuando piense en varios archivos, piense en archivos tar . Exploremos ahora esto con nuestro archivo tar anterior .
Note - Los profesionales experimentados de Linux a menudo se refieren a un archivo alquilado como tarball.
Hagamos otro archivo tar a partir de nuestra copia de seguridad de rsync .
[root@centos Documents]# tar -cvf RemoteStuff.tar ./RemoteStuff/
[root@centos Documents]# ls
RemoteStuff.tar RemoteStuff/
Para fines de demostración, hagamos gzip del tarball recién creado y digamos a gzip que conserve el archivo anterior. De forma predeterminada, sin la opción -c , gzip reemplazará todo el archivo tar con un archivo .gz .
[root@centos Documents]# gzip -c RemoteStuff.tar > RemoteStuff.tar.gz
[root@centos Documents]# ls
RemoteStuff RemoteStuff.tar RemoteStuff.tar.gz
We now have our original directory, our tarred directory and finally our gziped tarball.
Intentemos probar el modificador -l con gzip .
[root@centos Documents]# gzip -l RemoteStuff.tar.gz
compressed uncompressed ratio uncompressed_name
2317140467 2326661120 0.4% RemoteStuff.tar
[root@centos Documents]#
Para demostrar en qué se diferencia gzip de las utilidades Zip de Windows, ejecutemos gzip en una carpeta de archivos de texto.
[root@centos Documents]# ls text_files/
file1.txt file2.txt file3.txt file4.txt file5.txt
[root@centos Documents]#
Ahora usemos la opción -r para comprimir recursivamente todos los archivos de texto en el directorio.
[root@centos Documents]# gzip -9 -r text_files/
[root@centos Documents]# ls ./text_files/
file1.txt.gz file2.txt.gz file3.txt.gz file4.txt.gz file5.txt.gz
[root@centos Documents]#
¿Ver? No es lo que algunos pudieron haber anticipado. Todos los archivos de texto originales se eliminaron y cada uno se comprimió individualmente. Debido a este comportamiento, es mejor pensar solo en gzip cuando necesite trabajar en archivos individuales.
Trabajando con tarballs , extraigamos nuestro tarball sincronizado en un nuevo directorio.
[root@centos Documents]# tar -C /tmp -zxvf RemoteStuff.tar.gz
./RemoteStuff/
./RemoteStuff/.DS_Store
./RemoteStuff/DDWRT/
./RemoteStuff/DDWRT/.DS_Store
./RemoteStuff/DDWRT/ddwrt-linksys-wrt1200acv2-webflash.bin
./RemoteStuff/DDWRT/ddwrt_mod_notes.docx
./RemoteStuff/DDWRT/factory-to-ddwrt.bin
./RemoteStuff/open_ldap_config_notes/
./RemoteStuff/open_ldap_config_notes/ldap_directory_a.png
./RemoteStuff/open_ldap_config_notes/open_ldap_notes.txt
./RemoteStuff/perl_scripts/
./RemoteStuff/perl_scripts/mysnmp.pl
./RemoteStuff/php_scripts/
./RemoteStuff/php_scripts/chunked.php
Como se vio arriba, extrajimos y descomprimimos nuestro tarball en el directorio / tmp.
[root@centos Documents]# ls /tmp
hsperfdata_root
RemoteStuff
Cifrar archivos TarBall
Cifrar archivos tarball para almacenar documentos seguros a los que otros empleados de la organización pueden tener que acceder, en caso de recuperación ante desastres, puede ser un concepto complicado. Básicamente, hay tres formas de hacer esto: o use GnuPG, o use openssl, o use una utilidad de tercera parte.
GnuPG está diseñado principalmente para el cifrado asimétrico y tiene en mente una asociación de identidad en lugar de una frase de contraseña. Es cierto que se puede usar con cifrado simétrico, pero esta no es la principal fortaleza de GnuPG. Por lo tanto, descartaría GnuPG por almacenar archivos con seguridad física cuando más personas que la persona original pueden necesitar acceso (como tal vez un gerente corporativo que quiere protegerse contra un Administrador que tiene todas las claves del reino como palanca).
Openssl como GnuPG puede hacer lo que queramos y se envía con CentOS. Pero nuevamente, no está diseñado específicamente para hacer lo que queremos y el cifrado ha sido cuestionado en la comunidad de seguridad.
Nuestra elección es una utilidad llamada 7zip. 7zip es una utilidad de compresión como gzip pero con muchas más funciones. Al igual que Gnu Gzip, 7zip y sus estándares están en la comunidad de código abierto. Solo necesitamos instalar 7zip desde nuestro repositorio EHEL (el siguiente capítulo cubrirá la instalación de los repositorios empresariales extendidos en detalle).
Instalar 7zip en Centos
7zip es una instalación simple una vez que nuestros repositorios EHEL se han cargado y configurado en CentOS.
[root@centos Documents]# yum -y install p7zip.x86_64 p7zip-plugins.x86_64
Loaded plugins: fastestmirror, langpacks
base
| 3.6 kB 00:00:00
epel/x86_64/metalink
| 13 kB 00:00:00
epel
| 4.3 kB 00:00:00
extras
| 3.4 kB 00:00:00
updates
| 3.4 kB 00:00:00
(1/2): epel/x86_64/updateinfo
| 756 kB 00:00:04
(2/2):
epel/x86_64/primary_db
| 4.6 MB 00:00:18
Loading mirror speeds from cached hostfile
--> Running transaction check
---> Package p7zip.x86_64 0:16.02-2.el7 will be installed
---> Package p7zip-plugins.x86_64 0:16.02-2.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
Tan simple como eso, 7zip está instalado y listo para usarse con cifrado AES de 256 bits para nuestros archivos tarball.
Ahora usemos 7z para cifrar nuestro archivo comprimido con gzip con una contraseña. La sintaxis para hacerlo es bastante simple:
7z a -p <output filename><input filename>
Dónde, a: agregar al archivo, y -p: cifrar y solicitar una frase de contraseña
[root@centos Documents]# 7z a -p RemoteStuff.tgz.7z RemoteStuff.tar.gz
7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,64 bits,1 CPU Intel(R)
Core(TM) i5-4278U CPU @ 2.60GHz (40651),ASM,AES-NI)
Scanning the drive:
1 file, 2317140467 bytes (2210 MiB)
Creating archive: RemoteStuff.tgz.7z
Items to compress: 1
Enter password (will not be echoed):
Verify password (will not be echoed) :
Files read from disk: 1
Archive size: 2280453410 bytes (2175 MiB)
Everything is Ok
[root@centos Documents]# ls
RemoteStuff RemoteStuff.tar RemoteStuff.tar.gz RemoteStuff.tgz.7z slapD
text_files
[root@centos Documents]#
Ahora, tenemos nuestro archivo .7z que cifra el tarball comprimido con gzip con AES de 256 bits.
Note- 7zip utiliza cifrado AES de 256 bits con un hash SHA-256 de la contraseña y el contador, repetido hasta 512K veces para la derivación de claves. Esto debería ser lo suficientemente seguro si se utiliza una clave compleja.
El proceso de cifrar y volver a comprimir el archivo puede llevar algún tiempo con archivos más grandes.
7zip es una oferta avanzada con más funciones que gzip o bzip2. Sin embargo, no es estándar con CentOS o en el mundo Linux. Por lo tanto, las otras utilidades deben usarse con la mayor frecuencia posible.
El sistema CentOS 7 se puede actualizar de tres formas:
- Manually
- Automatically
- Actualice manualmente para problemas importantes de seguridad y configure actualizaciones automáticas
En un entorno de producción, se recomienda actualizar manualmente para los servidores de producción. O al menos establecer un plan de actualización para que el administrador pueda garantizar servicios vitales para las operaciones comerciales.
Es plausible que una simple actualización de seguridad pueda causar problemas recurrentes con una aplicación común que requiera actualización y reconfiguración por parte de un administrador. Por lo tanto, esté cansado de programar actualizaciones automáticas en producción antes de probar primero en servidores de desarrollo y escritorios.
Actualizar manualmente CentOS 7
Para actualizar CentOS 7, querremos familiarizarnos con el comando yum .yumse usa para tratar con repositorios de paquetes en CentOS 7. yum es la herramienta comúnmente usada para -
- Actualizar el sistema Linux CentOS 7
- Buscar paquetes
- Instalar paquetes
- Detectar e instalar las dependencias necesarias para los paquetes
Para usar yum para las actualizaciones, su servidor CentOS deberá estar conectado a Internet. La mayoría de las configuraciones instalarán un sistema base, luego usarán yum para consultar el repositorio principal de CentOS para obtener funcionalidad adicional en los paquetes y aplicar actualizaciones del sistema.
Ya hemos hecho uso de yum para instalar algunos paquetes. Cuando use yum , siempre deberá hacerlo como usuario root. O un usuario con acceso root. Así que busquemos e instalemos un editor de texto fácil de usar llamado nano .
[root@centos rdc]# yum search nano
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirror.rackspace.com
* epel: mirror.chpc.utah.edu
* extras: repos.forethought.net
* updates: repos.forethought.net
======================================================================
N/S matched: nano
======================================================================
nano.x86_64 : A small text editor
nodejs-nano.noarch : Minimalistic couchdb driver for Node.js
perl-Time-Clock.noarch : Twenty-four hour clock object with nanosecond precision
Name and summary matches only, use "search all" for everything.
[root@centos rdc]#
Ahora, instalemos el editor de texto nano .
[root@centos rdc]# yum install nano
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirror.keystealth.org
* epel: pubmirror1.math.uh.edu
* extras: centos.den.host-engine.com
* updates: repos.forethought.net
Resolving Dependencies
--> Running transaction check
---> Package nano.x86_64 0:2.3.1-10.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
================================================================================
Package Arch
Version Repository Size
================================================================================
Installing:
nano x86_64
2.3.1-10.el7 base 440 k
Transaction Summary
Install 1 Package
Total download size: 440 k
Installed size: 1.6 M
Is this ok [y/d/N]: y
Downloading packages:
nano-2.3.1-10.el7.x86_64.rpm
| 440 kB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : nano-2.3.1-10.el7.x86_64
1/1
Verifying : nano-2.3.1-10.el7.x86_64
1/1
Installed:
nano.x86_64 0:2.3.1-10.el7
Complete!
[root@centos rdc]#
Hemos instalado el editor de texto nano. Este método, en mi opinión, es mucho más fácil que buscar utilidades en sitios web y ejecutar manualmente los instaladores. Además, los repositorios usan firmas digitales para validar los paquetes, asegurándose de que provengan de una fuente confiable con yum. Depende del administrador validar la autenticidad al confiar en nuevos repositorios. Por eso se considera una buena práctica estar cansado de los repositorios de terceros.
Yum también se puede utilizar para eliminar un paquete.
[root@centos rdc]# yum remove nano
Loaded plugins: fastestmirror, langpacks
Resolving Dependencies
--> Running transaction check
---> Package nano.x86_64 0:2.3.1-10.el7 will be erased
--> Finished Dependency Resolution
Dependencies Resolved
Ahora, busquemos actualizaciones.
[root@centos rdc]# yum list updates
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirror.keystealth.org
* epel: pubmirror1.math.uh.edu
* extras: centos.den.host-engine.com
* updates: repos.forethought.net
Updated Packages
NetworkManager.x86_64 1:1.4.0-17.el7_3 updates
NetworkManager-adsl.x86_64 1:1.4.0-17.el7_3 updates
NetworkManager-glib.x86_64 1:1.4.0-17.el7_3 updates
NetworkManager-libnm.x86_64 1:1.4.0-17.el7_3 updates
NetworkManager-team.x86_64 1:1.4.0-17.el7_3 updates
NetworkManager-tui.x86_64 1:1.4.0-17.el7_3 updates
NetworkManager-wifi.x86_64 1:1.4.0-17.el7_3 updates
audit.x86_64 2.6.5-3.el7_3.1 updates
audit-libs.x86_64 2.6.5-3.el7_3.1 updates
audit-libs-python.x86_64
Como se muestra, tenemos algunas docenas de actualizaciones pendientes de instalar. En realidad, hay alrededor de 100 actualizaciones en total ya que aún no hemos configurado las actualizaciones automáticas. Por lo tanto, instalemos todas las actualizaciones pendientes.
[root@centos rdc]# yum update
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.usc.edu
* epel: pubmirror1.math.uh.edu
* extras: repos.forethought.net
* updates: repos.forethought.net
Resolving Dependencies
--> Running transaction check
---> Package NetworkManager.x86_64 1:1.4.0-14.el7_3 will be updated
---> Package NetworkManager.x86_64 1:1.4.0-17.el7_3 will be an update
selinux-policy noarch 3.13.1102.el7_3.15 updates 414 k
selinux-policy-targeted noarch 3.13.1102.el7_3.15 updates 6.4 M
systemd x86_64 21930.el7_3.7 updates 5.2 M
systemd-libs x86_64 21930.el7_3.7 updates 369 k
systemd-python x86_64 21930.el7_3.7 updates 109 k
systemd-sysv x86_64 21930.el7_3.7 updates 63 k
tcsh x86_64 6.18.01-13.el7_3.1 updates 338 k
tzdata noarch 2017a1.el7 updates 443 k
tzdata-java noarch 2017a1.el7 updates 182 k
wpa_supplicant x86_64 1:2.021.el7_3 updates 788 k
Transaction Summary
===============================================================================
Install 2 Packages
Upgrade 68 Packages
Total size: 196 M
Total download size: 83 M
Is this ok [y/d/N]:
Después de presionar la tecla "y", comenzará la actualización de CentOS 7. El proceso general por el que pasa yum al actualizar es:
- Comprueba los paquetes actuales
- Busca paquetes actualizados en el repositorio
- Calcula las dependencias necesarias para los paquetes actualizados
- Descargas actualizaciones
- Instala actualizaciones
Ahora, asegurémonos de que nuestro sistema esté actualizado:
[root@centos rdc]# yum list updates
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* updates: mirror.compevo.com
[root@centos rdc]#
Como puede ver, no se enumeran actualizaciones.
Configurar actualizaciones automáticas para YUM
En un entorno empresarial, como se mencionó anteriormente, las actualizaciones automáticas pueden ser o no el método preferido de instalación. Repasemos los pasos para configurar actualizaciones automáticas con yum.
Primero, instalamos un paquete llamado yum-cron .
[root@centos rdc]# yum -y install yum-cron
Install 1 Package
Total download size: 61 k
Installed size: 51 k
Downloading packages:
yum-cron-3.4.3-150.el7.centos.noarch.rpm
| 61 kB 00:00:01
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : yum-cron-3.4.3-150.el7.centos.noarch
1/1
Verifying : yum-cron-3.4.3-150.el7.centos.noarch
1/1
Installed:
yum-cron.noarch 0:3.4.3-150.el7.centos
Complete!
[root@centos rdc]#
De forma predeterminada, yum-cron solo descargará actualizaciones y no las instalará. La instalación automática de actualizaciones depende del Administrador. La mayor advertencia es: algunas actualizaciones requerirán reiniciar el sistema. Además, algunas actualizaciones pueden requerir un cambio de configuración antes de que los servicios vuelvan a estar operativos.
La actualización de dependencias puede posiblemente crear un problema recurrente en la siguiente situación:
Yum recomienda una actualización para una biblioteca determinada
La biblioteca solo es compatible con Apache Server 2.4, pero tenemos el servidor 2.3
Nuestro sitio de comercio se basa en una determinada versión de PHP
La nueva versión de Apache instalada para la biblioteca requiere actualizar PHP
Nuestras aplicaciones web de producción aún no se han probado con la versión más reciente de PHP.
Yum puede continuar y actualizar Apache y PHP automáticamente sin previo aviso, a menos que esté configurado para no hacerlo.
Si se cumplen los 5 escenarios, puede resultar en cualquier cosa, desde un gran dolor de cabeza por la mañana hasta un posible compromiso de seguridad que exponga los datos del usuario. Si bien el ejemplo mencionado anteriormente es una especie de tormenta perfecta, nunca queremos que se desarrolle tal escenario.
Depende del Administrador acceder a posibles escenarios de pérdida potencial de ingresos debido al tiempo necesario para restaurar los servicios debido al posible tiempo de inactividad debido a reinicios de actualización y reconfiguraciones. Esta práctica puede no ser lo suficientemente conservadora para, digamos, un sitio de comercio electrónico de varios millones de dólares por día con millones de clientes.
Ahora configuremos yum-cron para instalar automáticamente las actualizaciones del sistema.
[root@centos rdc]# vim /etc/yum/yum-cron.conf
# Whether updates should be applied when they are available. Note
# that download_updates must also be yes for the update to be applied.
apply_updates = yes
Queremos cambiar apply_updates = no por apply_updates = yes . Ahora configuremos el intervalo de actualización para yum-cron .
Una vez más, utilizar actualizaciones automáticas e instalar actualizaciones a pedido puede ser un arma de doble filo y debe ser considerado por un administrador para cada situación única.
Introducción a Bash Shell
Al igual que las versiones de GNU Linux, los shells vienen en muchas variedades y varían en compatibilidad. El shell predeterminado en CentOS se conoce como Bash o Bourne Again Shell. El shell Bash es una versión moderna y modificada de Bourne Shell desarrollada por Stephen Bourne. Bash fue el reemplazo directo del Thompson Shell original en el sistema operativo Unix desarrollado en Bell Labs por Ken Thompson y Dennis Ritchie (Stephen Bourne también fue empleado por Bell Labs)
Todo el mundo tiene un caparazón favorito y cada uno tiene sus puntos fuertes y sus dificultades. Pero en su mayor parte, Bash será el shell predeterminado en todas las distribuciones de Linux y el más comúnmente disponible. Con experiencia, todos querrán explorar y usar un caparazón que sea mejor para ellos. Sin embargo, al mismo tiempo, todos querrán dominar el shell Bash.
Otros shells de Linux incluyen: Tcsh, Csh, Ksh, Zsh y Fish.
Desarrollar habilidades para usar cualquier shell de Linux a un nivel experto es extremadamente importante para un administrador de CentOS. Como mencionamos anteriormente, a diferencia de Windows, Linux en su esencia es un sistema operativo de línea de comandos. Un shell es simplemente una interfaz de usuario que permite a un administrador (o usuario) emitir comandos al sistema operativo. Si un administrador de sistema Linux fuera un piloto de una aerolínea, usar el caparazón sería similar a sacar el avión del piloto automático y agarrar los controles manuales para un vuelo más maniobrable.
Un shell de Linux, como Bash, se conoce en términos de informática como un Command Line Interpreter. Microsoft Windows también tiene dos intérpretes de línea de comandos llamados DOS (que no debe confundirse con el sistema operativo DOS original) y PowerShell.
La mayoría de los proyectiles modernos como Bash proporcionan constructspermitiendo scripts de shell más complejos para automatizar tanto tareas comunes como complejas.
Las construcciones incluyen:
- Control de flujo de scripts (ifthen y else)
- Operaciones de comparación lógica (mayor que, menor que, igualdad)
- Loops
- Variables
- Parámetros que definen la operación (similar a interruptores con comandos)
Uso de Shell Script versus Scripting Language
A menudo, cuando piensan en realizar una tarea, los administradores se preguntan: ¿Debería usar un script de shell o un lenguaje de script como Perl, Ruby o Python?
No hay una regla establecida aquí. Solo existen diferencias típicas entre shells y lenguajes de scripting.
Cáscara
Shell permite el uso de comandos de Linux como sed , grep , tee , cat y todas las demás utilidades basadas en la línea de comandos en el sistema operativo Linux. De hecho, casi cualquier utilidad de línea de comandos de Linux se puede programar en su shell.
Un gran ejemplo de uso de un shell sería un script rápido para verificar una lista de hosts para la resolución de DNS.
Nuestro sencillo script Bash para comprobar los nombres DNS -
#!/bin/bash
for name in $(cat $1); do host $name.$2 | grep "has address"
done
exit
pequeña lista de palabras para probar la resolución DNS en -
dns
www
test
dev
mail
rdp
remote
Salida contra el dominio google.com -
[rdc@centos ~]$ ./dns-check.sh dns-names.txt google.com
-doing dns
dns.google.com has address 172.217.6.46
-doing www
www.google.com has address 172.217.6.36
-doing test
-doing dev
-doing mail
googlemail.l.google.com has address 172.217.6.37
-doing rdp
-doing remote
[rdc@centos ~]$
Aprovechando comandos simples de Linux en nuestro shell, pudimos hacer un script simple de 5 líneas para auditar los nombres DNS de una lista de palabras. Esto habría llevado un tiempo considerable en Perl, Python o Ruby incluso cuando se usaba una biblioteca DNS bien implementada.
Lenguaje de escritura
Un lenguaje de scripting dará más control fuera del shell. El script Bash anterior usó un contenedor alrededor del comando del host de Linux . ¿Qué pasaría si quisiéramos hacer más y crear nuestra propia aplicación como host para interactuar fuera del shell? Aquí es donde usaríamos un lenguaje de secuencias de comandos.
Además, con un lenguaje de secuencias de comandos altamente mantenido, sabemos que nuestras acciones funcionarán en diferentes sistemas en su mayor parte. Python 3.5, por ejemplo, funcionará en cualquier otro sistema que ejecute Python 3.5 con las mismas bibliotecas instaladas. No es así, si queremos ejecutar nuestro script BASH tanto en Linux como en HP-UX.
A veces, las líneas entre un lenguaje de secuencias de comandos y un shell potente pueden difuminarse. Es posible automatizar las tareas de administración de CentOS Linux con Python, Perl o Ruby. Hacerlo es realmente un lugar común. Además, los desarrolladores adinerados de scripts de shell han creado un demonio de servidor web simple, pero funcional en Bash.
Con experiencia en lenguajes de programación y automatización de tareas en shells, un administrador de CentOS podrá determinar rápidamente por dónde empezar cuando necesite resolver un problema. Es bastante común comenzar un proyecto con un script de shell. Luego, avance a un lenguaje de secuencias de comandos (o compilado) a medida que el proyecto se vuelve más complejo.
Además, está bien utilizar un lenguaje de script y un script de shell para diferentes partes de un proyecto. Un ejemplo podría ser un script de Perl para raspar un sitio web. Luego, use un script de shell para analizar y formatear con sed , awk y egrep . Finalmente, use un script PHP para insertar datos formateados en la base de datos MySQL usando una GUI web.
Con algo de teoría detrás de los shells, comencemos con los bloques de construcción básicos para automatizar tareas desde un shell Bash en CentOS.
Entrada Salida y Redirección
Procesando stdout a otro comando -
[rdc@centos ~]$ cat ~/output.txt | wc -l
6039
[rdc@centos ~]$
Arriba, hemos pasado cat'sstoud a wc para su procesamiento con el carácter de tubería . wc luego procesó la salida de cat , imprimiendo el recuento de líneas de output.txt en la terminal. Piense en el carácter de tubería como una "tubería" que pasa la salida de un comando, para ser procesada por el siguiente comando.
Los siguientes son los conceptos clave para recordar cuando se trata de la redirección de comandos:
Número | Descriptor de archivo | Personaje |
---|---|---|
0 | entrada estándar | < |
1 | salida estándar | > |
2 | Error estándar | |
añadir stdout | >> | |
asignar redirección | Y | |
tubo stdout en stdin | | |
Introdujimos esto en el capítulo uno sin hablar mucho sobre la redirección o la asignación de redirección. Al abrir una terminal en Linux, su shell se ve como el destino predeterminado para:
- entrada estándar <0
- salida estándar> 1
- error estándar 2
Veamos cómo funciona esto -
[rdc@centos ~]$ lsof -ap $BASHPID -d 0,1,2 COMMAND PID USER **FD** TYPE DEVICE SIZE/OFF NODE NAME bash 13684 rdc **0u** CHR 136,0 0t0 3 /dev/pts/0 bash 13684 rdc **1u** CHR 136,0 0t0 3 /dev/pts/0 bash 13684 rdc **2u** CHR 136,0 0t0 3 /dev/pts/0 [rdc@centos ~]$
/ dev / pts / 0 es nuestro pseudo terminal. CentOS Linux mira esto y piensa en nuestra aplicación de terminal abierta como una terminal real con el teclado y la pantalla conectados a través de una interfaz en serie. Sin embargo, como un hipervisor abstrae el hardware a un sistema operativo, / dev / pts abstrae nuestro terminal a las aplicaciones.
Desde el comando lsof anterior , podemos ver bajo elFDcolumna que los tres descriptores de archivo están configurados en nuestro terminal virtual (0,1,2). Ahora podemos enviar comandos, ver el resultado del comando, así como cualquier error asociado con el comando.
Los siguientes son ejemplos de STDIN y STDOUT:
STDOUT
[root@centosLocal centos]# echo "I am coming from Standard output or STDOUT." >
output.txt && cat output.txt
I am coming from Standard output or STDOUT.
[root@centosLocal centos]#
También es posible enviar stdout y stderr a archivos separados -
bash-3.2# find / -name passwd 1> good.txt 2> err.txt
bash-3.2# cat good.txt
/etc/pam.d/passwd
/etc/passwd
bash-3.2# cat err.txt
find: /dev/fd/3: Not a directory
find: /dev/fd/4: Not a directory
bash-3.2#
Al buscar en todo el sistema de archivos, se encontraron dos errores. Cada uno se envió a un archivo separado para su posterior lectura, mientras que los resultados devueltos se colocaron en un archivo de texto separado.
Enviar stderr a un archivo de texto puede ser útil cuando se hacen cosas que generan una gran cantidad de datos en el terminal, como compilar aplicaciones. Esto permitirá la lectura de errores que podrían perderse del historial de retroceso del terminal.
Una nota al pasar STDOUT a un archivo de texto son las diferencias entre >> y >. El doble ">>" se agregará a un archivo, mientras que la forma singular golpeará el archivo y escribirá nuevos contenidos (por lo que se perderán todos los datos anteriores).
STDIN
[root@centosLocal centos]# cat < stdin.txt
Hello,
I am being read form Standard input, STDIN.
[root@centosLocal centos]#
En el comando anterior, el archivo de texto stdin.txt se redirigió al comando cat que hizo eco de su contenido en STDOUT .
El carácter de tubería "|"
El carácter de barra vertical tomará la salida del primer comando, pasándola como entrada al siguiente comando, permitiendo que el comando secundario realice operaciones en la salida.
Ahora, "canalicemos" la salida estándar de cat a otro comando:
[root@centosLocal centos]# cat output.txt | wc -l
2
[root@centosLocal centos]#
Arriba, wc realiza cálculos sobre la salida de cat que se pasó de la tubería. El comando de tubería es particularmente útil cuando se filtra la salida de grep o egrep -
[root@centosLocal centos]# egrep "^[0-9]{4}$" /usr/dicts/nums | wc -l
9000
[root@centosLocal centos]#
En el comando anterior, pasamos cada número de 4 dígitos a wc desde un archivo de texto que contiene todos los números de 65535 pasados a través de un filtro egrep .
Redirigir la salida con &
La salida se puede redirigir utilizando el &personaje. Si queremos dirigir la salida tanto STDOUT como STDERR, en el mismo archivo, se puede lograr de la siguiente manera:
[root@centosLocal centos]# find / -name passwd > out.txt 2>&1
[root@centosLocal centos]# cat out.txt
find: /dev/fd/3: Not a directory
find: /dev/fd/4: Not a directory
/etc/passwd
[root@centosLocal centos]#
Redirigir usando el &El carácter funciona así: primero, la salida se redirige a out.txt . En segundo lugar, STDERR o el descriptor de archivo 2 se reasigna a la misma ubicación que STDOUT, en este caso out.txt .
La redirección es extremadamente útil y es útil para resolver problemas que surgen al manipular archivos de texto grandes, compilar código fuente, redirigir la salida en scripts de shell y emitir comandos complejos de Linux.
Si bien es potente, la redirección puede complicarse para los administradores de CentOS más nuevos. La práctica, la investigación y las preguntas ocasionales en un foro de Linux (como Stack Overflow Linux) ayudarán a resolver soluciones avanzadas.
Construcciones de caparazón de golpe
Ahora que tenemos una buena idea de cómo funciona el shell Bash , aprendamos algunas construcciones básicas, comúnmente utilizadas, para escribir scripts. En esta sección exploraremos:
- Variables
- Loops
- Conditionals
- Control de bucle
- Leer y escribir en archivos
- Operaciones matemáticas básicas
Sugerencias para la resolución de problemas de BASH
BASH puede ser un poco complicado en comparación con un lenguaje de programación dedicado. Algunos de los problemas más importantes en los scripts BASH se deben a que se escapan incorrectamente o no se escapan las operaciones del script que se pasan al shell. Si ha revisado un guión varias veces y no funciona como se esperaba, no se preocupe. Esto es común incluso entre quienes usan BASH para crear scripts complejos a diario.
Una búsqueda rápida en Google o registrarse en un foro de expertos de Linux para hacer una pregunta conducirá a una resolución rápida. Es muy probable que alguien se haya encontrado con el problema exacto y ya se haya resuelto.
La creación de scripts BASH es un gran método para crear rápidamente scripts potentes para todo, desde la automatización de tareas de administración hasta la creación de herramientas útiles. Convertirse en un desarrollador de guiones BASH de nivel experto requiere tiempo y práctica. Por lo tanto, use scripts BASH siempre que sea posible, es una gran herramienta para tener en su caja de herramientas de administración de CentOS.
La gestión de paquetes en CentOS se puede realizar de dos formas: desde el terminal y desde la interfaz gráfica de usuario.
La mayoría de las veces, la mayor parte del tiempo de un administrador de CentOS estará usando la terminal. Actualizar e instalar paquetes para CentOS no es diferente. Con esto en mente, primero exploraremos la administración de paquetes en la terminal, luego tocaremos el uso de la herramienta gráfica de administración de paquetes proporcionada por CentOS.
Administrador de paquetes YUM
YUM es la herramienta proporcionada para la gestión de paquetes en CentOS. Hemos tocado brevemente este tema en capítulos anteriores. En este capítulo, trabajaremos desde una instalación limpia de CentOS. Primero actualizaremos completamente nuestra instalación y luego instalaremos una aplicación.
YUM ha llevado la instalación y administración de software en Linux por un largo camino. YUM comprueba "automágicamente" las dependencias desactualizadas, además de los paquetes desactualizados. Esto realmente le ha quitado una carga al administrador de CentOS en comparación con los viejos tiempos de compilar cada aplicación desde el código fuente.
yum comprobar-actualizar
Comprueba los paquetes que pueden actualizar a los candidatos. Para este tutorial, asumiremos que se trata de un sistema de producción que se enfrentará a Internet sin aplicaciones de producción que DevOps deba probar antes de actualizar los paquetes. Instalemos ahora los candidatos actualizados en el sistema.
[root@localhost rdc]# yum check-update
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirror.scalabledns.com
* extras: mirror.scalabledns.com
* updates: mirror.clarkson.edu
NetworkManager.x86_64 1:1.4.0-19.el7_3 updates
NetworkManager-adsl.x86_64 1:1.4.0-19.el7_3 updates
NetworkManager-glib.x86_64 1:1.4.0-19.el7_3 updates
NetworkManager-libnm.x86_64 1:1.4.0-19.el7_3 updates
NetworkManager-team.x86_64 1:1.4.0-19.el7_3 updates
NetworkManager-tui.x86_64 1:1.4.0-19.el7_3 updates
NetworkManager-wifi.x86_64 1:1.4.0-19.el7_3 updates
audit.x86_64 2.6.5-3.el7_3.1 updates
vim-common.x86_64 2:7.4.160-1.el7_3.1 updates
vim-enhanced.x86_64 2:7.4.160-1.el7_3.1 updates
vim-filesystem.x86_64 2:7.4.160-1.el7_3.1 updates
vim-minimal.x86_64 2:7.4.160-1.el7_3.1 updates
wpa_supplicant.x86_64 1:2.0-21.el7_3 updates
xfsprogs.x86_64 4.5.0-9.el7_3 updates
[root@localhost rdc]#
actualización de yum
Esto instalará todos los candidatos actualizados y hará que su instalación de CentOS esté actualizada. Con una nueva instalación, esto puede llevar un poco de tiempo dependiendo de su instalación y la velocidad de su conexión a Internet.
[root@localhost rdc]# yum update
vim-minimal x86_64 2:7.4.160-1.el7_3.1 updates 436 k
wpa_supplicant x86_64 1:2.0-21.el7_3 updates 788 k
xfsprogs x86_64 4.5.0-9.el7_3 updates 895 k
Transaction Summary
======================================================================================
Install 2 Packages
Upgrade 156 Packages
Total download size: 371 M
Is this ok [y/d/N]:
Instalar software a través de YUM
Además de actualizar el sistema CentOS, el administrador de paquetes YUM es nuestra herramienta de referencia para instalar el software. Todo, desde herramientas de monitoreo de red, reproductores de video, hasta editores de texto, se puede instalar desde un repositorio central con YUM .
Antes de instalar algunas utilidades de software, veamos algunos comandos de YUM . Para el trabajo diario, el 90% del uso de YUM por parte de un administrador de CentOS será con aproximadamente 7 comandos. Repasaremos cada uno con la esperanza de familiarizarnos con el funcionamiento de YUM a un nivel competente para el uso diario. Sin embargo, como la mayoría de las utilidades de Linux, YUM ofrece una gran cantidad de funciones avanzadas que siempre son excelentes para explorar a través de la página de manual. Usar man yum siempre será el primer paso para realizar operaciones desconocidas con cualquier utilidad de Linux.
Comandos YUM más comunes
A continuación se muestran los comandos YUM de uso común.
Mando | Acción |
---|---|
lista instalada | Muestra los paquetes instalados a través de YUM |
Listar todo | Muestra todos los paquetes disponibles actualmente |
lista de grupos | Enumera paquetes agrupados |
info | Proporciona información detallada sobre un paquete. |
buscar | Busca descripciones y nombres de paquetes |
Instalar en pc | Instala un paquete |
localinstall | Instala un paquete rpm local |
eliminar | Elimina e instala el paquete |
Limpiar todo | Limpia / var / cache / yum para liberar espacio en disco |
hombre yum | Como todos los comandos de Linux, el archivo de ayuda |
Instalar software con YUM
Ahora instalaremos un navegador web basado en texto llamado Lynx. Antes de la instalación, primero debemos obtener el nombre del paquete que contiene el navegador web Lynx. Ni siquiera estamos 100% seguros de que nuestro repositorio CentOS predeterminado proporcione un paquete para el navegador web Lynx, así que busquemos y veamos:
[root@localhost rdc]# yum search web browser
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirror.scalabledns.com
* extras: mirror.scalabledns.com
* updates: mirror.clarkson.edu
=================================================================
N/S matched: web, browser
==================================================================
icedtea-web.x86_64 : Additional Java components for OpenJDK - Java browser
plug-in and Web Start implementation
elinks.x86_64 : A text-mode Web browser
firefox.i686 : Mozilla Firefox Web browser
firefox.x86_64 : Mozilla Firefox Web browser
lynx.x86_64 : A text-based Web browser
Full name and summary matches only, use "search all" for everything.
[root@localhost rdc]#
Vemos, CentOS ofrece el navegador web Lynx en el repositorio. Veamos más información sobre el paquete.
[root@localhost rdc]# lynx.x86_64
bash: lynx.x86_64: command not found...
[root@localhost rdc]# yum info lynx.x86_64
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirror.scalabledns.com
* extras: mirror.scalabledns.com
* updates: mirror.clarkson.edu
Available Packages
Name : lynx
Arch : x86_64
Version : 2.8.8
Release : 0.3.dev15.el7
Size : 1.4 M
Repo : base/7/x86_64
Summary : A text-based Web browser
URL : http://lynx.isc.org/
License : GPLv2
Description : Lynx is a text-based Web browser. Lynx does not display any images,
: but it does support frames, tables, and most other HTML tags. One
: advantage Lynx has over graphical browsers is speed; Lynx starts and
: exits quickly and swiftly displays web pages.
[root@localhost rdc]#
¡Agradable! La versión 2.8 es lo suficientemente actual, así que instalemos Lynx.
[root@localhost rdc]# yum install lynx
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirror.scalabledns.com
* extras: mirror.scalabledns.com
* updates: mirror.clarkson.edu
Resolving Dependencies
--> Running transaction check
---> Package lynx.x86_64 0:2.8.8-0.3.dev15.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
===============================================================================
===============================================================================
Package Arch
Version Repository Size
===============================================================================
===============================================================================
Installing:
lynx x86_64
2.8.80.3.dev15.el7 base 1.4 M
Transaction Summary
===============================================================================
===============================================================================
Install 1 Package
Total download size: 1.4 M
Installed size: 5.4 M
Is this ok [y/d/N]: y
Downloading packages:
No Presto metadata available for base
lynx-2.8.8-0.3.dev15.el7.x86_64.rpm
| 1.4 MB 00:00:10
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : lynx-2.8.8-0.3.dev15.el7.x86_64
1/1
Verifying : lynx-2.8.8-0.3.dev15.el7.x86_64
1/1
Installed:
lynx.x86_64 0:2.8.8-0.3.dev15.el7
Complete!
[root@localhost rdc]#
A continuación, asegurémonos de que Lynx se instaló correctamente.
[root@localhost rdc]# yum list installed | grep -i lynx
lynx.x86_64 2.8.8-0.3.dev15.el7 @base
[root@localhost rdc]#
¡Excelente! Usemos Lynx para ver cómo se ve la web sin "me gusta" ni imágenes bonitas.
[root@localhost rdc]# lynx www.tutorialpoint.in
Genial, ahora tenemos un navegador web para nuestro servidor de producción que se puede usar sin mucha preocupación en exploits remotos lanzados a través de la web. Esto es bueno para los servidores de producción.
Estamos casi terminados, sin embargo, primero debemos configurar este servidor para que los desarrolladores prueben aplicaciones. Por lo tanto, asegurémonos de que tengan todas las herramientas necesarias para su trabajo. Podríamos instalar todo individualmente, pero CentOS y YUM lo han hecho mucho más rápido. Instalemos el paquete de grupo de desarrollo .
[root@localhost rdc]# yum groups list
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirror.scalabledns.com
* extras: mirror.scalabledns.com
* updates: mirror.clarkson.edu
Available Groups:
Compatibility Libraries
Console Internet Tools
Development Tools
Graphical Administration Tools
Legacy UNIX Compatibility
Scientific Support
Security Tools
Smart Card Support
System Administration Tools
System Management
Done
[root@localhost rdc]#
Esta es una lista más pequeña de grupos de paquetes proporcionada por CentOS. Veamos qué se incluye con el "Grupo de desarrollo".
[root@localhost rdc]# yum group info "Development Tools"
Loaded plugins: fastestmirror, langpacks
There is no installed groups file.
Maybe run: yum groups mark convert (see man yum)
Loading mirror speeds from cached hostfile
* base: mirror.scalabledns.com
* extras: mirror.scalabledns.com
* updates: mirror.clarkson.edu
Group: Development Tools
Group-Id: development
Description: A basic development environment.
Mandatory Packages:
autoconf
automake
binutils
bison
La primera pantalla de salida es como se ve arriba. Esta lista completa es bastante completa. Sin embargo, normalmente será necesario instalar este grupo en su totalidad a medida que pase el tiempo. Instalemos todo el Grupo de desarrollo.
[root@localhost rdc]# yum groupinstall "Development Tools"
Esta será una instalación más grande. Cuando esté completo, su servidor tendrá la mayoría de las bibliotecas de desarrollo y compiladores para Perl, Python, C y C ++.
Gestión gráfica de paquetes en CentOS
Gnome Desktop proporciona una herramienta gráfica de administración de paquetes llamada Software. Es bastante simple de usar y sencillo. Software, la herramienta de administración de paquetes de Gnome para CentOS se puede encontrar navegando a: Aplicaciones → Herramientas del sistema → Software.
La herramienta de administración de paquetes de software se divide en grupos, lo que permite al administrador seleccionar los paquetes para su instalación. Si bien esta herramienta es excelente por su facilidad de uso y simplicidad para los usuarios finales, YUM es mucho más poderosa y probablemente los administradores la utilizarán más.
A continuación se muestra una captura de pantalla de la herramienta de administración de paquetes de software, que no está diseñada para administradores de sistemas.
Logical Volume Management (LVM)es un método utilizado por Linux para administrar volúmenes de almacenamiento en diferentes discos duros físicos. Esto no debe confundirse con RAID. Sin embargo, se puede pensar en un concepto similar a RAID 0 o J-Bod. Con LVM, es posible tener (por ejemplo) tres discos físicos de 1TB cada uno, luego un volumen lógico de alrededor de 3TB como / dev / sdb. O incluso dos volúmenes lógicos de 1,5 TB, 5 volúmenes de 500 GB o cualquier combinación. Incluso se puede usar un solo disco para instantáneas de volúmenes lógicos.
Note- El uso de volúmenes lógicos en realidad aumenta la E / S del disco cuando se configura correctamente. Esto funciona de manera similar a la división de datos RAID 0 en discos separados.
Al aprender sobre la gestión de volúmenes con LVM, es más fácil si sabemos qué es cada componente de LVM. Por favor, estudie la siguiente tabla para comprender bien cada componente. Si es necesario, use Google para estudiar. Comprender cada parte de un volumen lógico es importante para administrarlos.
PV | Volumen físico | sda |
PÁGINAS | Partición física | sda1, sda2 |
VG | Grupo de volumen | Recursos físicos agrupados |
LV | Volumen lógico | Visto como una instalación de almacenamiento para el sistema operativo |
UN physical volumese verá como / dev / sda, / dev / sdb; un disco físico que es detectado por Linux.
UN physical partitionserá una sección del disco particionada por una utilidad de disco como fdisk. Tenga en cuenta que la partición física no se recomienda en las configuraciones LVM más comunes. Ejemplo: el disco / dev / sda está particionado para incluir dos particiones físicas: / dev / sda1 y / dev / sda1
Si tenemos dos discos físicos de 1TB cada uno, podemos crear un grupo de volumen de casi 2TB entre los dos.
A partir del grupo de volúmenes, podemos crear tres volúmenes lógicos cada uno de cualquier tamaño que no exceda el tamaño total del grupo de volúmenes.
Herramientas tradicionales de administración de discos de Linux
Antes de familiarizarnos con las últimas y mejores herramientas destacadas para la administración de LVM en CentOS 7, primero debemos explorar las herramientas más tradicionales que se han utilizado para la administración de discos de Linux. Estas herramientas serán útiles y seguirán utilizándose con las herramientas LVM avanzadas de hoy en día, como System Storage Manager: lsblk, parted y mkfs.xfs.
Ahora, asumiendo que hayamos agregado otro disco o dos a nuestro sistema, necesitamos enumerar los discos detectados por Linux. Siempre aconsejaría enumerar los discos cada vez antes de realizar operaciones consideradas destructivas.lsblkes una gran herramienta para obtener información del disco. Veamos qué discos detecta CentOS.
[root@localhost rdc]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 19G 0 part
├─cl-root 253:0 0 17G 0 lvm /
└─cl-swap 253:1 0 2G 0 lvm [SWAP]
sdb 8:16 0 6G 0 disk
sdc 8:32 0 4G 0 disk
sr0 11:0 1 1024M 0 rom
Como puede ver, tenemos tres discos en este sistema: sda, sdb y sdc.
Disk sda contiene nuestra instalación de CentOS funcional, por lo que no queremos jugar con sda. Tanto sdb y sdc se añadieron al sistema para este tutorial. Hagamos que estos discos se puedan usar en CentOS.
Crear una etiqueta de disco
[root@localhost rdc]# parted /dev/sdb mklabel GPT
Warning: The existing disk label on /dev/sdb will be destroyed and all data on this
disk will be lost. Do you want to continue?
Yes/No? Yes
[root@localhost rdc]#
Ahora tenemos un disco etiquetado. Simplemente ejecute el comando parted de la misma manera en sdc .
Cree las particiones en el disco
Solo crearemos una única partición en cada disco. Para crear particiones, se vuelve a utilizar el comando parted .
[root@localhost rdc]# parted -a opt /dev/sdb mkpart primary ext4 0% 100%
Warning - Solicitó una partición de 0.00B a 6442MB (sectores 0..12582911).
La ubicación más cercana que podemos administrar es de 17.4kB a 1048kB (sectores 34..2047).
¿Sigue siendo aceptable para usted?
¿Sí No? NO
[root@localhost rdc]# parted -a opt /dev/sdc mkpart primary ext4 0% 100%
Information - Es posible que deba actualizar / etc / fstab.
[root@localhost rdc]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part / boot
└─sda2 8:2 0 19G 0 part
├─cl-root 253:0 0 17G 0 lvm /
└─cl-swap 253:1 0 2G 0 lvm [SWAP]
sdb 8:16 0 6G 0 disk
└─sdb1 8:17 0 6G 0 part
sdc 8:32 0 4G 0 disk
└─sdc1 8:33 0 4G 0 part
sr0 11:0 1 1024M 0 rom
[root@localhost rdc]#
Como puede ver en la salida de lsblk, ahora tenemos dos particiones, cada una en sdb y sdc.
Hacer el sistema de archivos
Finalmente, antes de montar y usar cualquier volumen, necesitamos agregar un sistema de archivos. Usaremos el sistema de archivos XFS.
root@localhost rdc]# mkfs.xfs -f /dev/sdb1
meta-data = /dev/sdb1 isize = 512 agcount = 4, agsize = 393088 blks
= sectsz = 512 attr = 2, projid32bit = 1
= crc = 1 finobt = 0, sparse = 0
data = bsize = 4096 blocks = 1572352, imaxpct = 25
= sunit = 0 swidth = 0 blks
naming = version 2 bsize = 4096 ascii-ci = 0 ftype = 1
log = internal log bsize = 4096 blocks = 2560, version = 2
= sectsz = 512 sunit = 0 blks, lazy-count = 1
realtime = none extsz = 4096 blocks = 0, rtextents = 0
[root@localhost rdc]# mkfs.xfs -f /dev/sdc1
meta-data = /dev/sdc1 isize = 512 agcount = 4, agsize = 262016 blks
= sectsz = 512 attr = 2, projid32bit = 1
= crc = 1 finobt = 0, sparse = 0
data = bsize = 4096 blocks = 1048064, imaxpct = 25
= sunit = 0 swidth = 0 blks
naming = version 2 bsize = 4096 ascii-ci = 0 ftype = 1
log = internal log bsize = 4096 blocks = 2560, version = 2
= sectsz = 512 sunit = 0 blks, lazy-count = 1
realtime = none extsz = 4096 blocks = 0, rtextents = 0
[root@localhost rdc]#
Revisemos para asegurarnos de que cada uno tenga un sistema de archivos utilizable.
[root@localhost rdc]# lsblk -o NAME,FSTYPE
NAME FSTYPE
sda
├─sda1 xfs
└─sda2 LVM2_member
├─cl-root xfs
└─cl-swap swap
sdb
└─sdb1 xfs
sdc
└─sdc1 xfs
sr0
[root@localhost rdc]#
Cada uno ahora está usando el sistema de archivos XFS. Vamos a montarlos, comprobar el montaje y copiar un archivo en cada uno.
[root@localhost rdc]# mount -o defaults /dev/sdb1 /mnt/sdb
[root@localhost rdc]# mount -o defaults /dev/sdc1 /mnt/sdc
[root@localhost ~]# touch /mnt/sdb/myFile /mnt/sdc/myFile
[root@localhost ~]# ls /mnt/sdb /mnt/sdc
/mnt/sdb:
myFile
/mnt/sdc:
myFile
Tenemos dos discos utilizables en este momento. Sin embargo, solo se podrán utilizar cuando los montemos manualmente. Para montar cada uno en el arranque, debemos editar el archivo fstab . Además, se deben establecer permisos para los grupos que necesiten acceder a los nuevos discos.
Crear grupos de volúmenes y volúmenes lógicos
Una de las mayores adiciones a CentOS 7 fue la inclusión de una utilidad llamada System Storage Manager o ssm .System Storage Manager simplifica enormemente el proceso de gestión de grupos LVM y volúmenes de almacenamiento en Linux.
Pasaremos por el proceso de creación de un grupo de volúmenes simple y volúmenes lógicos en CentOS. El primer paso es instalar System Storage Manager.
[root@localhost rdc]# yum install system-storage-manager
Veamos nuestros discos usando el comando ssm list .
Como se vio anteriormente, hay un total de tres discos instalados en el sistema.
/sdba1 - Aloja nuestra instalación de CentOS
/sdb1 - Montado en / mnt / sdb
/sdc1 - Montado en / mnt / sdc
Lo que queremos hacer es crear un grupo de volúmenes usando dos discos (sdb y sdc). Luego, ponga a disposición del sistema tres volúmenes lógicos de 3 GB.
Creemos nuestro grupo de volumen.
[root@localhost rdc]# ssm create -p NEW_POOL /dev/sdb1 /dev/sdc1
De forma predeterminada, ssm creará un único volumen lógico que ampliará los 10 GB completos del grupo. No queremos esto, así que eliminemos esto.
[root@localhost rdc]# ssm remove /dev/NEW_POOL/lvol001
Do you really want to remove active logical volume NEW_POOL/lvol001? [y/n]: y
Logical volume "lvol001" successfully removed
[root@localhost rdc]#
Finalmente, creemos los tres volúmenes lógicos.
[root@localhost rdc]# ssm create -n disk001 --fs xfs -s 3GB -p NEW_POOL
[root@localhost rdc]# ssm create -n disk002 --fs xfs -s 3GB -p NEW_POOL
[root@localhost rdc]# ssm create -n disk003 --fs xfs -s 3GB -p NEW_POOL
Ahora, revisemos nuestros nuevos volúmenes.
Ahora tenemos tres volúmenes lógicos separados distribuidos en dos particiones de disco físico.
Los volúmenes lógicos son una característica poderosa ahora integrada en CentOS Linux. Hemos tocado la superficie en la gestión de estos. El dominio de los grupos y volúmenes lógicos viene con la práctica y el aprendizaje extendido de Tutorials Point. Por ahora, ha aprendido los conceptos básicos de la administración de LVM en CentOS y posee la capacidad de crear volúmenes lógicos rayados básicos en un solo host.