Saltar al contenido principal

TP 1 – Gestión de Permisos y Personalización de Entorno Linux

Elementos de corrección

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 .sh si 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 eleve existe 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​

  1. Creación del usuario eleve (si es necesario)
  2. Adición al grupo sudo
  3. Contenido del archivo sudoers modificado o verificado
  4. 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 - albert permite conectarse a su sesión
  • Todas las contraseñas han sido modificadas exitosamente desde eleve

Capturas de pantalla requeridas​

  1. Salida del comando ls /home
  2. Conexión exitosa a la sesión de albert y regreso
  3. 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​

  1. Visualización de las líneas añadidas en el archivo sudoers
  2. Ejecución exitosa de un comando con sudo para Claude
  3. Ejecución exitosa de un comando con sudo para 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 subcarpeta dossier1/
  • La subcarpeta contiene dos scripts .sh con el contenido correcto
  • El comando ls -R (o tree) refleja exactamente la estructura esperada

Capturas de pantalla requeridas​

  1. Salida del comando ls -R /home/shared_data o tree /home/shared_data
  2. Visualización del contenido de script1.sh y script2.sh con cat

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 / CarpetaPropietarioPermisos esperados
/home/shared_data/file1.txtalbertLectura/escritura solo para él
/home/shared_data/file2.txtbernardLectura/escritura solo para él
/home/shared_data/dossier1/script1.shbernardEjecutable solo por Bernard
/home/shared_data/dossier1/script2.shclaudeModificable (lectura/escritura) pero no ejecutable
/home/shared_data/danielleControl 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 -l en cada archivo debe mostrar estos derechos

Capturas de pantalla requeridas​

  1. Salida del comando ls -l /home/shared_data/
  2. Salida del comando ls -l /home/shared_data/dossier1/
  3. 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​

PruebaResultado Esperado
Albert lee file1.txtÉxito
Albert escribe en file1.txtÉxito
Albert escribe en file2.txtFallo (permiso denegado)
Bernard escribe en file2.txtÉxito
Bernard ejecuta script1.shÉxito
Claude modifica script2.shÉxito
Claude ejecuta script1.shFallo (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 denied o 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 .bashrc de 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​

  1. Visualización del mensaje .bashrc al iniciar sesión para cada usuario
  2. Contenido de cada archivo .bashrc modificado (cat /home/nombre/.bashrc o nano)

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 .bashrc de 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 .bashrc de 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 Albert
  • PROYECTO_BERNARD="TP Scripts" para Bernard
  • PROYECTO_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_X devuelve 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 ville existe 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