Table of contents
Open Table of contents
Comandos y control de flujo
!$ -> representa el último argumento del comando ejecutado.
whoami -> quien soy en el sistema.
who -> usuarios que hay actualmente en el sistema. Con el parametro -q nos contará los usuarios que hay.
which -> nos indica donde esta el binario a ejecutar.
printenv -> para listar todas las variables de entorno del sistema.
& -> al final del comando para dejarlo en segundo plano.
disown -> para dejar el proceso en segundo plando sin depender de la terminal que lo haya lanzado y que no genere salida stdout ni stderr. Se pondrá al final del comando a ejecutar.
nohup -> igual que disown pero genera salida en el archivo nohup.out. Se pondrá al inicio del comando a ejecutar.
echo $? -> para ver la salida del estado del último comando ejecutado.
cd -> a secas nos llevará a la home del usuario.
whoami; ls -> podemos ejecutar comandos en una solo línea separando cada uno de ellos por ;
whoami && ls -> solo se ejecuta el segundo si tiene exito el primero.
whoami || ls -> se ejecuta el segundo siempre independiente del primero.
cmd &> /dev/null -> redirecciono tanto stdout como stderr a la nada.
cmd 2>&1 /dev/null -> redirecciono stderr a stdout y este a la nada.
dpkg -i -> instalar archivos binarios como por ejempolo. Si estamos en debian por ejemplo los deb.
echo $HOME
echo $PATH
which python3.9 | xargs ls -ls, con xargs volcaremos la salida del comando which a ls
$(comando) -> nos saldra por la salida estandar el output del sistema.
echo -e -> para interpretar los caracteres especiales.
printf -> para formatear la salida. Serial igual que echo pero con más opciones.
file -> para ver el tipo de archivo.
tee -> para redirigir la salida a un archivo y a la vez a la salida estandar.
export VAR="value" -> para crear una variable de entorno o asignar un nuevo valor a una existente.
tail -f /var/log/syslog -> para ver en tiempo real el log del sistema. (-f de follow).
dmesg -wT -> para ver el registro de dmesg en tiempo real. Si le quitamos el -w se verá el registro de dmesg.
strings -> para ver el contenido de un archivo binario.
xxd -> para ver el contenido de un archivo binario en hexadecimal.
uniq -> para eliminar lineas duplicadas. Interesante para hacer un sort y luego un uniq -c para contar las lineas duplicadas.
pgrep -> para buscar un proceso por nombre.
/etc/passwd -> listado de usuarios.
/etc/group -> listado de grupos.
/etc/group- -> algunos archivos importantes tendran una copia de seguridad por defecto por si las moscas.
/etc/shadow -> listado de pass, obviamente esta encriptadas.
/etc/shells -> listado de las shells disponibles en el sistema.
Para el tema de las redirecciones tenemos que tener claro los flujos estandares del sistema.
STDIN -> es la entrada estandar del sistema (por defecto es el teclado o salida de otro comando) se representa con el número 0.
STDOUT -> es la salida estandar del sistema (por defecto la pantalla o la entrada de otro comando), se representa con el número 1.
STDERR -> es la salida de errores (por defecto también la pantalla), se representa con el número 2.
Chuleta de comandos Linux Comandos básicos de Linux Guía en PDF de comandos básicos de Linux Redirectores en Bash Formato PDF
Permisos
Con respecto a los persmisos de archivos recuerda que el permiso de ejecución en un directorio es para poder acceder a él, que se dividen en 3 pares que son PROPIETARIO, GRUPO Y OTROS, que indicará en la linea quien es el propietario de los permisos y el grupo al que pertenece, por defecto será el mismo que el usuario, ya que todos los usuarios por defecto tiene un grupo que se llama igual que el usuario.
chmod -> cambiar permisos.
chown -> cambiar propietario. con chown pepe:pepe pepe, cambiaremos tanto el propietario como el grupo en este caso a la carpeta pepe.
chgrp -> cambiar grupo.
El resto de los permisos lo de siempre,
chmod u-x+w,g+r,o-x
También tenemos la forma octal, más rápida pero hay que aprenderse un poco los números. El truco puede ser con el patron 421 Esto es, podemos leer los permisos de la siguiente forma:
rwx r-x --x
111 101 001
Con el patron 421 siendo este respectivo a rwx, sustituimos solo donde hay 1 y sumamos de esta forma los permisos en octal serian:
rwx r-x --x
111 101 001
7 5 1
A tener en cuenta con los permisos es que prevalece el permiso que tenga el contenedor del archivo. Asi pues si un arhivo con solo lectura para un usuario podrá eliminarlo si la carpeta contenedora tiene para el grupo de ese usuario el permiso de escritura.
Importante también es la precedencia de los permisos, la mejor forma de entenderlo es la siguiente:
Leyendo los permisos del archivo de izquierda a derecha, nos vamos preguntando lo siguiente:
- Soy el propietario del archivo ¿?. Si lo soy se me aplican los permisos del propietario. Si no:
- Soy miembro del grupo de archivo¿?. Si lo soy se me aplican los permisos del grupo. Si no:
- Los permisos de otros seran los que se me apliquen.
Permisos y derechos en Linux Permisos básicos en Linux Permisos en Linux | Cómo son y cómo se cambian Cambiar permisos con comandos Asignación de permisos Propietarios y permisos Gestión de usuarios, grupos y permisos en Linux Gestión de usuarios y grupos en Linux Permisos del sistema de archivos GNU/Linux
Permisos especiales – Sticky Bit
El bit sticky se representa mediante una t en la máscara de permisos, apareciendo en la posición del permiso de búsqueda de los otros. Se aplica a directorios de uso público, es decir, aquellos que tienen todos los permisos activados y por tanto, todo el mundo puede crear y borrar ficheros
Para activarlo basta con poner los siguiente:
chmod +t pruebas
¿Qué es el Sticky Bit y cómo configurarlo? El bit Sticky | Tutorial de GNU/Linux
Control de atributos de ficheros en Linux – Chattr y Lsattr.
CHATATTR y LSATTR, nos valdrá para indicar permisos especiales y avanzadas a un archivo. Con lsattr prueba listaremos el archivo prueba y veremos los atributos que tiene. Con chattr podremos cambiar a los atributos. Un atributo intersante para poner seria la i (inmutabilidad) una vez puesto ni el usuario root podria cambiarlo. Eso si, este podria quitrarlo y ya esta.
Para utilizarlo es bastante facil, para listar unicamente tendremos que ejecutar
lsattr -a
Para asignar atributos lo haremos de la siguiente forma, en este caso haremos que el archivo sea inmutable, para que no se pueda borrar.
chattr +i prueba.txt
Control de atributos de ficheros Linux Comandos Chattr y Lsattr en Linux
Permisos especiales – SUID y SGID
Cuando se activa el bit SUID sobre un fichero significa que el que lo ejecute va a tener los mismos permisos que el que creó el archivo. Esto es útil en algunas ocasiones, aunque hay que utilizarlo con cuidado, ya que puede acarrear problemas de seguridad. Con respecto al SGID es lo mismo pero para los grupos
chmod 4775 hello.sh o chmod u+s hello.sh
Para buscar ficheros binarios en el sistema SUID seria
find / -type f -perm -4000 2>/dev/null
Lo mismo seria para el SGID
chmod 2775 hello.sh o chmod g+s hello.sh
Permisos SGID, SUID y Sticky Bit Permisos especiales en Linux Los bits SUID, SGID y Sticky
Privilegios especiales – Capabilities
Nos permiten gestionar ciertos permisos para un usuario normal que no sea root en ciertos binarios del sistema. Por ejemplo podemos poner al binario de phyton3 una capabiliti para que pueda cambiar el grupo del sistema sin ser root.
En este caso como root puede poner esta capabiliti con el siguiente comando
setcap cap_setuid+ep /usr/bin/python3.9
Para quitar las capabilities
setcap -r /usr/bin/python3.9
Para listar las capabilitis que hay en el sistema:
getcap -r / 2>/dev/null
Que son son las Capabilities en Linux ¿? Recursos con listado de capabilities por binario
Estructura del sistema
Los más importantes que debemos aprender son:
- /bin -> binarios de usuario.
- /sbin -> binarios de root.
- /boot -> arranque del sistema.
- /dev -> dispositivos del sistema.
- /etc -> configuración del sistema.
- /home -> directorio de usuario.
- /lib -> librerias de binarios y demás.
- /mnt -> puntos de montaje de dispositivos.
- /media -> similar a mnt, para montaje de dispositivos.
- /opt -> almacenar programas que no vienen con el opertativo comos chrome.
- /proc -> sistema de archivos virtual donde se guarda información de los procesos del sistema.
- /sys -> parecido a proc, encontramos info del kernel de nuestro equipo.
- /root -> es la home del usuario root.
- /srv -> almacen de datos que utilizan servidores que tengamos instalados en nuestro ordenador.
- /tmp -> almacen de datos y archivos temporales.
- /usr -> contiene la gran mayoria de los programas instalados en el operativo.
- /var -> registros y logs del sistema.
Estructura de directorios en Linux
Uso de bashrc y zshrc
Pues eso ficheros de configuración que se encuntran en la Home del usuario, donde podemos guardar configuraciones, alias, funciones y un sin fin de cosas. A tener en cuenta que cuando se haga algún cambio en ellos tendremos que reinicar la terminal para que los cambios se puedan aplicar.
¿Qué es Bashrc en Linux? ¿Por qué deberías usar ZSH?
Actualización y Upgreado
Uncicamente tener en cuenta que con el sistema parrot, nunca realizar apt upgrade (se nos puede ir todo al carajo), tendremos que actualizarlo con parrot-upgrade. Primero claro tendrimamos que hacer un apt update.
Búsquedas a nivel de sistema
Para buscar archivos en el sistema tenemos el comando find, que nos permitirá buscar archivos por nombre, tamaño, fecha de modificación, etc. Algunos ejemplos de uso serian:
find / -name passwd 2>/dev/null
find / -name passwd 2>/dev/null | xargs ls -la
find / -name passwd -ls 2>/dev/null
Buscar por privilegios SUID
find / -perm -4000 2>/dev/null
Buscar por fichero
find / -type f -name loquesea 2>/dev/null
Buscar por directorio
find / -type d -name loquesea 2>/dev/null
Buscar por usuario propietario root y que tengan capacidad de escritura
find / -user root -perm -u+w 2>/dev/null
find / -user root -writable 2>/dev/null
Buscar por usuario propietario root y que sean ejecutables
find / -user root -perm -u+x 2>/dev/null
find / -user root -executable -type f 2>/dev/null
Buscar por partes del nombre
find / -name \*loquesea\* 2>/dev/null
Buscar todos los archivos .zip y los que encuentre eliminarlos.
find . -iname "*zip" -exec rm {} \;
Comandos Find y Locate en Linux
Creación de scripts con Bash
Bueno un poco de repaso de lo que es un script en bash, que no es más que un fichero de texto plano que contiene una serie de comandos que se ejecutan en secuencia.
Para ejecutarlo tendremos que darle permisos de ejecución con chmod +x script.sh y ejecutarlo con ./script.sh (para ejecutarlo como si de un binario se tratase) o bien sin tener permisos de ejecucion con bash script.sh o con sh script.sh. Estas dos formas valdrían con o sin permisos.
El inicio del fichero tendrá que tener la siguiente cabecera, seguido de los comando que queramos ejecutar, se llama shebang.
#!/bin/bash
Un ejemplo de script sería el siguiente:
#!/bin/bash
echo "[x] La dirección IP privada es --> $(ifconfig | grep broadcast | awk NR==1'{print $2}')"
Otro ejemplo de script con declaracion de variables sería el siguiente:
#!/bin/bash
# Declaración de variables
nombre="Javier"
apellido="García"
edad=41
echo "Hola, mi nombre es $nombre $apellido y tengo $edad años ."
Metodo de filtrados de datos
Sobre todo conocer los comandos grep, awk y sed. Como siempre a través de la ayuda de los comandos podemos ver las opciones que tenemos para filtrar los datos.
Grep
Grep es un comando que nos permite buscar texto en un archivo o en la salida de otro comando. Algunos ejemplos de uso serian:
grep root /etc/passwd
grep -i root /etc/passwd
grep -v root /etc/passwd
grep -r root /etc/
Podemos también usar grep con tuberias para filtrar la salida de otros comandos. Por ejemplo:
ls -la /etc/ | grep root
Awk
Awk es un lenguaje de programación que nos permite procesar y filtrar texto. Algunos ejemplos de uso serian:
awk '{print $1}' /etc/passwd
awk -F: '{print $1}' /etc/passwd
awk -F: '{print $1, $3}' /etc/passwd
awk -F: '$3 > 1000 {print $1}' /etc/passwd
Sed
Sed es un editor de texto en línea de comandos. Algunos ejemplos de uso serian:
sed 's/root/pepe/' /etc/passwd
sed 's/root/pepe/g' /etc/passwd
sed 's/root/pepe/g' /etc/passwd > /tmp/passwd
sed -i 's/sivus/calamar/' stop_containers.sh
Sort
Sort es un comando que nos permite ordenar la salida de otro comando. Algunos ejemplos de uso serian:
sort /etc/passwd
sort -r /etc/passwd
sort -k 3 /etc/passwd
Uniq
Uniq es un comando que nos permite eliminar líneas duplicadas. Algunos ejemplos de uso serian:
uniq /etc/passwd
uniq -c /etc/passwd
AWK Cheat Sheet AWK Cheat Sheet 2 Cheat Sheet: Cutting Text with cut Como utilizar el comando sed Tutorial del uso de SORT Tutorial del uso de UNIQ
Uso del editor VIM
Los principales modos de vim son:
- Modo normal: es el modo por defecto, en el que se pueden mover por el texto, copiar, pegar, buscar, etc.
- Modo de inserción: en este modo se puede escribir texto. Se accede a través de la tecla i.
- Modo de comandos: en este modo se pueden ejecutar comandos de vim. Se accede a través de la tecla :.
- Modo visual: en este modo se puede seleccionar texto. Se accede a través de la letra v.
Deteción del tipo y formato de archivos
Para detectar el tipo de archivo tenemos el comando file, que nos dirá el tipo de archivo que es. Por ejemplo:
file /etc/passwd
Para ver el contenido de un archivo binario podemos utilizar el comando strings, que nos mostrará el contenido del archivo en texto plano. Por ejemplo:
strings /bin/ls
Para ver el contenido de un archivo binario en hexadecimal podemos utilizar el comando xxd, que nos mostrará el contenido del archivo en hexadecimal. Por ejemplo:
xxd /bin/ls
Muchos formatos de archivo no están pensados para leerse como texto. Si dicho archivo se ve accidentalmente como un archivo de texto, su contenido será ininteligible. Sin embargo, a veces la firma del archivo se puede reconocer cuando se interpreta como texto.
Por aquí te dejo una lista de firmas de archivos. La columna correspondiente a ‘Firma Hexadecimal‘ está directamente relacionada a los primeros bytes que en comparación a los primeros bytes del archivo con el que estamos tratando nos permitirán saber el tipo de formato al que nos estamos enfrentando: