Ghost AcademySecLearn// Seguridad Informática
🐧 Linux · Administración de sistemas
Usuarios y Permisos
en Linux

Guía completa de creación y gestión de usuarios, grupos, permisos de archivos, chown, sudo y bits especiales (SUID, SGID, Sticky Bit).

useradd usermod groupadd chmod chown ls -l sudo visudo SUID · SGID · Sticky

# Conceptos Clave

👤
Usuarios
Cada persona o proceso en el sistema necesita una cuenta de usuario para operar.
👥
Grupos
Conjunto de usuarios. Útil para compartir permisos de forma centralizada.
🔒
Permisos
Controlan qué operaciones (lectura/escritura/ejecución) puede hacer quién sobre cada archivo.
📁
Propietario
Cada archivo pertenece a un usuario y a un grupo. Define quién tiene control.
⚡
sudo
Permite a un usuario ejecutar comandos con privilegios de root (administrador).

El comando principal es useradd, pero se recomienda usar adduser en sistemas basados en Debian/Ubuntu, ya que es una envoltura que realiza varias tareas automáticamente:

bash
sudo adduser juan
su - juan

# Crear Usuarios

useradd — Crear usuario básico

bash
sudo useradd -m ana       # -m crea automáticamente /home/ana
cat /etc/passwd           # ver usuarios del sistema

useradd con todas las opciones

bash
sudo useradd -m -c "Ana López" -s /bin/bash -g usuarios ana
OpciónDescripción
-mCrea el directorio /home/ana automáticamente
-c "Ana López"Añade comentario (nombre completo) visible en /etc/passwd
-s /bin/bashEstablece bash como shell de login
-g usuariosAsigna grupo primario (debe existir previamente)
ℹ️ Shell por defecto en Ubuntu: Con useradd -m ana sin -s, el shell por defecto suele ser /bin/sh (que apunta a dash), no /bin/bash. Si luego ejecutas getent passwd ana verás: ana:x:1001:1001::/home/ana:/bin/sh

# Shell y Contraseña

Asignar contraseña

bash
sudo passwd ana
✅ Importante: useradd crea la cuenta pero no asigna contraseña. Hasta que no uses passwd, el usuario no puede loguearse.

Cambiar shell con usermod

bash
sudo usermod -s /bin/bash ana   # cambiar shell a bash

Editar /etc/passwd directamente (avanzado)

⚠️ Advertencia: Cualquier error de sintaxis en /etc/passwd puede impedir que los usuarios inicien sesión. Usa siempre vipw para editarlo de forma segura.
bash
sudo vipw    # bloquea el archivo mientras editas

Busca la línea de ana y cambia la última parte de /bin/sh a /bin/bash:

passwd entry
ana:x:1001:1001:,,,/home/ana:/bin/bash

Crear usuario y asignar contraseña en un solo paso

bash
sudo useradd -m -s /bin/bash ana
echo "ana:contraseña123" | sudo chpasswd
image1.png

// Asignación de contraseña con sudo passwd ana

# Grupos

Crear grupo y añadir usuario

bash
sudo groupadd marketing    # crear grupo
cat /etc/group             # ver grupos del sistema
bash
sudo usermod -aG marketing ana   # añadir ana al grupo marketing
⚠️ La opción -aG es crítica: Significa "append to group". Si solo usas -G sin la -a, quitarás al usuario de todos sus otros grupos y solo lo dejarás en el nuevo.

Verificar membresía

bash
id prueba1
groups prueba1

# Permisos de Directorios

Vamos a crear un archivo en /home/ana que el propio usuario ana no pueda leer, jugando con permisos y propietario:

bash
# 1. Crear el archivo como root
sudo sh -c 'echo "contenido secreto" > /home/ana/secreto.txt'

# 2. Cambiar propietario a root (no a ana)
sudo chown root:root /home/ana/secreto.txt

# 3. Permisos solo para root
sudo chmod 600 /home/ana/secreto.txt
image2.png

// Archivo secreto.txt con permisos 600 y propietario root

¿Por qué jose no puede entrar en /home/ana?

bash
su - jose
cd /home/ana   # → -bash: cd: ana: Permiso denegado
image3.png

// Error: Permiso denegado al intentar acceder a /home/ana

Cuando useradd -m crea el directorio, lo genera con permisos drwx------: solo el propietario puede leer, escribir y entrar. Ni siquiera otros usuarios normales pueden acceder (solo root lo ignora).

Entrar como root

bash
su - jose
sudo -i
cd /home/ana    # funciona porque root ignora permisos
image4.png

// Root accede a /home/ana sin restricciones

Dar acceso a jose al directorio de ana

bash
sudo chmod 750 /home/ana         # propietario y grupo pueden entrar
sudo usermod -aG ana jose        # añadir jose al grupo de ana
image5.png

// Permiso 600 en secreto.txt — solo root puede leer

ana intenta leer el archivo con propietario root

bash
su - ana
cat /home/ana/secreto.txt   # → cat: /home/ana/secreto.txt: Permiso denegado
image6.png

// Permiso denegado al intentar leer secreto.txt como ana

# chmod — Modificar Permisos

Notación simbólica

bash
chmod u+x script.sh      # dar ejecución al propietario (user)
chmod g+w archivo.txt    # dar escritura al grupo
chmod o-r archivo.txt    # quitar lectura a otros

Referencia de símbolos

QuiénAcciónPermiso
u = user (propietario)+ añadirr lectura
g = group- quitarw escritura
o = others= establecer exactox ejecución
a = all (todos)
image7.png

// Salida de ls -l mostrando permisos de archivos

# Notación Octal

bash
chmod 755 script.sh   # 7=rwx (propietario) · 5=r-x (grupo) · 5=r-x (otros)
7
rwx
leer + escribir + ejecutar
6
rw-
leer + escribir
5
r-x
leer + ejecutar
4
r--
solo lectura
0
---
sin permisos

Combinaciones más comunes

OctalSimbólicoUso típico
755rwxr-xr-xScripts y ejecutables públicos
644rw-r--r--Archivos de configuración, documentos
600rw-------Archivos privados (SSH keys, secretos)
700rwx------Directorios privados
750rwxr-x---Dir. accesible por propietario y grupo

# ls -l — Ver Permisos

bash
ls -l
output
-rw-rw-r-- 1 jose jose 1245 Oct 8 09:30 archivo.txt
drwxr-xr-x 2 jose jose 4096 Sep 20 15:10 mis_documentos/
Anatomía de los permisos
drwxr-xr-x 2 jose jose 4096 mis_documentos/
Propietario (u)
rwx — leer, escribir, ejecutar
Grupo (g)
r-x — leer, ejecutar
Otros (o)
r-x — leer, ejecutar
d = directorio  |  - = archivo regular  |  l = enlace simbólico
CampoSignificado
drwxr-xr-x10 caracteres de permisos: tipo + propietario + grupo + otros
2Número de enlaces duros
jose (1º)Propietario del archivo/directorio
jose (2º)Grupo propietario
4096Tamaño en bytes
Sep 20 15:10Fecha y hora de última modificación
mis_documentos/Nombre del archivo o directorio

# find — Buscar por Permisos Especiales

Buscar archivos con bit SUID (4000)

bash
sudo find / -perm /4000 2>/dev/null
ParteSignificado
find /Busca desde el directorio raíz
-perm /4000Filtra archivos con el bit SUID activo. Identifica binarios que se ejecutan con permisos de root
2>/dev/nullRedirige el Error Estándar (stderr) a /dev/null, ocultando los mensajes "Permiso denegado"
bash
sudo find / -perm /2000 2>/dev/null   # buscar SGID
sudo find / -perm /1000 2>/dev/null   # buscar Sticky Bit

# chown / chgrp — Cambiar Propietario

bash
su - jose
sudo -i
cd /home/ana
sudo chown ana secreto.txt
image8.png

// chown ana secreto.txt — cambio de propietario

Antes y después

output
Antes:  -rw-r--r-- 1 root root 42 sep 30 11:20 archivo.txt
Después: -rw-r--r-- 1 ana  root 42 sep 30 11:20 archivo.txt
ℹ️ El grupo no cambia a menos que lo indiques explícitamente con la sintaxis usuario:grupo.
image9.png

// ls -l tras cambiar propietario

Variantes de chown

bash
sudo chown ana:usuarios archivo.txt    # cambiar usuario y grupo
sudo chown -R ana:usuarios /home/ana   # recursivo (carpetas enteras)
sudo chgrp marketing secreto.txt       # cambiar solo el grupo
sudo chown ana:marketing secreto.txt   # cambiar ambos
image10.png

// Resultado final: -rw------- 1 ana root secreto.txt

Desglose del resultado: -rw------- 1 ana root secreto.txt

CampoValorSignificado práctico
Propietario (rw-)anaana puede leer y escribir el archivo
Grupo (---)rootUsuarios del grupo root: sin permisos
Otros (---)—El resto: tampoco tienen permisos

Los permisos efectivos se comprueban primero en el propietario: ana tiene rw, así que ahora sí puede leer el archivo aunque el grupo sea root.

# Configurar sudoers

⚠️ Nunca edites /etc/sudoers directamente. Usa siempre visudo: bloquea el archivo y valida la sintaxis antes de guardar, evitando errores que bloquearían el acceso al sistema.
bash
sudo visudo

Dar acceso sudo a un usuario

/etc/sudoers
# User privilege specification
root  ALL=(ALL:ALL) ALL
ana   ALL=(ALL:ALL) ALL

Dar acceso a un grupo completo

/etc/sudoers
# El % indica que es un grupo
%curso  ALL=(ALL:ALL) ALL

Restricciones específicas

/etc/sudoers
# Solo permitir reinicio
ana  ALL=(ALL) /sbin/reboot

# Permitir sin pedir contraseña
ana  ALL=(ALL) NOPASSWD: ALL

# Solo apt y apt-get (ejercicio integrador)
juan ALL=(ALL) NOPASSWD: /usr/bin/apt, /usr/bin/apt-get

# Bits de Permisos Especiales

Además del permiso especial 4000 (SetUID), existen dos bits más importantes que se usan para seguridad y gestión de acceso colaborativo.

4000
SetUID (SUID)
En ls -l: s en posición del propietario → rwsr-xr-x
Un binario con SUID se ejecuta con los permisos del propietario del archivo (generalmente root), no del usuario que lo ejecuta. Ejemplo: /usr/bin/passwd.
2000
SetGID (SGID)
En ls -l: s en posición del grupo → rwxrwsr-x
En archivos: se ejecuta con permisos del grupo propietario. En directorios: los nuevos archivos heredan el grupo del directorio padre (ideal para carpetas compartidas de equipo).
1000
Sticky Bit
En ls -l: t en posición de otros → drwxrwxrwt
En directorios: cualquier usuario puede crear archivos, pero solo el propietario o root puede borrar o renombrar sus propios archivos. Ejemplo clásico: /tmp.

Combinación de bits especiales

bash
chmod 1777 /mi/directorio/compartido   # Sticky Bit + rwxrwxrwx
# resultado en ls -l: drwxrwxrwt

chmod 4755 /usr/bin/miprograma   # SUID + rwxr-xr-x → rwsr-xr-x
chmod 2755 /carpeta/equipo       # SGID en directorio
ℹ️ Cuatro dígitos octales: Un permiso completo tiene el formato [bits especiales][propietario][grupo][otros]. Ejemplo: 1777 → Sticky(1) + rwx(7) + rwx(7) + rwx(7).

t vs T (y s vs S)

CarácterSignificado
t minúsculaSticky Bit activo Y el campo "otros" tiene permiso de ejecución (x)
T mayúsculaSticky Bit activo PERO "otros" NO tiene permiso de ejecución
s minúsculaSUID/SGID activo Y la terna afectada tiene permiso de ejecución
S mayúsculaSUID/SGID activo PERO la terna afectada NO tiene permiso de ejecución

# Sticky Bit en /tmp — drwxrwxrwt

La t al final de los permisos en /tmp (drwxrwxrwt) significa que el Sticky Bit está activado. Es un permiso de seguridad crucial en entornos multiusuario.

¿Por qué /tmp necesita el Sticky Bit?

El directorio /tmp se usa para archivos temporales que pueden ser creados por cualquier usuario. Sin el Sticky Bit, cualquier usuario podría borrar o renombrar archivos de otros usuarios (porque tienen permisos de escritura w en el directorio).

PermisoSignificado
dEs un directorio
rwxPermisos del propietario (root)
rwxPermisos del grupo (root)
rwtPermisos para otros — la t indica Sticky Bit activo
✅ Efecto del Sticky Bit: Cualquier usuario puede crear archivos en el directorio, pero solo el propietario del archivo o root pueden renombrarlo, moverlo o borrarlo. Protege los archivos temporales de un usuario frente a otros.

# Ejercicios 1–4

🏋️ Ejercicio 1 — Usuarios y grupos
  1. Crea un usuario prueba1: sudo useradd -m prueba1
  2. Crea un grupo curso: sudo groupadd curso
  3. Añade prueba1 al grupo curso: sudo usermod -aG curso prueba1
  4. Comprueba: id prueba1 y groups prueba1
🏋️ Ejercicio 2 — Permisos
  1. Crea el archivo: nano ejemplo.sh → escribe echo "Hola mundo"
  2. Comprueba permisos: ls -l ejemplo.sh
  3. Asigna permisos de ejecución al propietario: chmod u+x ejemplo.sh
  4. Ejecútalo: sudo ./ejemplo.sh
🏋️ Ejercicio 3 — Propietario
  1. Crea el archivo como root: sudo touch notas.txt
  2. Asigna propietario ana y grupo curso: sudo chown ana:curso notas.txt
  3. Verifica: ls -l notas.txt
🏋️ Ejercicio 4 — sudo
  1. Añade ana al grupo sudo: sudo usermod -aG sudo ana
  2. Conéctate como ana: su - ana
  3. Prueba que funciona: sudo whoami → debe responder root

# Ejercicio Integrador

Escenario: La empresa necesita un usuario juan en el área de marketing. Debe tener su directorio /home/juan, pertenecer al grupo marketing y poder usar sudo solo para apt.
🏢 Solución paso a paso
  1. Crear usuario: sudo useradd -m -s /bin/bash juan y sudo passwd juan
  2. Crear grupo (si no existe) y añadir: sudo groupadd marketing · sudo usermod -aG marketing juan
  3. Configurar sudo restringido en visudo: ver bloque abajo
  4. Verificar: iniciar sesión como juan y ejecutar sudo apt update
/etc/sudoers — entrada para juan
# juan puede ejecutar solo apt y apt-get sin contraseña
juan ALL=(ALL) NOPASSWD: /usr/bin/apt, /usr/bin/apt-get
ParteSignificado
juanEl usuario al que le das permisos
ALL=(ALL)Puede ejecutar como cualquier usuario (root incluido)
NOPASSWD:Opcional: evita pedir contraseña cada vez
/usr/bin/apt, /usr/bin/apt-getÚnicos comandos permitidos con sudo

# Cheatsheet Rápido

👤 Usuarios y Grupos
sudo useradd -m usuariocrear usuario
sudo passwd usuarioasignar contraseña
sudo groupadd grupocrear grupo
sudo usermod -aG grupo userañadir a grupo
id usuariover uid/gid/grupos
groups usuariolistar grupos
🔒 Permisos
ls -lver permisos
chmod 755 archivonotación octal
chmod u+x archivonotación simbólica
chown user:group archivocambiar propietario
find / -perm /4000buscar SUID
chmod 1777 /dirSticky Bit
⚡ Sudo
sudo visudoeditar sudoers
user ALL=(ALL:ALL) ALLsudo total
%grupo ALL=(ALL:ALL) ALLsudo a grupo
user ALL=(ALL) NOPASSWD: ALLsin contraseña
user ALL=(ALL) /cmdsolo ese comando
sudo usermod -aG sudo userañadir al grupo sudo