educación, informática y demás

2309 - Automatization Scripts, Ejercicios, Shell scripts

addUserWebDir.sh

Analiza el código y mejóralo, porque tiene un fallo

Esta es la salida de la ejecución del comando

Solución

El problema está en que el script crea un directorio cuyo nombre es web dentro de los directorios personales de los usuarios en los que este directorio no exista. La finalidad de este directorio será que el usuario en cuestión pueda utilizarlo de forma completa. Sin embargo, la configuración de permisos, propietario y grupo que se obtiene al crear el directorio web con este script no permitirá al usuario trabajar con dicho directorio: no le permite operaciones de escritura.

La solución pasaría por cambiar el propietario del directorio para que sea el usuario dentro de cuyo directorio personal hemos creado el directorio web.

La primera aproximación sería cambiar de propietario solo cuando creamos el directorio:

Esta opción es correcta, pero si ya existe el directorio y le hemos asignado como propietario a root, el propietario no cambiará.

Si queremos asegurarnos de que en todos los casos el propietario será el usuario, tendríamos que sacar el comando chown de la línea 22 fuera del if.

Versión 02 – Nombre del directorio por parámetro

Resulta que queremos que se pueda pasar el nombre del directorio a crear por parámetro obligatorio. Si no se pasa ningún parámetro, el script mostrará un mensaje de error y terminará.

Solución propuesta

Vamos a ejecutarlo

Ahora pasamos parámetro

Está bien, pero nos gustaría podemos comprobar que realmente existen los directorios que se deberían crear en cada uno de los directorios personales de los usuarios. Vamos a usar un ls -ld para mostrar esta información.

Ese es el único cambio que habría que hacer

Un nuevo script: addUserDirs.sh

Queremos crear un nuevo script basado en este que nos permita crear varios directorios, si no existen, dentro del directorio personal de cada uno de los usuarios del sistema.

Primero copiamos el script con el nuevo nombre addUserDirs.sh

El script recibirá una lista variable de nombres de directorios. Al terminar el script, cada usuario del sistema tendrá estos directorios dentro de su directorio personal con la configuración de permisos adecuada.

Pista

Partimos de un script que funciona. La novedad que nos piden es que recorramos la lista de parámetros. Para ello, tan solo consultando la ayuda del comando for, tendremos la información suficiente para hacerlo.

De esta forma, si queremos recorrer la lista de parámetros que se pasa a un script o a una funcion tan solo tendremos que utilizar for valor; do… done

Solución propuesta

Vamos a ejecutarlo a ver que pasa

Otro nuevo Script: mvUserDir.sh

Queremos crear un script que nos facilite cambiar de nombre o mover un directorio dentro de los directorios personales de todos los usuarios. Este script recibirá dos parámetros obligatorios, el nombre del directorio origen y el nombre del directorio destino.

Para cada usuario en el sistema, renombrará el directorio origen con el nuevo nombre de directorio destino dentro del directorio personal del usuario. Si el directorio origen no existe, creamos el directorio destino y lo preparamos para que pueda ser utilizado por el usuario.

Realiza las comprobaciones que estimes oportunas.

Solución propuesta

Hemos optado por simplificar el paso de parámetros a funciones y utilizar variables globales: userName, homeDir, srcName y dstName. También hemos usado una función con parámetro, para practicar con el paso de parámetros en caso necesario.

La ejecución sería la siguiente

Si el directorio existe, nos advertirá de ello.

Otro nuevo Script: disUserDir.sh

Queremos crear un script que nos permita «deshabilitar» un directorio dentro del directorio personal de un usuario concreto. No queremos borrar el contenido, tan solo queremos que el usuario pueda acceder pero solo para realizar operaciones de lectura.

El script recibirá dos parámetros obligatorios, el nombre del usuario y el nombre del directorio dentro de su directorio personal que al que ya no podrá acceder más que para realizar operaciones de lectura.

La finalidad del script es que el usuario pueda acceder al contenido del directorio, pero que no pueda crear ningún fichero nuevo ni modificar o eliminar los existentes.

Aquí tenemos dos opciones una versión simple o una más compleja, pero más completa, que se complementa con el siguiente script. Vamos a hacer la simple, y después haremos la compleja como ampliación cuando tengamos este script y el siguiente.

Soluciones propuestas

Esto tiene un problema de seguridad, puesto que el usuario si tiene ficheros dentro del directorio deshabilitado con permisos de acceso, podrá modificarlos o borrarlos. Tendríamos que cambiar los permisos para todos los ficheros

Otro problema, si cambiamos los permisos y más adelante queremos volver a habilitar el acceso, cada fichero puede tener unos permisos concretos que deberíamos poder restablecer. Complicado pero chulo.

Evolución del Script disUserDir.sh

Nos gustaría contar con la opción de deshabilitar el directorio cuyo nombre se pasa en el segundo parámetro para todos los usuarios del sistema en un momento dado. Para ello, hemos pensado que si se proporciona como nombre de usuario la cadena de texto «all» entonces deshabilitamos el directorio dirName para todos los usuarios del sistema.

Otro nuevo Script: enUserDir.sh

Queremos crear un script que nos permita «habilitar» un directorio dentro del directorio personal de un usuario concreto. El objetivo es permitir que el usuario pueda volver a acceder para realizar operaciones sobre el directorio que hemos deshabilitado previamente.

Dejar una respuesta