TP 1 – Gestión de Permisos y Personalización de Entorno Linux
Elementos de corrección para esta práctica están disponibles en el repositorio de ejercicios: 👉 module-13 – Correcciones
Objetivo general
Comprender, aplicar y probar los permisos Unix (chmod, chown, su) en un entorno multiusuario.
Aprender a personalizar un entorno de usuario con .bashrc.
Duración
1 semana
Entregable
- Un informe PDF o Word con capturas de pantalla, explicaciones y reflexiones
- Scripts o comandos utilizados (en el informe y en un archivo
.shsi corresponde)
Contexto
Usted es administrador de un servidor Linux utilizado por 4 colegas: Albert, Bernard, Claude y Danielle.
Debe:
- Crear los usuarios: Albert, Bernard, Claude y Danielle
- Preparar un espacio de trabajo común
- Asignar permisos específicos
- Probar las acciones esperadas
- Añadir un toque personal a su entorno con mensajes de bienvenida animados
PARTE 1 – Dar derechos de administrador al usuario eleve
Contexto
En esta práctica, usted trabaja principalmente con el usuario eleve. Es posible que este usuario ya haya sido creado durante la instalación de Ubuntu 24.04. Si no es así, debe crearlo manualmente.
Tarea
Crear el usuario eleve con la contraseña eleve
(si no se ha hecho ya durante la instalación de Ubuntu 24.04).
Luego, añada este usuario al grupo sudo para que pueda ejecutar comandos administrativos.
Comandos a completar
Comando 1.1 : ___________________________________________ # Crear el usuario eleve con la contraseña eleve (si es necesario)
Comando 1.2 : ___________________________________________ # Añadir el usuario eleve al grupo sudo
Comando 1.3 : ___________________________________________ # Abrir el archivo sudoers con la herramienta segura
Comando 1.4 : ___________________________________________ # Verificar o añadir la línea que autoriza a eleve a usar sudo
Comando 1.5 : ___________________________________________ # Probar un comando con sudo (ej: sudo ls /root)
Resultado esperado
- El usuario
eleveexiste y puede iniciar sesión con su contraseña - Puede ejecutar comandos con
sudo(requiere contraseña) - Ningún mensaje de error al ejecutar un comando
sudo
Capturas de pantalla requeridas
- Creación del usuario
eleve(si es necesario) - Adición al grupo sudo
- Contenido del archivo sudoers modificado o verificado
- Prueba exitosa de un comando con
sudo
PARTE 2 – Creación de usuarios y modificación de sus contraseñas
Contexto
Ahora está conectado como eleve o root, quienes tienen derechos sudo. Debe:
- Crear cuatro usuarios:
albert,bernard,claude,danielle - Definir una contraseña inicial al crearlos (anótela)
- Verificar que se crean sus directorios personales
- Probar la conexión con
su - - Modificar sus contraseñas desde su cuenta
eleve
Comandos a completar
Comando 2.1 : ___________________________________________ # Crear el usuario albert (indique la contraseña utilizada)
Comando 2.2 : ___________________________________________ # Crear el usuario bernard (contraseña a anotar)
Comando 2.3 : ___________________________________________ # Crear el usuario claude (contraseña a anotar)
Comando 2.4 : ___________________________________________ # Crear el usuario danielle (contraseña a anotar)
Comando 2.5 : ___________________________________________ # Mostrar los directorios en /home para verificar las creaciones
Comando 2.6 : ___________________________________________ # Conectarse con su - albert, luego volver a eleve
Comando 2.7 : ___________________________________________ # Modificar la contraseña del usuario albert desde eleve
Comando 2.8 : ___________________________________________ # Modificar la contraseña del usuario bernard desde eleve
Comando 2.9 : ___________________________________________ # Modificar la contraseña del usuario claude desde eleve
Comando 2.10 : __________________________________________ # Modificar la contraseña del usuario danielle desde eleve
Resultado esperado
- Los directorios de los usuarios aparecen en
/home su - albertpermite conectarse a su sesión- Todas las contraseñas han sido modificadas exitosamente desde
eleve
Capturas de pantalla requeridas
- Salida del comando
ls /home - Conexión exitosa a la sesión de
alberty regreso - Modificaciones de las contraseñas de los 4 usuarios
PARTE 3 – Añadir a Danielle y Claude a sudoers
Contexto
Está conectado con el usuario eleve (o root) que tiene derechos sudo.
Ahora debe otorgar derechos de administrador a Danielle y Claude, añadiéndolos al archivo sudoers.
Esto les permitirá ejecutar comandos críticos con sudo, como actualizaciones del sistema, modificaciones de cuentas de usuario o gestión de archivos del sistema.
Objetivos
- Añadir claude y danielle al archivo
sudoers - Verificar que ambos pueden ejecutar comandos con
sudo
Comandos a completar
Comando 3.1 : ___________________________________________ # Abrir el archivo sudoers con visudo
Comando 3.2 : ___________________________________________ # Añadir una línea autorizando a claude a ejecutar comandos sudo
Comando 3.3 : ___________________________________________ # Añadir una línea autorizando a danielle a ejecutar comandos sudo
Comando 3.4 : ___________________________________________ # Verificar que claude pertenece al grupo sudo O está listado en /etc/sudoers
Comando 3.5 : ___________________________________________ # Verificar que danielle pertenece al grupo sudo O está listada en /etc/sudoers
Comando 3.6 : ___________________________________________ # Conectarse con el usuario claude
Comando 3.7 : ___________________________________________ # Ejecutar un comando con sudo (ej: sudo whoami) para probar
Comando 3.8 : ___________________________________________ # Conectarse con el usuario danielle
Comando 3.9 : ___________________________________________ # Ejecutar un comando con sudo para probar
Resultado esperado
- Claude y Danielle figuran en el archivo
/etc/sudoers, o forman parte de un grupo (ej.sudo) que les otorga derechos de administración - Al probar un comando con
sudo, se les solicita su contraseña y el comando se ejecuta correctamente - No debe aparecer ningún mensaje de error relacionado con permisos insuficientes
Capturas de pantalla requeridas
- Visualización de las líneas añadidas en el archivo
sudoers - Ejecución exitosa de un comando con
sudopara Claude - Ejecución exitosa de un comando con
sudopara Danielle
PARTE 4 – Preparación de un directorio compartido
Contexto
Debe crear un directorio compartido ubicado en /home/shared_data/, con una estructura precisa de archivos y subcarpetas.
También deben crearse dos scripts .sh con un mensaje que se muestre al ejecutarlos.
Usuario esperado para esta parte
Esta parte debe realizarse como root o como usuario eleve con derechos sudo.
Por lo tanto, utilice el comando sudo delante de cada comando si está conectado como eleve.
Objetivos
- Crear la estructura completa en
/home/shared_data - Redactar el contenido de dos scripts simples
- Verificar la correcta creación de archivos y carpetas
Estructura esperada
/home/shared_data/
├── file1.txt
├── file2.txt
└── dossier1/
├── script1.sh
└── script2.sh
Contenido esperado para script1.sh
#!/bin/bash
echo "Bonjour depuis le script 1!"
Contenido esperado para script2.sh
#!/bin/bash
echo "Bonjour depuis le script 2!"
Comandos a completar
Comando 4.1 : ___________________________________________ # Crear la carpeta /home/shared_data
Comando 4.2 : ___________________________________________ # Crear el archivo file1.txt
Comando 4.3 : ___________________________________________ # Crear el archivo file2.txt
Comando 4.4 : ___________________________________________ # Crear la subcarpeta dossier1
Comando 4.5 : ___________________________________________ # Crear el archivo script1.sh en dossier1
Comando 4.6 : ___________________________________________ # Crear el archivo script2.sh en dossier1
Comando 4.7 : ___________________________________________ # Escribir el contenido en script1.sh
Comando 4.8 : ___________________________________________ # Escribir el contenido en script2.sh
Comando 4.9 : ___________________________________________ # Verificar toda la estructura con ls -R o tree
Resultado esperado
- El directorio
/home/shared_data/contiene dos archivos de texto y una subcarpetadossier1/ - La subcarpeta contiene dos scripts
.shcon el contenido correcto - El comando
ls -R(otree) refleja exactamente la estructura esperada
Capturas de pantalla requeridas
- Salida del comando
ls -R /home/shared_dataotree /home/shared_data - Visualización del contenido de
script1.shyscript2.shconcat
PARTE 5 – Asignación de permisos
Contexto
Ha creado una estructura de archivos compartida en /home/shared_data.
Ahora debe asignar propietarios y permisos precisos a cada elemento para garantizar un acceso controlado.
Usuario esperado
Esta parte debe realizarse como root o con el usuario eleve que tenga derechos sudo.
Todos los comandos de esta sección deben ejecutarse con los privilegios necesarios.
Objetivos
Asignar los propietarios y permisos siguientes:
| Archivo / Carpeta | Propietario | Permisos esperados |
|---|---|---|
/home/shared_data/file1.txt | albert | Lectura/escritura solo para él |
/home/shared_data/file2.txt | bernard | Lectura/escritura solo para él |
/home/shared_data/dossier1/script1.sh | bernard | Ejecutable solo por Bernard |
/home/shared_data/dossier1/script2.sh | claude | Modificable (lectura/escritura) pero no ejecutable |
/home/shared_data/ | danielle | Control total sobre toda la carpeta (acceso total) |
Comandos a completar
Comando 5.1 : ___________________________________________ # Cambiar el propietario de file1.txt a albert
Comando 5.2 : ___________________________________________ # Aplicar permisos de lectura/escritura solo para albert
Comando 5.3 : ___________________________________________ # Cambiar el propietario de file2.txt a bernard
Comando 5.4 : ___________________________________________ # Aplicar permisos de lectura/escritura solo para bernard
Comando 5.5 : ___________________________________________ # Cambiar el propietario de script1.sh a bernard
Comando 5.6 : ___________________________________________ # Aplicar permisos de ejecución solo para el propietario
Comando 5.7 : ___________________________________________ # Cambiar el propietario de script2.sh a claude
Comando 5.8 : ___________________________________________ # Aplicar permisos de lectura/escritura sin ejecución
Comando 5.9 : ___________________________________________ # Cambiar recursivamente el propietario de la carpeta shared_data a danielle
Comando 5.10 : __________________________________________ # Dar a danielle todos los derechos sobre todos los archivos de la carpeta
Comando 5.11 : __________________________________________ # Verificar los permisos con ls -l /home/shared_data y subcarpetas
Resultado esperado
- Cada archivo tiene el propietario asignado correctamente
- Los permisos (
r,w,x) se aplican exactamente como se solicita - El comando
ls -len cada archivo debe mostrar estos derechos
Capturas de pantalla requeridas
- Salida del comando
ls -l /home/shared_data/ - Salida del comando
ls -l /home/shared_data/dossier1/ - Cualquier otra prueba útil que considere pertinente
PARTE 6 – Tabla de pruebas de acceso por usuario
Contexto
Los permisos han sido asignados. Ahora es momento de probar los accesos de cada usuario sobre los archivos y scripts del directorio /home/shared_data.
Para cada prueba, debe conectarse temporalmente con un usuario mediante el comando:
su -c 'comando a ejecutar' nombre_usuario
Objetivos
- Verificar que los derechos de acceso funcionan como se espera
- Documentar los resultados observados para cada prueba
- Identificar los éxitos o errores de permiso
Comandos a completar
Así que para cada usuario, pruebe las siguientes acciones con su nombre_usuario -c 'comando':
Comando 6.1 : ___________________________________________ # Albert intenta leer file1.txt
Comando 6.2 : ___________________________________________ # Albert intenta escribir en file1.txt
Comando 6.3 : ___________________________________________ # Albert intenta escribir en file2.txt
Comando 6.4 : ___________________________________________ # Bernard escribe en file2.txt
Comando 6.5 : ___________________________________________ # Bernard ejecuta script1.sh
Comando 6.6 : ___________________________________________ # Claude modifica script2.sh (ej: añade una línea)
Comando 6.7 : ___________________________________________ # Claude intenta ejecutar script1.sh
Comando 6.8 : ___________________________________________ # Danielle modifica file1.txt
Comando 6.9 : ___________________________________________ # Danielle modifica script2.sh
Resultado esperado para cada comando
| Prueba | Resultado Esperado |
|---|---|
| Albert lee file1.txt | Éxito |
| Albert escribe en file1.txt | Éxito |
| Albert escribe en file2.txt | Fallo (permiso denegado) |
| Bernard escribe en file2.txt | Éxito |
| Bernard ejecuta script1.sh | Éxito |
| Claude modifica script2.sh | Éxito |
| Claude ejecuta script1.sh | Fallo (permiso denegado) |
| Danielle modifica file1.txt | Éxito |
| Danielle modifica script2.sh | Éxito |
Capturas de pantalla requeridas
- Ejecución de cada prueba con
su -c - Mensajes de éxito o error mostrados por el sistema
- (Por ejemplo:
Permission deniedo visualización del contenido generado)
PARTE 7 – Personalización del entorno .bashrc
Contexto
Cada usuario de su sistema debe tener un mensaje personalizado o un efecto visual que se muestre al abrir una sesión (conexión con su - nombre_usuario).
Esto se realiza modificando el archivo .bashrc presente en el directorio personal de cada usuario.
Va a modificar este archivo para cada uno de los 4 usuarios creados.
Objetivos
- Añadir contenido personalizado en el
.bashrcde cada usuario - Utilizar al menos uno de los siguientes comandos:
figlet(visualización ASCII estilizada)cowsay(mensaje en un bocadillo con vaca)fortune(cita aleatoria)echo(mensaje simple)
- Verificar que funciona al iniciar sesión
Comandos a completar
Comando 7.1 : ___________________________________________ # Añadir un mensaje personalizado en el .bashrc de albert
Comando 7.2 : ___________________________________________ # Añadir un mensaje personalizado en el .bashrc de bernard
Comando 7.3 : ___________________________________________ # Añadir un mensaje personalizado en el .bashrc de claude
Comando 7.4 : ___________________________________________ # Añadir un mensaje personalizado en el .bashrc de danielle
Comando 7.5 : ___________________________________________ # Probar la visualización del mensaje para albert
Comando 7.6 : ___________________________________________ # Probar la visualización del mensaje para bernard
Comando 7.7 : ___________________________________________ # Probar la visualización del mensaje para claude
Comando 7.8 : ___________________________________________ # Probar la visualización del mensaje para danielle
Resultado esperado
- Cuando un usuario se conecta con
su - nombre, aparece automáticamente un mensaje (ASCII, cita, mensaje o efecto visual) - Los mensajes son diferentes para cada usuario
- Los efectos son visibles directamente en el terminal tras la conexión
Capturas de pantalla requeridas
- Visualización del mensaje
.bashrcal iniciar sesión para cada usuario - Contenido de cada archivo
.bashrcmodificado (cat /home/nombre/.bashrconano)
Ejemplo autorizado (solo para Albert)
echo 'figlet "Bienvenue Albert!"' >> /home/albert/.bashrc
Para los demás, debe inventar algo único.
PARTE 8 – Preguntas de reflexión finales
Contexto
Ahora ha:
- Creado y configurado varios usuarios
- Gestionado archivos y permisos específicos
- Modificado entornos de usuario mediante
.bashrc - Verificado los accesos y ejecutado scripts según los derechos
Es momento de tomar perspectiva y reflexionar sobre los impactos, riesgos y buenas prácticas relacionados con lo que ha implementado.
Instrucciones
Responda seriamente a las siguientes preguntas. Debe argumentar sus respuestas. Un copiar-pegar de comando no es suficiente. Utilice ejemplos cuando sea pertinente.
Su respuesta puede ser escrita directamente bajo cada pregunta en el informe a entregar.
Preguntas a completar
1. ¿Cuál es la importancia de configurar correctamente los permisos en un sistema Linux multiusuario?
(Explique qué podría ocurrir si todos los archivos tuvieran permisos 777.)
Respuesta:
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
2. ¿Cuál es la diferencia entre los permisos de ejecución (x) y los permisos de lectura (r)? Dé un ejemplo concreto.
Respuesta:
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
3. ¿Qué comando permite cambiar los permisos? ¿Qué comando permite cambiar el propietario? Dé un ejemplo concreto de uso correcto de cada uno.
Respuesta:
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
4. ¿Cuál es la diferencia entre pertenecer a un grupo (sudo) y estar explícitamente listado en el archivo /etc/sudoers?
Respuesta:
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
5. ¿Por qué no se recomienda dar derechos sudo a todos los usuarios de un sistema? ¿Cuáles serían los riesgos?
Respuesta:
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
6. ¿Qué ocurriría si un usuario pudiera modificar un script que es ejecutado por un administrador? Dé un ejemplo de vulnerabilidad.
Respuesta:
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
7. ¿Cuál es la utilidad de personalizar el .bashrc? ¿Se puede usar como herramienta de ingeniería social o de seguridad?
Respuesta:
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
PARTE 9 – Variables de entorno
Contexto
Va a realizar una serie de pruebas para comprender:
- Cómo funcionan las variables locales y exportadas
- Cuál es su visibilidad entre usuarios
- Cómo hacer una variable persistente para un usuario específico
- Cómo compartir una variable (o no) entre varios usuarios
Reglas a seguir
- Trabaje cada vez con un usuario diferente (Albert, Bernard, Claude, Danielle)
- Modifique solo su propio entorno
- No haga trampa copiando un
.bashrcde un usuario a otro — cada usuario debe ser tratado de forma independiente
Objetivos
- Definir variables para cada usuario
- Probar su visibilidad en un subshell
- Verificar que otro usuario no puede ver la variable
- Añadir una variable permanente mediante el
.bashrcde cada usuario
Escenario 1 – Variables locales y exportadas
Pasos a seguir para cada usuario
(Comience por Albert)
Comando B1.1 : ___________________________________________ # Conectarse con su - albert
Comando B1.2 : ___________________________________________ # Crear una variable local nom="Albert"
Comando B1.3 : ___________________________________________ # Mostrar la variable
Comando B1.4 : ___________________________________________ # Lanzar un subshell con bash
Comando B1.5 : ___________________________________________ # Verificar si la variable sigue visible
Comando B1.6 : ___________________________________________ # Exportar la variable nom
Comando B1.7 : ___________________________________________ # Lanzar un nuevo shell
Comando B1.8 : ___________________________________________ # Verificar que la variable es visible en este subshell
Comando B1.9 : ___________________________________________ # Salir y volver a eleve
Repita estos pasos para Bernard (nom="Bernard"), Claude (nom="Claude") y Danielle (nom="Danielle").
Resultado esperado
- Las variables no exportadas desaparecen en un subshell
- Las variables exportadas persisten en un subshell
- Cada usuario solo puede acceder a sus propias variables
Escenario 2 – Variables permanentes mediante .bashrc
Pasos a seguir (ejemplo con Claude)
Comando B2.1 : ___________________________________________ # Conectarse con su - claude
Comando B2.2 : ___________________________________________ # Abrir el archivo ~/.bashrc
Comando B2.3 : ___________________________________________ # Añadir export PROYECTO_CLAUDE="Proyecto Sistema"
Comando B2.4 : ___________________________________________ # Recargar ~/.bashrc con source
Comando B2.5 : ___________________________________________ # Verificar que la variable está bien definida
Comando B2.6 : ___________________________________________ # Cerrar la sesión y volver a conectarse para probar la persistencia
Comando B2.7 : ___________________________________________ # Volver a hacer echo $PROYECTO_CLAUDE
Repita el mismo proceso con:
PROYECTO_ALBERT="TP Seguridad"para AlbertPROYECTO_BERNARD="TP Scripts"para BernardPROYECTO_DANIELLE="TP Admin"para Danielle
Resultado esperado
- Cada usuario posee una variable permanente visible al iniciar sesión
- Estas variables solo son visibles para su usuario
- El comando
echo $PROYECTO_Xdevuelve el valor correcto tras reiniciar
Preguntas de reflexión para redactar en su informe
1. ¿Qué diferencia observa entre una variable exportada en el terminal y una variable añadida en .bashrc?
...............................................................................................................................
2. ¿Es posible que Bernard acceda a una variable definida por Albert? ¿Por qué?
...............................................................................................................................
3. ¿Qué método usaría si quisiera compartir una misma variable entre todos los usuarios? (Pista: /etc/profile)
...............................................................................................................................
4. ¿Se puede eliminar una variable exportada? ¿Cómo?
...............................................................................................................................
5. ¿A qué debe prestar atención al modificar .bashrc? Dé un ejemplo de error potencial.
...............................................................................................................................
PARTE 10 – Alcance de las variables entre usuarios
Contexto
Va a probar si una variable definida (local o exportada) por Albert es accesible por los demás usuarios (Bernard, Claude, Danielle).
Esto le permitirá comprender los límites de alcance de las variables en un sistema Linux multiusuario.
Objetivos
- Definir una variable exportada con un usuario
- Conectarse con otro usuario
- Probar el alcance de la variable
- Comprender por qué no es visible
- Encontrar el método correcto para hacerla visible para todos
Pasos a seguir
Comando B1.1 : ___________________________________________ # Conectarse con su - albert
Comando B1.2 : ___________________________________________ # Crear una variable ville=Montreal
Comando B1.3 : ___________________________________________ # Exportar la variable ville
Comando B1.4 : ___________________________________________ # Verificar que está bien exportada (echo $ville)
Comando B1.5 : ___________________________________________ # Salir de la sesión albert (exit)
Comando B1.6 : ___________________________________________ # Conectarse con su - bernard
Comando B1.7 : ___________________________________________ # Intentar mostrar la variable $ville
Resultado esperado
- La variable
villeexiste solo para Albert, incluso si ha sido exportada - Para Bernard (o cualquier otro usuario), la variable no es visible
Pregunta para redactar en su informe
1. ¿Por qué la variable exportada por Albert no es visible para Bernard?
...............................................................................................................................
2. ¿Cómo hacer para que una variable sea accesible para todos los usuarios automáticamente?
(Pista: ¿dónde habría que escribir export ville=Montreal para que se cargue para todos los usuarios?)
...............................................................................................................................
Extensión opcional (bonus avanzado – 2 puntos adicionales)
Encuentre una manera de definir una variable común a todos los usuarios, sin tener que redeclararla para cada uno.
Indique el archivo de sistema a modificar y haga una demostración con Albert, Bernard o Danielle.
Tabla resumen – Alcance de las variables en un sistema Linux
| Ubicación / Método | ¿Visible para el usuario actual? | ¿Visible en un subshell? | ¿Visible para otros usuarios? | ¿Persiste tras cerrar sesión? |
|---|---|---|---|---|
ville=Montreal | ✅ | ❌ | ❌ | ❌ |
export ville=Montreal | ✅ | ✅ | ❌ | ❌ |
Añadido en ~/.bashrc | ✅ | ✅ | ❌ | ✅ (solo para ese usuario) |
Añadido en /etc/profile o /etc/environment | ✅ para todos | ✅ para todos | ✅ | ✅ |
Conclusión para insertar en el informe
- ¿Una variable definida en el terminal es local al shell actual? ¿Verdadero o falso?
- ¿Una variable exportada es heredada por los subshells, pero nunca por otros usuarios? ¿Verdadero o falso?
- Para hacer una variable permanente, ¿hay que colocarla en un archivo como
.bashrc? ¿Verdadero o falso? - Para que sea accesible para todos los usuarios, ¿hay que escribirla en un archivo de sistema compartido como
/etc/profile, con precaución (requiere derechos root)? ¿Verdadero o falso?
PARTE Bonus – Preguntas de reflexión adicionales
1. ¿Qué diferencia hay entre chmod a+x y chmod 755?
...............................................................................................................................
2. ¿Por qué restringir los derechos de ejecución a ciertos usuarios?
...............................................................................................................................
3. ¿Qué ocurre si un archivo tiene derechos 777 en un entorno sensible?
...............................................................................................................................
4. ¿Para qué sirve el sticky bit en un directorio como /tmp?
...............................................................................................................................
5. ¿Cómo evitar que un usuario se convierta accidentalmente en propietario de un archivo crítico?
...............................................................................................................................
TP creado el: Diciembre 2024