Linux-Penguin

Comandos mas importantes en Linux

Una recopilacion de los comandos mas utiles para resolucion de problemas (troubleshoot) y que todo sysadmin Linux debe conocer.

La mayoria de los comandos son para CentOS/RHEL que son las distros que dominan los ambientes productivos de pequeñas y medianas empresas, sin embargo, muchos de estos son exactamente iguales en otras distros como las basadas en Debian y las variaciones suelen ser muy sutiles. Se omiten comandos muy básicos en la siguiente guía y las explicaciones son breves, ya que esta dirigido mas a un usuario con algo de conocimiento de Linux.

Comando más comunes en LinuxComandos Útiles para VIM o VIUtilidades de procesamiento de texto y expresiones regularesComandos de red en LinuxComandos Firewall de linuxComandos de Archivos y ficheros comprimidosGestión de trabajos o Jobs en LinuxProcesos y systemd en LinuxArchivos de Registros y journald en Linux

Estructura de los comandos

La mayoria de los comandos mantienen una estructura que se describe a continuacion:

Comando + Opción + Argumentos donde:

  • Comando: Es una orden que se ejecuta en la terminal, y que ejecuta un programa con una funcionalidad determinada.
  • Opción: Es la indicación que se pone a continuación del comando, para que el programa que se ejecute haga o muestre algo diferente.
  • Argumentos: Es la indicación que generalmente se pone a continuación del comando y las opciones. El mismo nos va a indicar sobre que directorio o archivo se va a ejecutar el programa indicado.

Comandos y su descripcion

  • su: Para cambiar el usuario root, sin el guion mantiene la ruta del entorno del usuario anterior (puede que sea necesario sudo su).
  • sudo su - user007: Para cambiar al usuario user007 con la contraseña actual del usuario.
  • su - user007: Para cambiar al usuario user007 con la contraseña de user007.
  • sudo -su user007: Para cambiar al usuario user007, pero manteniendo la ruta de entorno del usuario anterior.
  • cd / : directorio raíz.
  • cd ~: Directorio de inicio del usuario (home), en caso de user root es /root/ , tambien sin el ~ .
  • cp archivo1.txt path/here/ : Si agregas -a mantienes todas las características del archivo (Permisos, dueño). Colocas -R para copiar con recursividad.
  • rm -R: Remueve con recursividad (Archivos y carpetas dentro del directorio).
  • ls -lrt: Es una lista, ordena de manera inversa por tiempo, para incluir archivos ocultos usar “-a” y para lectura humana “-h”.
  • ll: Ejecuta la misma función que el comando ls –l .
  • tail -f logFile: Muestra en tiempo real cuales líneas son agregadas en el archivo logFile.
  • stat FileOrDirectory: Se mostrará la información de propiedad y sus modificaciones, así como también otros detalles.
  • file Nombrearchivo: Determina el tipo de archivo, con -i (file -i Nombrearchivo) usualmente imprime mejor codificación.
  • iconv -f UTF-8 tu_archivo -o /dev/null; echo $?: Si imprime 0 , es UTF-8.
  • chmod (UserGroupOthers, r=4, w=2, x=1) File: El comando chmod se utiliza para modificar los permisos de un archivo (File).
  • chown (e.g. chown USER[:GROUP] Archivo): Cambia el dueño del archivo, el USER ahora será el nuevo propietario y Archivo, es el archivo a modificar. Opcional, para cambiar el grupo es necesario el punto y coma (;). “;NuevoGrupo”.
  • Sudo chown -R NewUser:NewGroup Directory/path/ : Este comando, cambiara el dueño y el grupo de todos los archivos con recursividad.
  • readlink -f archivo.txt : Obtiene la ruta completa del archivo, archivo.txt
  • ln -s : Enlace simbólico (ruta relativa). Ejemplo: ln -s Existing/FileOrDirectory Path/Link/To/Create , esto no enlaza directamente con el inodo sino con el nombre del archivo o directorio, se pueden enlazar con archivos en otros dispositivos, así como directorios.
  • ln: Enlace fuerte (ruta fuerte), debe existir todo en el mismo dispositivo (partición, volumen lógico, etc.).
  • find /home/alice -name "*report*": Para encontrar archivos en la carpeta principal de “alice” con el nombre “report”. Añade “i” para no distinguir entre mayúsculas y minúsculas.
  • Find /directory/path ! -user Nombredeusuario : Este comando encontrara cualquier archivo que no pertenezca a Nombredeusuario”. El comando Find es mas lento que el comando locate”.
  • locate [OPTION] PATTERN (e.g. locate .bashrc) : Este comando es mucho más rápido, pero utiliza una base de datos «antigua» y busca sólo nombres o partes de ellos.
  • top: Listar procesos, %CPU, %MEM.
  • free -h: Comprueba la memoria RAM disponible. -h para lectura humana: Muestra todos los campos de salida automáticamente, escalados a la unidad de tres dígitos más corta.
  • kill -9: Detiene procesos (Riesgo de perder data. El sistema puede convertirse inestable si otro proceso depende del proceso que se acaba de detener). En general es una mala idea usar el comando. Es más recomendable usar k" cuando se usa top.
  • history: Muestra el historial de todos los comandos que se han usado.
  • Ctrl + r: Busca en el historial un comando.
  • !nn: Ejecuta un comando del historial, sustituyendo nn por el número del comando.
  • history -c: Borra el historial de la sesión actual.
  • history -w: Elimina el historial por completo de la historial de bash.
Relacion entre inodos, enlaces simbolicos, enlaces duros y data

Otros Permisos

De la siguiente tabla, el primer dígito que utiliza el valor numérico en chmod, chmod XUGO y puede ser comprobado desde la salida de ls -l, sustituirá la x de execute por la letra s para usuarios y grupos, y la t para todos los demás.

PermisosValores NuméricosValores RelativosEn los archivosEn los directorios
SUID4u+sEl usuario ejecuta el archivo con los permisos del propietario del archivo (owner).No tiene sentido.
SGID2g+sEl usuario ejecuta el archivo con permisos de propietario de grupo (group owner).Los archivos creados en el directorio, tienen los mismos permisos de propiedad de grupo (group owner).
Sticky bit1+tNo tiene sentido.Previene que los usuarios borren archivos de otros usuarios. El usuario Propietario (user owner) donde existe el archivo también puede eliminar el mismo archivo.

Herramientas de Linux du / df

  • du -shc: Comprueba el tamaño de un directorio o subdirectorio determinado. Donde:
    • h : Lectura humana.
    • s: resumen.
    • c: total.
  • df -h: Indica el tamaño total del disco duro, el espacio utilizado, el espacio disponible, el porcentaje de uso y en que partición está montado el disco.
  • du --max-depth=1 --one-file-system -h $@ | sort -h

PATH y stdin, stdout, stderr

Las variables de entorno PATH representa las ubicaciones en las que el shell buscara programas ejecutables.

Redirigiendo con > y anexando con >> 0 es la entrada estándar (stdin), 1 es la salida estándar (stdout) y 2 es el error estándar (stderr).

Otros comandos útiles

  • id Nombreusuario: Muestra información sobre el usuario, solo muestra el id del usuario actualmente conectado.
  • who or w: Usuarios conectados actualmente.
  • hostnamectl: Muestra toda la información de Linux. (Mas info en comandos de red)
  • cat /etc/centos-release: Para saber la versión exacta de CentOS.
  • rpm -q centos-release: También indica la versión exacta de CentOS.
  • file -s /dev/sda1 o df -Th o lsblk -f: Indica el tipo de filesystem.
  • reboot : Reinicia el sistema normalmente.
  • echo b > /proc/sysrq-trigger : Fuerza el reinicio del sistema sin salvar nada.
  • sed -i -e 's/\r$//' fileName.sh: Convierte el final de la línea con estilo Windows, al estilo UNIX.
  • date: Imprime el tiempo del sistema.
  • setfacl: Para asignar ACLs.
  • getfacl: Ve las actuales ACLs. ls -l muestra un signo “+” en lugar de un punto “.”. Después del listado de los permisos, lo que indica que las ACLs están aplicadas.
  • lsattr: Resumen de todos los atributos que son aplicados. Si solamente hay guiones, significa que no hay ningún atributo aplicado. Es un método alternativo que permite asegurar los archivos en un servidor de Linux, que trabaja con atributos. Los atributos hacen su trabajo independientemente del usuario que acceda al archivo.

Comandos VIMExplicación
EscPasa del modo entrada al modo comando.
i, aPasa del modo comando al modo entrada en (i) o después (a) en la posición actual del cursor.
oInserta una nueva línea debajo de la posición actual del cursor y entra en el modo de entrada.
OInserta una nueva línea encima de la posición actual del cursor.
:wqEscribe en el archivo actual y sale del archivo.
:q!Fuerza la salida del archivo sin aplicar ningún cambio.
:w filenameEscribe el archivo actual con un nuevo nombre de archivo.
ddBorra la línea actual.
yyCopia la línea actual.
p (minúscula)Pega lo seleccionado después del cursor.
P (Mayúsculas)Pega lo seleccionado antes del cursor.
vEntra en modo de visual, que te permite seleccionar un bloque de texto usando las flechas del teclado. Usar “d para cortar lo seleccionado o “y para copiarlo.
uDeshace el ultimo comando. Se puede repetir cuantas veces sea necesario.
Ctrl-rRehace el ultimo deshecho (u).
ggVa a la primera línea del documento.
GVa para la última línea del documento.
/textoBusca “texto” desde la posición actual del cursor hacia adelante. Usa n para avanzar y N para retroceder.
?textoBusca “texto” desde la posición actual del cursor hacia atrás.
^Va hacia la primera posición en la línea actual.
$Va hacia la última posición de la línea actual.
{}Se desplaza hacia el párrafo anterior o siguiente.
()Se desplaza a la oración anterior o siguiente.
!lsAñade la salida de ls (o cualquier otro comando) en el archivo actual.
:%s/viejo/nuevo/gReemplaza todas las ocurrencias de viejo por nuevo.
:set numberMuestra las líneas numeradas.
:nSe mueve a una línea numerada n
vim -d file1 file2Modo Diff horizontal, ctrl+w para moverse entre archivos.
:set ffComprueba el formato, puede decir «dos» o «unix
:set fileformat=unix Cambia el formato de un archivo a unix.
set fileformat=dosCambia el formato de un archivo a dos.

grep 'Cadenatexto' Nombre_ del_archivo : Este comando va a buscar ‘Cadenatexto’ y retornar todas las coincidencias que contenga el archivo. El comando distingue entre mayúsculas y minúsculos, por lo tanto ‘Cadenatexto’ es diferente que ‘cadenatexto’ . En otras palabras, el comando grep ‘texto’ Nombre_del_archivo , solamente va a mostrar todas las coincidencias iguales a lo que está dentro de las comillas, en este caso ‘texto’. Por otro lado este comando tiene variaciones:

  • grep 'Cadenatexto' -i Nombre_del_archivo : No va a distinguir entre mayúsculas y minúsculos lo que esta dentro de las comillas, en este caso 'Cadenatexto'.
  • grep 'Cadenatexto' -n Nombre_del_archivo : Le va a agregar números a las líneas de salida.

grep -nr '.cadenaTexto*'.

  • -n : Muestra el número de línea relativo del archivo.
  • '.cadenaTexto*': Busca la palabra cadenaTexto, sin importar el carácter que este antes o después de 'cadenaTexto'.
  • -r :habilita la búsqueda recursiva en los subdirectorios listado.
  • . :Directorio de búsqueda (actual directorio).

grep -v -e '^#' -e '^$' /path/to/NombreArchivo : Este comando, excluye todas las líneas en blanco y las líneas que comienzan con #.

Otras opciones del comando grep:

  • -v: Solamente muestra líneas que no contengan la expresión regular.
  • -e: Busca líneas que coincidan con más de una expresión regular.
  • |: Dentro de la expresión regular es un “or”, es igual que usar la opción -e.
  • -A <#>: Muestra <#> de líneas, después de tener una coincidencia con una expresión regular.
  • -B <#>: Muestra <#> de líneas antes de tener una coincidencia con una expresión normal.
  • E o -extended-regexp**.**: Interpreta los PATRONES como expresiones regulares extendidas.

<#> Número de líneas : Usando el comando -B <#> puede ser útil, porque algunas veces, vamos a encotrar, líneas con comentarios explicando lo que sigue en las siguientes líneas.

tail-f NombreArchivo : El comando tail-f NombreArchivo, muestra en tiempo real la modificación del nombre del archivo.

awk -F : '{ print $4 }' /path/to/NombreArchivo: El comando awk -F : '{ print $4 }' /path/to/NombreArchivo, te muestra el campo de la cuarta línea del archivo NombreArchivo, puedes probar con /etc/passwd .

awk -F : '/user/ { print $4 }' /etc/passwd : El comando awk -F : '/user/ { print $4 }' /etc/passwd busca en el archivo /etc/passwd el texto “user” e imprimirá el cuarto campo de cualquier línea que coincida.

sed -i s/viejo-texto/nuevo-texto/g ~/miarchivo : El comando sed, de alguna manera es similar al comando grep, pero tiene el beneficio que te permite realizar modificaciones a los archivos de texto, como se muestra en el siguiente ejemplo.

En este ejemplo, vamos a ver la utilidad de usar el comando sed, se va a buscar un texto en el archivo viejo-texto ~/miarchivo y se va a reemplazar las ocurrencias del texto en el archivo nuevo-texto. Es importante resaltar que el comportamiento por defecto del comando sed, es escribir la salida en STDOUT, pero la opción -i permite escribir el resultado directamente en el archivo.

Comandos para chequear todos los usuarios en el sistema :

  • cut -d : -f 1 /etc/passwd .
  • cut -f 1 -d : /etc/passwd | sort.
Expresión RegularUso
^textoCoincide con líneas que empiezan con un texto en específico
texto$Busca coincidencia con líneas que terminen en un texto en específico.
.Comodín ( busca coincidencia para cualquier carácter)
[abc]Busca coincidencia para a,b o c.
*Busca coincidencia desde cero (0) hasta un número infinito del carácter anterior
\{2\}Busca coincidencia de dos (2), de los caracteres anteriores
\{1,3\}Busca coincidencia de un mínimo de uno (1) o de máximo de tres (3) de los caracteres anteriores.
colou?rBusca coincidencia de cero (0) o una (1) de los caracteres anteriores. Esto hace que el carácter sea opcional, en este ejemplo, pudo haber coincidido los dos, color o colour

ancla de línea: En las expresiones regulares, un carácter que se refiere a una posición específica en una línea.

A continuación, se muestran algunos comandos de red en Linux y su funcionamiento:

  • ip addr : Para configurar y monitorear las direcciones de red. Otra opción es, ip a.
  • ip route: Para configurar y monitorear la información de enrutamiento, muestra la puerta de enlace predeterminada.
  • ip link: Para configurar y monitorear el estado de los enlaces de red.
  • ip -s link show: Ve las estadísticas de los enlaces actuales, también proporciona información sobre los paquetes transmitidos y recibidos, así como también un resumen de los errores ocurridos durante la transmisión del paquete.
  • ip link set dev Nombredispositivodered up : En caso de que un dispositivo este inactivo o caído, este comando lo pondrá nuevamente a funcionar temporalmente.
  • ss -ltu : Muestra todos los puertos que están escuchando (-l) en el sistema local para TCP (-t) y UDP (-u). En sistemas viejos seria netstat
    • Añadiendo -n: proporciona los números de puerto en lugar de los nombres de los servicios.
    • Añadiendo -a : Muestra una lista de los puertos de escucha o no escucha (conexiones establecidas).
    • Añadiendo -p: Muestra el PID y el nombre de los programas que pertenece cada socket.
    • [::] : Significa que cualquier IPv6, Se puede usar -6 para mostrar solo conexiones IPv6.
    • * : Significa cualquier dirección IPv4, Se puede usar -4 para mostrar solo conexiones IPv4
  • traceroute -T -p Port FQDNorIP : Comprueba la ruta de envió del paquete TCP (-T), sincroniza los paquetes.
    • Añadiendo -n : Le específicas que no intente resolver los problemas de Dominio (FQDN).
  • tracepath -b -p PORT FQDNorIP: Es una alternativa al comando traceroute.
    • -b : Imprimes IPs y los Dominios.
    • Añadiendo -m + 30 (Número): Para tener la cantidad de hops que indica el número. Solo envía UDP.
  • lsof -i -P -n | grep LISTEN : Filtra todos los puertos que están en estado de escucha (Esto no quiere decir que están abiertos en el Firewall ).
    • -i : Selecciona el listado de los archivos de red de internet y x.25 (HP-UX).
    • -n: Muestra el número de redes.
    • -P: Muestra el número de puertos.
  • Archivos de servicios: /etc/services
  • ping : Le envía un ICMP ECHO_REQUEST a los hosts de la red.
  • ping -c 3 google.com : Para chequear la conexión de internet y los DNS.
  • telnet IPAddress port : Este comando chequea si el puerto está abierto. Para salir de la sesión de Telnet, escribir Ctrl + ]. Esto cambia la consola y te la muestra como Telnet. Posteriormente hay que escribir la palabra 'close'. No funciona en puertos UDP.
  • scp /path/to/Nombrearchivo server2:/tmp/ : Copia Nombrearchivo del ordenador local al servidor2 en el directorio /tmp como root , el nombredeusuario también se puede especificar como, nombredeusuario@server2.
  • scp root@server2:/path/to/Nombrearchivo /etc/ : Como root en el servidor “server2” (servidor remoto) copia Nombrearchivo en el directorio local /etc/ .
    • Usas -r para copiar toda la estructura del subdirectorio.
  • sftp userName@hostameOrIP: Hace una conexión sftp.
    Nota: Puedes ejecutar comandos en el servidor remoto, si tu quieres ejecutar comandos en el servidor local, puedes usar la letra ele “l” antes del comando. Por ejemplo: lpwd : Muestra el directorio local de trabajo.
  • sftp> put <NombreArchivo> Carga o sube <NombreArchivo> del directorio local de trabajo, hacia el directorio remoto actual de trabajo.
  • sftp>get <NombreArchivo> Descarga o baja <NombreArchivo> del actual directorio de trabajo remoto, hacia el actual directorio local de trabajo.
  • rsync : Es otra opción que se puede utilizar para mover los archivos del directorio local a remoto y viceversa, solo hay que tener bien identificado los archivos que queremos mover. Es muy útil cuando se usa scripts.
  • nmtui (interfaz de usuario de texto de networkmanager ) o nmcli ( interfaz de línea de comandos de networkmanager ) : Son usados para hacer la configuración permanente. Si tiene una GUI, se puede usar el siguiente comando nm-connection-editor, pero no tendrá todas las funcionalidades.
  • nmcli gen permissions: Verifica los permisos actuales del usuario que ha iniciado sesión para ver si puede realizar configuraciones de la red.
  • nmcli con show : Muestra el estado actual de la conexión.
  • nmcli con show NombredelDispositivodeRed : Puedes ver todas las propiedades de la conexión.
  • nmcli con up : Activa las nuevas configuraciones después de editar directamente el script ubicado en /etc/sysconfig/network-scripts.
  • nmtui : Es más fácil de usar que nmcli.
  • hostnamectl : Da información sobre el nombre del host, el kernel de Linux, el tipo de virtualización, etc. , utilizando sus comandos puede establecer el nombre de host del sistema. Si un host tiene más de un nombre, como un nombre corto y un nombre de dominio completo, puede especificar ambos en /etc/hosts. En ese caso, la segunda columna debe contener el FQDN, y la tercera columna puede contener el alias. ejemplo: 10.0.0.10 servidor1.ejemplo.com servidor1.

Tips:

El archivo de configuración del servicio sshd para la máquina remota se encuentra en /etc/ssh/sshd_config X11Forwarding yes , se puede encontrar en el lado del servidor en /etc/ssh/sshd_config

Para clientes ssh:

  • ssh -Y : habilita las aplicaciones GUI, o ForwardX11 yes , en la ruta /etc/ssh/ssh_config en el lado del cliente.
  • ssh -X : habilita las aplicaciones GUI, o ForwardX11 yes , en la ruta /etc/ssh/ssh_config en el lado del cliente, pero de una manera más segura.

Nota: Puedes encontrar las diferencias entre “ssh -Y” y “ssh -X” en el siguiente enlace:

https://askubuntu.com/questions/35512/what-is-the-difference-between-ssh-y-trusted-x11-forwarding-and-ssh-x-u

Creando una llave Publica/Privada para ssh:

  • ssh-keygen: En la maquina local creas la llave Publica/ Privada.
  • ssh-copy-id direccionremotaoIP: Copia la llave publica hacia el servidor direccionremotaoIP.
  • systemctl status NetworkManager : Muestra el estado de NetworkManager. Cuando el NetworkManager se activa, lee los scripts de configuración de la tarjeta de red, que están ubicados en /etc/sysconfig/network-scripts y tienen un nombre que comienza con ifcfg- y es seguido por el nombre de la tarjeta de red.
Probando syslog (desde un sistema con bash, tambien funciona hacia Windows)

Para UDP:

  • echo "<14>Test UDP syslog message" >> /dev/udp/<target_hostname_or_ip_address>/<514 or port>

Para TCP:

  • echo "<14>Test TCP syslog message" >> /dev/tcp/<target_hostname_or_ip_address>/<514 or port>

Para mas informacion pueden chequear el siguiente enlace.

https://www.gnu.org/software/bash/manual/bash.html

  • tcpdump -nni <interfaz puerto numero>-A -s 0 : Imprime una descripción del contenido de los paquetes de una interfaz de red que coinciden con la expresión booleana.
    • -nn: Para las direcciones de IP en lugar de los nombres de host.
    • -i : Para especificar la interfaz, y especificar el puerto y numero de puerto.
    • -A : Muestra el contenido en ASCII ( A veces usado para capturar páginas web ).
    • -s : Para los snaplen (Cantidad de datos que se capturan y se almacenan en el CaptureFile, el snaplen se calcula como : snaplen=snapshot-length).
    • -w : Guarda los datos del paquete en un archivo para su posterior análisis (guarda el paquete como fileName.pcap y no tiene la bandera -A, sólo guarda los encabezados del paquete por defecto. Este valor por defecto hace que los datos sean pequeños, pero la información más útil y relevante puede faltar. Así que, a menos que esté seguro de que sólo necesita las cabeceras, utilice la opción -s con un valor del orden de 1560 (los valores reales dependen de la MTU) para capturar paquetes enteros para su posterior inspección. Con o sin - r, hace que lea de un archivo de paquetes guardado en lugar de leer paquetes de una interfaz de red. También puede ejecutarse con la bandera -V, que hace que lea una lista de archivos de paquetes guardados.
    • -v flag (bandera -v) : aumenta la información que ves sobre los paquetes.
    • -vv flag (bandera -v) : Te da más cantidad de datos que la bandera -v.
    • -vvv flag (bandera -vvv): Te proporciona más cantidad de datos que las bandera -v y -vv, sin embargo es mejor empezar con las primeras opciones .
  • nmap -sU -p 514 192.168.0.24 : comprueba si el puerto udp 514 está abierto.
    • Abierto: significa que una aplicación en la máquina de destino está escuchando conexiones/paquetes en ese puerto.
    • Filtrado: Significa que un cortafuegos, filtro u otro obstáculo de red está bloqueando el puerto de forma que nmap no puede saber si está abierto o cerrado.
    • Cerrado: Los puertos no tienen ninguna aplicación escuchando en ellos, aunque podrían abrirse en cualquier momento.
    • Sin filtrar: cuando responden a las pruebas de nmap, pero nmap no puede determinar si están abiertas o cerradas.
    • Nmap reporta las combinaciones de estados open|filtered o closed|filtered ; Cuando no puede determinar cual de los dos estados, lo describe como «port«

El firewall Netfilter, permite a los módulos del kernel inspeccionar cada paquete entrante, saliente o reenviado, de manera de actuar sobre dicho paquete, dándole permisos o bloqueándolo.

Desde CentOS8 nft (para tablas nft) pueden usarse. Iptables todavía sigue usándose.

  • systemctl status firewalld : Para ver el estado del Firewalld Daemon.

Comandos para comprobar si un puerto está abierto en el Firewall:

  • iptables-save | grep NumeroPuerto : Vacía el contenido de iptables en un formato fácilmente interpretable a STDOUT
  • iptables -nL | grep NumeroPuerto: Comando que puede ser utilizado para remover reglas innecesarias.
    • -L : Listar todas las reglas en todas las cadenas.
    • -n: Para la salida numérica de las direcciones IP y números de puertos.
    • Colocar el -v para Verbose, es decir mostrar información detalla del proceso en la pantalla.

firewall-cmd

  • firewall-cmd --get-zones : Lista de todas las zonas disponibles.
  • firewall-cmd --list-all-zones: Lista de todas las zonas disponible, pero con información más detallada.
  • firewall-cmd --get-active-zones : Muestra las zonas actualmente activas.
  • firewall-cmd --info-zone=<zone>: Lista todas las configuraciones de la zona (zone).
  • firewall-cmd --get-default-zone: Muestra la zona actualmente establecida como zona por defecto.
  • firewall-cmd --set-default-zone=<zone> : Cambia la zona (zone) por defecto.
  • firewall-cmd --reload: Recarga firewalld para aplicar las reglas.

Nota: En los siguientes comandos, si la zona es omitida, Los  cambios se van a guardar en la zona por defecto, también el orden no importa, es decir la palabra “permanent” puede estar justo después de la orden firewall-cmd .

  • firewall-cmd –permanent –new-zone=nombre-zona: Crea una nueva zona y la hace permanente.
  • firewall-cmd –permanent –delete-zone=<zone>: Elimina la zona de forma permanente.
  • firewall-cmd --permanent --zone=Nombre-Zona --add-port=(numeropuerto)/tcp : Este comando indica que va a agregar el puerto numeropuerto (ex: 8000) como TCP a la zona Nombre-Zona y seguirá funcionando después de un reinicio del firewalld.
  • firewall-cmd --permanent --zone=<zone> --remove-port=<puerto/protocolo> : Elimina el “puerto/protocolo” de la zona “zone”.
  • firewall-cmd --permanent --zone=<zone> --add-source=192.168.1.0/24: Este comando agregará la Fuente, por lo tanto, la red “192.168.1.0/24podrá tener acceso al puerto.
  • firewall-cmd --remove-source=<ipaddress/netmask> --permanent : El comando elimina la fuente de la zona que se está utilizando.
  • firewall-cmd --permanent --zone=public --add-service=http: Permite el acceso de los clientes HTTP (puerto 80, también podemos decir que para HTTPS el puerto 443) a la zona pública (zone=public). Posteriormente seguirán funcionando después de un reinicio del firewalld.
  • /usr/lib/firewalld/ : Los archivos de servicios y zonas .xml los puedes encontrar en este directorio.
  • firewall-cmd --get-services : Muestra todos los servicios disponibles.
  • firewall-cmd --list-services: Muestra los servicios que se están utilizando actualmente.
  • firewall-cmd --add-service=<service-name> : Agrega servicios la zona por defecto.
  • firewall-cmd --remove-service=<service-name>: Elimina un servicio de la configuración.
  • firewall-cmd --add-interface=<interface> : Agrega una interfaz a la zona por defecto.
  • firewall-cmd --remove-interface=<interface>: Elimina la interfaz de la zona utilizada.
  • firewall-config : Herramienta GUI.
  • lsof -i -P -n | grep LISTEN : Filtra todos los puertos que están en estado de escucha (Esto no significa que están abiertos en el firewall).
  • telnet IPAddress port : Este comando chequea si el puerto está abierto. Para salir de la sesión de Telnet, escribir Ctrl + ]. Esto cambia la consola y te la muestra como Telnet. Posteriormente hay que escribir la palabra ‘closeo 'quit'.
  • nmap -p 1-2000 IPAddress : El comando buscara puertos abiertos desde el puerto 1 al 2000 (mas información en redes ).

Firewalld

https://firewalld.org/documentation/concepts.html

Zona:

Una zona define el nivel de confianza para una conexión, una interfaz o un enlace de dirección de origen. Se trata de una relación de uno a muchos lo que significa que una conexión, interfaz o fuente sólo puede formar parte de una zona, pero una zona puede utilizarse para muchas conexiones de red, interfaces y fuentes. Firewalld se aplica a los paquetes entrantes sólo por defecto, y no se produce ningún filtrado en los paquetes salientes.   La zona por defecto es la zona que se utiliza para todo lo que no está explícitamente vinculado/asignado a otra zona

Las zonas por defecto de Firewalld se clasifican según el nivel de confianza por defecto de las zonas, desde las no confiables hasta las confiables:

Nombre de la ZonaConfiguraciones por Defecto
dropTodos los paquetes de red entrantes se descartan, no hay respuesta. Sólo son posibles las conexiones de red salientes.
blockCualquier conexión de red entrante se rechaza con un mensaje icmp-host-prohibido para IPv4 y icmp6-adm-prohibited para IPv6. Sólo son posibles las conexiones de red iniciadas dentro de este sistema.
publicPara usar en zonas públicas. Usted no confía en que los otros ordenadores de la red para que no dañen su ordenador. Sólo se aceptan las conexiones entrantes seleccionadas.
externalPara su uso en redes externas con enmascaramiento habilitado especialmente para los routers. Usted no confía en que los otros ordenadores en las redes para no dañar su ordenador. Sólo se aceptan las conexiones entrantes seleccionadas aceptadas.
dmzPara los ordenadores de su zona desmilitarizada que son de acceso público con acceso limitado a su Para los ordenadores de su zona desmilitarizada que sonde acceso público con acceso limitado a sude acceso público con acceso limitado a su red interna. Sólo se aceptan las conexiones
seleccionadas.
workPara su uso en áreas de trabajo. Usted confía sobre todo en que los otros ordenadores en las redes para no dañar su ordenador. Sólo se aceptan las conexiones entrantes seleccionadas.
homePara su uso en áreas domésticas. Usted confía principalmente en que los otros ordenadores en las redes para no dañar su ordenador. Sólo se aceptan las conexiones entrantes seleccionadas.
internalPara su uso en redes internas. Usted confía principalmente en que los otros ordenadores en las redes para no dañar su ordenador. Sólo se aceptan las conexiones entrantes seleccionadas aceptadas.
trustedTodas las conexiones de red son aceptadas.

Un servicio de firewalld puede ser una lista de puertos locales y destinos , además, una lista de módulos de ayuda de firewall cargados automáticamente si el servicio está habilitado.

Uncomplicated Firewall (ufw) de Ubuntu

https://ubuntu.com/server/docs/security-firewall

En una instalación limpia de Ubuntu que tiene ufw con un estado de inactivo, no creas como está permitiendo todo a través, los puertos, están cerrados y la conexión será rechazada si se intenta telnet a ellos.

Comando TAR:

El comando TAR (Tape Archive en ingles), es usado para comprimir o empaquetar archivos o directorios. Tambien puede ser usado para transferir un gran numero de archivos o carpetas entre diferentes servidores.

  • tar -cf nombrearchivo.tar /Archivo/Que-quieres-archivar /OtroarchivoparaGuardar : Crea y archiva.
    • Añadir -v, para verbose (muestra información detallada del proceso).
  • tar -xvf homes.tar -C /tmp : Extrae un archivo llamado “homes.tar al directorio /tmp
    • Si omites el -C/tmp para extraer los archivos en el directorio actual.
  • tar -xvf /nombrearchivo.tar Archivo-que-quieres-extraer : Extrae específicamente el “ Archivo-que-quieres-extraerdel archivo nombrearchivo.tar, no extrae todo el archivo.
  • tar -tvf NombreArchivo.tar : Para visualizar el contenido de un archivo, en este caso el contenido de “NombreArchivo.tar” .
  • tar -rvf /root/homes.tar /etc/hosts : Se utiliza la opción (-r) para agregar al archivo host al final del archivo homes.tar”.
  • tar -O -xvf path/to/file.tar path/to/file/NombredelArchivointerno.txt : Extrae los archivos a la salida estándar, por lo tanto se mostrara el contenido del archivo. Otra manera de escribir el comando es reemplazando -O por --to-stdout. El comando quedaría de la siguiente manera : tar --to-stdout -xvf path/to/file.tar path/to/file/NombredelArchivointerno.txt .
  • tar -uvf /root/homes.tar /home : Para escribir versiones nuevas de todos los archivos que se encuentran en /home .
    • Para actualizar un archivo existente, puedes usar la opción -u.
Para Comprimir :

Para comprimir inmediatamente el archivo mientras se crea, incluya -z (gzip) o -j (bzip2) mientras se está creando el archivo con el comando tar.

No hay necesidad de usar estas opciones mientras se extrae, la compresión es reconocida por tar

  • file : Este comando nos puede indicar si un documento es un archivo, y si tiene una buena práctica para anexar .tar o tgz., sin embargo no es obligatorio.
  • NombreArchivo.txt : Ve el contenido de NombreArchivo sin descomprimirlo.                                                                                                                                                                                

Gestión de trabajos o Jobs en Linux

Un trabajo o Jobs en Linux, se puede definir como un comando que se ha ejecutado desde la terminal, y su función aún no ha finalizado. En otras palabras, es cuando se ejecuta un comando o se realiza una tarea, pero la tarea o comando, aún no termina su proceso.

Resumen de Gestión de Trabajo o Jobs
ComandoUso
& (Utilizar al final de la línea de comandos, con un espacio entre ellos).Hace que el comando se ejecute inmediatamente en segundo plano.
Ctrl + zDetiene el trabajo o Job temporalmente para que pueda ser gestionado. No terminara el programa pero lo mantendrá pausado en segundo plano.
Ctrl + dEnvía el carácter de “End Of File” (EOF) al Job actual, para indicar que debe dejar de esperar la entrada de datos.
Ctrl + cPuede usarse para cancelar el Job interactivo actual.
bgContinua el Job que acaba de ser pausado usando el comando Ctrl-z en segundo plano.
fgDevuelve al primer plano el ultimo JOB que fue movido a ejecución en segundo plano.
jobsMuestra los trabajos que se están ejecutando actualmente desde la shell actual. Muestra el número de Jobs que pueden utilizarse como argumento para los comandos bg y fg.

Procesos y systemd en Linux

Los procesos son muy importantes en las distribuciones de Linux, ya que son los que van a consumir los recursos de hardware en el entorno de producción, administrarlos y gestionarlos correctamente es fundamental, ya que gracias a ellos es posible mantener funcionando el servidor sin necesidad de reiniciarlo después de un cambio o actualización necesaria. Para poder ver los procesos en los sistemas de Linux, contamos con el comando “ps”, que, de acuerdo a las opciones del comando, listara los procesos que se encuentran corriendo en nuestro equipo.

  • ps : procesos iniciados por el usuario actual.
  • ps -aux : Muestra un breve resumen de los procesos activos.
    • u: Muestra un formato orientado al usuario, además muestra la información del usuario dueño de los procesos.
    • a: Se muestran todos los procesos excepto ambos líderes de sesión, procesos que no están asociados con la terminal.
    • Los procesos de Kernel tienen un nombre que esta entre corchetes [ ] ; de la salida del comando ps -aux , los mismos no pueden ser administrados y la única forma de matarlos es apagando la máquina. De las columnas VSZ significa Virtual Memory Size y RSS Resident Set Size en kilobytes.
  • ps -ef : Muestra el comando exacto que se utilizó para iniciar el proceso.
  • ps -fax: Muestra las relaciones jerárquicas entre los procesos padre e hijo.
  • ps aux | grep ServiceNameOrPID: Obtiene el PID de ServiceName o el PID de Service.

Systemd es un administrado de sistemas y servicios diseñado específicamente para el Kernel de linux. Systemd viene habilitado de forma predeterminada en varios sistemas basados en Linux como Arch, Debian, Fedora y Ubuntu.

  • systemctl status serviceName : Comando que proporciona información sobre el estado del servicio y también de los daemons ( Procesos/Servicios) que se ejecutan y están activos en segundo plano.
    • systemctl status serviceName -l: Añadiendo -l obtenemos más detalles.
  • systemctl enable/disable/start/stop/restart: Estos son comandos útiles para iniciar, detener, reiniciar. En la terminología de Systemd, el enlace simbólico creado al usar systemctl enable se conoce como want, porque define lo que el objetivo quiere iniciar cuando se procesa.
  • systemctl daemon-reload: Recarga la configuración del gestor systemd. Esto reiniciara todos los generadores (ver systemd.generator (7)), recargara todos los archivos de unidad y recreara todo el árbol de dependencias. Mientras el Daemons se está recargando, todos los sockets que systemd escucha en nombre de la configuración del usuario seguirán siendo accesibles.
  • systemctl list-dependencies unitName: Averigua que dependencias tiene. Muestra unidades requeridas y buscadas por el unitName especificado.
  • systemctl list-dependencies --reverse unitName: Averigua que unidades son dependientes de esta unidad «unitName».
  • systemctl --type=service: Muestra las unidades de servicio.
  • systemctl list-units --type=service --all: Muestra las unidades de servicio activas e inactivas.
  • systemctl --failed --type=service: Muestra todos los servicios que han fallado.
  • service --status-all: Brinda información sobre todos los servicios, en funcionamiento o no.
  • lsof directory/NameOfTheFile: Nos permite saber a qué aplicación pertenece el archivo y el PID
  • lsof +d directory/path/: Permite que Isof busque todas las instancias abiertas del directorio directory/path y los archivos y directorios que contiene en su nivel superior.
    • +d : No desciende por el árbol de directorios, anclado con directory/path.
    • +D: Puede utilizarse para solicitar una búsqueda en el árbol de directorios en descenso completo, con raíz en directory/path.
    • Esto también se puede aplicar a un sistema de archivos, cuando no es posible desmontarlo, este comando nos permitirá saber cuál es el usuario que lo está utilizando.
Los 10 Procesos que más memoria consumen:
  • ps -auxf | sort -nr -k 4 | head
  • ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head
Los 10 procesos que más consumen CPU
  • ps -auxf | sort -nr -k 3 | head
  • ps -aux | less -N: menos para navegar en Procesos (-N números de línea)
Resumen del estado de los procesos de Linux.
EstadoSignificado
Running (R)El proceso está actualmente activo y usando tiempo de CPU, o está en la cola de procesos ejecutables en espera de obtener servicios.
Sleeping (S)El proceso está actualmente activo y usando tiempo de CPU, o está en la cola de procesos ejecutables en espera de obtener servicios.
Uninterruptible
sleep (D)
El proceso se encuentra en un estado de reposo que no se puede detener. Esto suele ocurrir cuando un proceso está esperando por I/O.
Stopped (T)El proceso se ha detenido. Por lo general suele ocurrir a un proceso interactivo shell, utilizando la secuencia de teclas Ctrl-Z.
Zombie (Z)El proceso se ha detenido pero no ha podido ser eliminado por su padre, lo que lo ha puesto en un estado inmanejable.
Idle (I)Se introdujo en la versión 4.14 del Kernel de Linux. Se utiliza para los procesos del Kernel que utilizan el estado TASK_IDLE cuando está en reposo.
  • nice -n NumberPriority -p PID: Inicia un proceso con una prioridad ajustada.
  • renice -n NumberPriority -p PID: Cambia la prioridad de un proceso que está activo (igual que el uso del comando r de la utilidad superior).
    • Los valores se pueden asignar (-20 a 19), los valores más bajos, significan mayor prioridad, por defecto es 0 (que significa PR de 20 en la parte superior). No se configura la prioridad del proceso en -20, debido a que se corre el riesgo de bloquear otros procesos para que sean atendidos.
Systemd

Unit o unidad en Systemd, se refiere a un elemento que es gestionado por systemd. Existen diferentes tipos de unidades, incluyendo servicio, sockect, ruta, montaje y unidades de destino.

Resumen del estado de Systemd, desde systemctl.
EstadoDescripción
LoadedEl archivo de la unidad ha sido procesado y la unidad está activa.
Active(running)La unidad está funcionando con uno o más procesos activos.
Active(exited)La unidad ha completado con éxito una ejecución única.
Active(waiting)La unidad se está ejecutando y está esperando un evento.
Inactive(dead)La unidad no se está ejecutando.
EnabledLa unidad se iniciará en el momento del arranque.
DisabledLa unidad no se iniciará en el momento del arranque.
StaticLa unidad no se puede habilitar, pero puede ser iniciada por otra unidad automáticamente.
  • systemctl show UnitName: Muestra que opciones están disponibles para una unidad específica, incluyendo sus valores por defecto.
  • yum install bash-completion bash-completion-extras: Para tener systemctl autocompletado en CentOS 7.

Archivos de Registros y journald en Linux.

La mayoría de los archivos de registro de Linux se almacenan en un archivo de texto ASCII plano y se encuentran en el directorio y subdirectorio /var/log. Los registros son generados por el daemon del sistema Linux log, syslogd o rsyslogd (una mejora de syslogd).

  • /var/log/messages: Mensajes generales y cosas relacionadas con el sistema.
  • /var/log/secure or /var/log/auth.log: Registro de autenticación.
  • /var/log/dmesg or /var/log/kern.log : Registros del Kernel.
  • /var/log/audit/audit.log: Contiene mensajes de auditoria. SELinux escribe en este archivo.
  • /var/log/cron.log: Registro de crond (cron Job).
  • /var/log/maillog : Mensajes relacionados con el correo (postfix).
  • /var/log/qmail/ : Directorio de registro de Qmail (mas archivos dentro de este directorio).
  • /var/log/httpd/: Directorio de registros de acceso y error de Apache.
  • /var/log/lighttpd/: Directorio de registros de acceso y error de Lighttpd.
  • /var/log/nginx/: Directorio de registros de acceso y error de Nginx.
  • /var/log/apt/: Directorio Apt/apt-get historia de los comandos y registros del directorio.
  • /var/log/boot.log: Registro de arranque del sistema.
  • /var/log/mysqld.log: Archivo de registro del servidor de la base de datos MySQL.
  • /var/log/samba: Archivos de registro para el servicio Samba. Samba por defecto no se gestiona a través de rsyslog, sino que escribe directamente en el directorio /var/log.
  • /var/log/utmp or /var/log/wtmp : Archivos de registros de inicio de sesión.
  • /var/log/yum.log or /var/log/dnf.log: Archivo de registro de comandos Yum/Dnf.
  • Si el espacio en disco ROOT “/” está lleno: Borrar los registros de /var/log/ de más de 7 días:
    • cd /var/log/
    • find . -type f -iname '*.log' -mtime +7 -delete
  • logger: Permite a los usuarios escribir mensajes en rsyslog desde la línea de comandos o un script.
  • /etc/rsyslog.conf: es la ubicación central donde se configura rsyslogd, se utiliza para especificar qué debe ser registrado y dónde debe ser registrado.
    • Si es necesario pasar opciones específicas al servicio rsyslogd al inicio, puede hacerlo utilizando el archivo /etc/sysconfig/rsyslog (no se recomienda).
  • man 5 rsyslog.conf: Mas información aquí:
CodigorsyslogNivel
0emerg, panicEmergencia: sistema inutilizable.
1alertHay que tomar medidas inmediatamente.
2critCrítical: condiciones críticas.
3err, errorCondiciones de Error.
4warning, warnCondiciones de advertencia.
5noticeCondición normal pero significativa.
6infoMensajes informativos
7debug 
Mensajes de nivel de depuración

Ej: Si se tiene un rsyslog con código 5 notice, se obtendrá 4,3,2,1 y 0 también, pero no 6 o 7.

  • Journalctl: Accede a un nivel de detalle profundo sobre los mensajes registrados, recibe todos los mensajes que han sido generados por las unidades de Systemd.
    • Journalctl -f: añade -f para mostrar las últimas líneas de los mensajes donde se agregan automáticamente.
  • Journalctl -xe: -x para aumentar las líneas de registro con textos explicativos del catálogo de mensajes. Esto agregara textos explicativos de ayuda a los mensajes de registro en la salida donde esté disponible. -e, (–pager-end) para saltar inmediatamente al final del registro dentro de la herramienta de página interna.
  • journalctl -p err: Muestra sólo los errores.
  • journalctl --since yesterday: Muestra todos los mensajes que se han escrito desde ayer. -since y --until toman el parámetro de tiempo AAAA-MM-DD hh:mm:ss. Además, toman ayer, hoy y mañana como parámetros.
  • dmesg: sólo los mensajes relacionados con el kernel.

Por defecto, el historial se almacena en el archivo /run/log/journal. Todo el directorio /run se utiliza sólo para la información del estado del proceso actual, lo que significa que el historial se borra cuando el sistema se reinicia. Para hacer que el historial sea persistente entre los reinicios del sistema, debe asegurarse de que el directorio /var/log/journal exista.

La configuración por defecto para la rotación de registros se mantiene en el archivo /etc/logrotate.conf. Si hay archivos específicos que necesitan ajustes específicos, puedes crear un archivo de configuración para ese archivo en /etc/logrotate.d. Los ajustes para ese archivo específico sobrescriben los ajustes por defecto en /etc/logrotate.conf.

Ingeniero de Seguridad informática, Administrador IT, anteriormente docente de tecnología, apasionado por la ingeniería y como aprovechar la tecnología para nuestro beneficio

Artículos relacionados

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *