🔐👤👥 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
-
-m: crea su carpeta personal -
-d: define el directorio home -
-s: define la shell
🔒 Asignar Contraseña paraunai
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

🆔 Ver Información de Grupos de un Usuario
id

➡️ 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:

🛠️ Interpretación de los Permisos
Los permisos se presentan de la siguiente forma:
rw-r--r--
Desglosado:
-
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.
-
-
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.
-
-
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
-
quiénes:
-
u: usuario (propietario) -
g: grupo -
o: otros
-
-
permisos:
-
r: lectura -
w: escritura -
x: ejecución
-
➕ Operadores
-
+→ Añadir permisos -
-→ Quitar permisos -
=→ Establecer permisos exactos (sobrescribe)
✅ 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?
-
Propietario: lectura, escritura y ejecución (
rwx) -
Grupo: lectura y escritura (
rw-) -
Otros: solo lectura (
r--)
🛡️ Permisos Especiales en Linux
Linux tiene tres permisos especiales que se pueden aplicar sobre archivos o directorios:
-
🧷 Sticky Bit → En directorios: impide que otros usuarios borren archivos que no son suyos.
-
🧙♂️ SetUID → En archivos ejecutables: hace que se ejecuten con los permisos del propietario, no del usuario actual.
-
👥 SetGID → En archivos ejecutables o directorios: ejecutan con permisos del grupo, o heredan el grupo en el caso de 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.
- 👤 Creamos un archivo como usuario
unai:
sudo su unai
echo "secreto" > /compartido/archivo_de_unai.txt
chmod 400 /compartido/archivo_de_unai.txt
exit
-
chmod 400→ solo el propietario (unai) puede leer el archivo. -
Otros no pueden leer ni escribir en él
😱 Pero si otro usuario entra:
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(Set User ID) -
SGID(Set Group ID)
🔐 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?
- SUID permite que un usuario ejecute un programa con los privilegios del propietario del archivo. Esto es útil cuando un programa necesita acceder a recursos o realizar operaciones que normalmente solo están permitidas al propietario del archivo o a usuarios con mayores privilegios (como
root).
🧪 Ejemplo clásico:
ls -l /usr/bin/passwd
📥 Salida:

🔒 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
- 🔍 Buscar binarios con SUID:
find / -type f -perm -4000 2>/dev/null
⚠️ Si aparece /usr/bin/python3.11 como SUID:

😈 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.

👥 SGID – Ejecutar como el grupo del archivo (o herencia en directorios)
-
En archivos: el programa se ejecuta como el grupo del archivo.
-
En directorios: los nuevos archivos heredan el grupo del directorio.
⚙️ 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:
-
Usar puertos < 1024
-
Cambiar UIDs
-
Montar discos
… un binario debía ejecutarse como root. Pero esto representa un riesgo innecesario.
👉 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

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:

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:
-
🕵️ lsattr: Lista los atributos de los archivos. -
🛠️ chattr: Cambia (añade o elimina) los atributos.
🧠 Ú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: | |
![]() |
|
📛 *Intentar borrar archivo con +i: |
|
| 🛑 Resultado: | |
![]() |
🔠 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. |

