# Conceptos Clave
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:
sudo adduser juan su - juan
# Crear Usuarios
useradd — Crear usuario básico
sudo useradd -m ana # -m crea automáticamente /home/ana cat /etc/passwd # ver usuarios del sistema
useradd con todas las opciones
sudo useradd -m -c "Ana López" -s /bin/bash -g usuarios ana
| Opción | Descripción |
|---|---|
-m | Crea el directorio /home/ana automáticamente |
-c "Ana López" | Añade comentario (nombre completo) visible en /etc/passwd |
-s /bin/bash | Establece bash como shell de login |
-g usuarios | Asigna grupo primario (debe existir previamente) |
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
sudo passwd ana
useradd crea la cuenta pero no asigna contraseña. Hasta que no uses passwd, el usuario no puede loguearse.Cambiar shell con usermod
sudo usermod -s /bin/bash ana # cambiar shell a bash
Editar /etc/passwd directamente (avanzado)
/etc/passwd puede impedir que los usuarios inicien sesión. Usa siempre vipw para editarlo de forma segura.sudo vipw # bloquea el archivo mientras editas
Busca la línea de ana y cambia la última parte de /bin/sh a /bin/bash:
ana:x:1001:1001:,,,/home/ana:/bin/bash
Crear usuario y asignar contraseña en un solo paso
sudo useradd -m -s /bin/bash ana echo "ana:contraseña123" | sudo chpasswd
// Asignación de contraseña con sudo passwd ana
# Grupos
Crear grupo y añadir usuario
sudo groupadd marketing # crear grupo cat /etc/group # ver grupos del sistema
sudo usermod -aG marketing ana # añadir ana al grupo marketing
-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
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:
# 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
// Archivo secreto.txt con permisos 600 y propietario root
¿Por qué jose no puede entrar en /home/ana?
su - jose
cd /home/ana # → -bash: cd: ana: Permiso denegado
// 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
su - jose
sudo -i
cd /home/ana # funciona porque root ignora permisos
// Root accede a /home/ana sin restricciones
Dar acceso a jose al directorio de ana
sudo chmod 750 /home/ana # propietario y grupo pueden entrar sudo usermod -aG ana jose # añadir jose al grupo de ana
// Permiso 600 en secreto.txt — solo root puede leer
ana intenta leer el archivo con propietario root
su - ana
cat /home/ana/secreto.txt # → cat: /home/ana/secreto.txt: Permiso denegado
// Permiso denegado al intentar leer secreto.txt como ana
# chmod — Modificar Permisos
Notación simbólica
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én | Acción | Permiso |
|---|---|---|
u = user (propietario) | + añadir | r lectura |
g = group | - quitar | w escritura |
o = others | = establecer exacto | x ejecución |
a = all (todos) |
// Salida de ls -l mostrando permisos de archivos
# Notación Octal
chmod 755 script.sh # 7=rwx (propietario) · 5=r-x (grupo) · 5=r-x (otros)
Combinaciones más comunes
| Octal | Simbólico | Uso típico |
|---|---|---|
755 | rwxr-xr-x | Scripts y ejecutables públicos |
644 | rw-r--r-- | Archivos de configuración, documentos |
600 | rw------- | Archivos privados (SSH keys, secretos) |
700 | rwx------ | Directorios privados |
750 | rwxr-x--- | Dir. accesible por propietario y grupo |
# ls -l — Ver Permisos
ls -l
-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/
| Campo | Significado |
|---|---|
drwxr-xr-x | 10 caracteres de permisos: tipo + propietario + grupo + otros |
2 | Número de enlaces duros |
jose (1º) | Propietario del archivo/directorio |
jose (2º) | Grupo propietario |
4096 | Tamaño en bytes |
Sep 20 15:10 | Fecha y hora de última modificación |
mis_documentos/ | Nombre del archivo o directorio |
# find — Buscar por Permisos Especiales
Buscar archivos con bit SUID (4000)
sudo find / -perm /4000 2>/dev/null
| Parte | Significado |
|---|---|
| find / | Busca desde el directorio raíz |
| -perm /4000 | Filtra archivos con el bit SUID activo. Identifica binarios que se ejecutan con permisos de root |
| 2>/dev/null | Redirige el Error Estándar (stderr) a /dev/null, ocultando los mensajes "Permiso denegado" |
sudo find / -perm /2000 2>/dev/null # buscar SGID sudo find / -perm /1000 2>/dev/null # buscar Sticky Bit
# chown / chgrp — Cambiar Propietario
su - jose sudo -i cd /home/ana sudo chown ana secreto.txt
// chown ana secreto.txt — cambio de propietario
Antes y después
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
usuario:grupo.// ls -l tras cambiar propietario
Variantes de chown
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
// Resultado final: -rw------- 1 ana root secreto.txt
Desglose del resultado: -rw------- 1 ana root secreto.txt
| Campo | Valor | Significado práctico |
|---|---|---|
| Propietario (rw-) | ana | ana puede leer y escribir el archivo |
| Grupo (---) | root | Usuarios 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
visudo: bloquea el archivo y valida la sintaxis antes de guardar, evitando errores que bloquearían el acceso al sistema.sudo visudo
Dar acceso sudo a un usuario
# User privilege specification root ALL=(ALL:ALL) ALL ana ALL=(ALL:ALL) ALL
Dar acceso a un grupo completo
# El % indica que es un grupo %curso ALL=(ALL:ALL) ALL
Restricciones específicas
# 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.
/usr/bin/passwd./tmp.Combinación de bits especiales
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
[bits especiales][propietario][grupo][otros]. Ejemplo: 1777 → Sticky(1) + rwx(7) + rwx(7) + rwx(7).t vs T (y s vs S)
| Carácter | Significado |
|---|---|
t minúscula | Sticky Bit activo Y el campo "otros" tiene permiso de ejecución (x) |
T mayúscula | Sticky Bit activo PERO "otros" NO tiene permiso de ejecución |
s minúscula | SUID/SGID activo Y la terna afectada tiene permiso de ejecución |
S mayúscula | SUID/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).
| Permiso | Significado |
|---|---|
d | Es un directorio |
rwx | Permisos del propietario (root) |
rwx | Permisos del grupo (root) |
rwt | Permisos para otros — la t indica Sticky Bit activo |
# Ejercicios 1–4
- Crea un usuario
prueba1:sudo useradd -m prueba1 - Crea un grupo
curso:sudo groupadd curso - Añade
prueba1al grupocurso:sudo usermod -aG curso prueba1 - Comprueba:
id prueba1ygroups prueba1
- Crea el archivo:
nano ejemplo.sh→ escribeecho "Hola mundo" - Comprueba permisos:
ls -l ejemplo.sh - Asigna permisos de ejecución al propietario:
chmod u+x ejemplo.sh - Ejecútalo:
sudo ./ejemplo.sh
- Crea el archivo como root:
sudo touch notas.txt - Asigna propietario
anay grupocurso:sudo chown ana:curso notas.txt - Verifica:
ls -l notas.txt
- Añade
anaal grupo sudo:sudo usermod -aG sudo ana - Conéctate como ana:
su - ana - Prueba que funciona:
sudo whoami→ debe responderroot
# Ejercicio Integrador
juan en el área de marketing. Debe tener su directorio /home/juan, pertenecer al grupo marketing y poder usar sudo solo para apt.- Crear usuario:
sudo useradd -m -s /bin/bash juanysudo passwd juan - Crear grupo (si no existe) y añadir:
sudo groupadd marketing·sudo usermod -aG marketing juan - Configurar sudo restringido en
visudo: ver bloque abajo - Verificar: iniciar sesión como
juany ejecutarsudo apt update
# juan puede ejecutar solo apt y apt-get sin contraseña juan ALL=(ALL) NOPASSWD: /usr/bin/apt, /usr/bin/apt-get
| Parte | Significado |
|---|---|
juan | El 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 |