Administración de Sistemas

706 views

Published on

Es la práctica 1 en centos sobre la asignatura de administración de sistemas.

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Administración de Sistemas

  1. 1. Administración de Sistemas Gestión de Usuarios : Linux I TAHISA M. D ÍAZ D ÍAZ M ARÍA D. BATISTA G ALVÁN E SCUELA T ÉCNICA S UPERIOR DE I NGENIERÍA I NFORMÁTICA Universidad de La Laguna
  2. 2. R ESUMEN . El presente informe tiene como objetivo describir el desarrollo de la prácticarealizada en el laboratorio de la asignatura Administración de Sistemas. En dicho labo-ratorio se tuvo que llevar a cabo la gestión de usuarios dentro de un supuesto práctico,el cual consistía en una organización cuyo sistema informático era Linux. Concreta-mente, la práctica se implementó sobre una máquina virtual creada para trabajar comoservidor, cuyo sistema operativo era CentOS.Para la gestión o administración de los usuarios de la organización se hizo uso de los me-canismos y herramientas proporcionados por el sistema operativo. Dichas herramientaspermitieron la creación de usuarios y grupos de la organización, así como una estructurade carpetas donde los usuarios almacenarían y compartirían su información. Además fuenecesario establecer ciertas normas de seguridad para el acceso a dicha información através de la asignación de permisos, listas de control de acceso y cuotas de disco.Por otra parte, la estructura del informe está determinada por las cuestiones propuestasen la práctica, a las que se irá respondiendo y describiendo los procesos para su conse-cución. En particular, se explica y responde al caso práctico propuesto en concreto, sinembargo se ha desarrollado un script con el objetivo de facilitar la tarea de gestión deuna manera más general, y menos específica, pero que sirve igualmente para la práctica.Dicho script se incluye como anexo en el siguiente enlace A.Además, en el presente informe se muestra con detalle todo los procedimientos seguidos,pero se excluye en ellos, la reiterada información de las líneas de comandos de casossimilares. Y eso es debido, a que no se quiso cargar el informe demasiado con detallesevidentes (ej. sólo se añadió la siguiente línea de comando “passwd usu5 -x 90 -w 1 -i2”, entendiendo que se tendría que hacer para el resto de usuarios). 1
  3. 3. Índice1. Contraseñas 32. Directorio de cada usuario 43. Proyecto en Ejecución 84. Ejecutivos 10Anexos 13A. Script : Gestión de Usuarios 13B. Limitación de horas de conexión 24 2
  4. 4. 1. Contraseñas En la práctica, la contraseña de cada usuario coincidirá con el nombre de usuario. Para la realización de esta parte fue necesario crear previamente a todos los usuarios y ejecutivosinvolucrados en la práctica (esto puede verse a continuación en el apartado 2). Una vez creados, seañadió a cada usuario la contraseña cifrada en el fichero “/etc/shadow” en su fila correspondiente.Para conseguir esto sin tener que editar el fichero, sirvió de ayuda el comando “passwd” y la opción “--stdin”, donde esta opción dejaría introducir mediante un pipe la contraseña ($password=$user) delusuario ($user). A continuación puede verse un ejemplo general en el que se han definido previamentedos variables (user y password): [alumno:0:~]$ echo "$password" | passwd --stdin $user Los usuarios deben cambiar sus contraseñas cada 3 meses. Es necesario notificar a los usuarios 1 día antes de que su contraseña caduque. Transcurridos 2 días desde la caducidad del password, la cuenta ha de quedar desactivada. Seguidamente, para una correcta realización, se tendría que modificar 3 campos de la fila del usuarioreferidos a las limitaciones de la contraseña en el mismo fichero “/etc/shadow”. Al igual que ante-riormente, se volvió a utilizar el comando “passwd” para evitar tener que editar el fichero, pero en estecaso se usaron opciones diferentes que se describen a continuación: Opciones Descripción : passwd -x Establece el no máximo de días antes del cambio de contraseña. -w Establece los días de aviso de expiración. -i Estable la inactividad de la contraseña tras su expiración. Teniendo en cuenta estas opciones y los requerimientos pedidos, se puede ver a continuación unejemplo particular: [alumno:0:~]$ passwd usu5 -x 90 -w 1 -i 2 3
  5. 5. 2. Directorio de cada usuario Todo usuario del sistema debe poseer un subdirectorio del directorio /home cuyo nombre debe coincidir con el de la cuenta del usuario. Este apartado se escogió como punto de inicio para la realización de la práctica, donde no se añadiótan sólo el directorio de conexión del usuario, sino que además, se añadió el propio usuario al fichero“/etc/passwd” y “/etc/shadow”. Para ello, se utilizó el comando “useradd” con las siguientesopciones que se describen a continuación: Opciones Descripción : useradd -m Forzamos la creación del directorio en su home (si no está creado). -d Directorio de trabajo o home del usuario, campo 6 de /etc/passwd. -s Shell por defecto del usuario cuando ingrese al sistema. Si no se especifica, bash, es el que queda establecido. -u UID del usuario, si no se especifica, se establece el siguiente no disponible a partir del último usuario creado. Un ejemplo particular, en el que implementa lo requerido en el enunciado es el que se muestra acontinuación: [alumno:0:~]$ useradd -m -d /home/usu3 -s /bin/bash -u 502 usu3 Aunque a simple vista pueda verse un ejemplo algo redundante, puesto que se ha elegido la opción“-s /bin/bash” cuando por defecto se añade esa, y también, la opción “-u 502” cuando por de-fecto añade el último. Es debido, a que en el script que puede verse en el anexo A, se da la oportunidadal administrador de introducir otra shell y otra manera de gestionar los uid, aunque por defecto el scriptlo realiza como en RedHat, de manera secuencial a partir de 500. En este directorio, el usuario debe poder crear y borrar ficheros y directorios, pero no debe poder modificar los permisos de su directorio de conexión. Para conseguir que un usuario no pueda modificar los permisos de su propio directorio de conexión,donde cabe destacar que es él, el propietario y cuyo grupo es él mismo, y esto ocurre por defecto a la horade la creación del usuario (visto anteriormente). Sólo hubo que cambiarle el propietario del directoriode conexión por root (mediante el comando “chown”) y cambiarle el permiso de escritura, lectura yejecución sólo para el grupo (mediante el comando “chmod”). De esta manera, se consiguió que sólo elmiembro del grupo (que es sólo el propio usuario) pudiera tener los beneficios requeridos, y que dichousuario no pudiera cambiar los permisos del directorio raíz por no ser el propietario del directorio. Estose muestra a continuación mediante un ejemplo: [alumno:0:~]$ chown root /home/usu1 [alumno:0:~]$ chmod 070 /home/usu1 Ningún otro usuario del sistema podrá acceder a dicho directorio ni a su contenido. Como se mostró en el apartado anterior, el hecho de proporcionarle permiso sólo a los miembros delgrupo (usu1), donde sólo usu1 es miembro, evita que otro usuario del sistema pueda acceder a dichodirectorio raíz y a su contenido. 4
  6. 6. [alumno:0:~]$ chmod 070 /home/usu1 Cada usuario tendrá una cuota de disco de 50 Mb que podrá sobrepasar temporalmente (2 días). Esta parte de la práctica resulta bastante útil y esencial para la gestión de un sistema, debido a queasí se podrá controlar la cantidad de espacio que puede usar un usuario o grupo determinados y así evitarque una única aplicación devore todos los gigas disponibles. Para ello, fue necesario la instalación del paquete “quota” para poder establecer cuotas de disco eneste sistema Linux, tal como se muestra a continuación: [alumno:0:~]$ yum install -y quota Las cuotas se establecieron por sistema de archivos para usuarios o grupos. Aunque en este sistemaLinux se podía utilizar varios sistemas de archivos, se sabe que en “/home” es donde los usuariostienen sus directorios. Por lo tanto, se entiende que sólo en este sistema de archivos es donde se crearíanlas cuotas, ya que en el resto no tendría sentido. Luego, se tuvo el inconveniente de que el sistema deficheros ya estaba montado, por lo que fue necesario volver a montar el sistema de ficheros con lasopciones que indican el deseo de usar cuotas (“usrquota” y “grpquota”, para dar soporte de cuotas ausuarios y grupos, respectivamente). Para ello, se tuvo que editar el archivo “/etc/fstab” y añadir “usrquota” (ya que este apartadosólo se requiere para usuarios), para que el sistema de ficheros ya existente “/home” pudiera soportarcuotas, y luego montarlo. Para evitar editar el fichero, y realizar toda esa tarea de una vez, se usó elcomando “mount” utilizando las siguientes opciones: Opciones Descripción : mount -t Especifica el tipo de sistema de archivos a instalar. -o Dice a mount que aplique las opciones que son especificadas para el sistema de archivos que se montará. A continuación, se remontó el dispositivo “/dev/mapper/vg_as07-LogVol02” (un volumenlógico donde se alojó el “/home”) con soporte para cuotas tan sólo para usuarios. [alumno:0:~]$ mount -t ext4 -o remount,usrquota /dev/mapper/ vg_as07-LogVol02 /home/ La opción “remount” del comando “mount” intenta remontar el sistema de ficheros especificadocon las opciones indicadas, lo que evita desmontarlo (algo imposible de hacer mientras haya aplicacionesusando dicho sistema de ficheros). Para que el sistema puede llevar un control de las cuotas configuradas y de la parte usada de cadausuario fue necesario crear un archivo (“aquota.user”) en el directorio raíz (“/home/”) del sistemade ficheros en el que se configuró las cuotas de disco. Sin embargo, estos archivos son binarios y no sepueden editar directamente como casi cualquier otro archivo de configuración, sino que se usa la utilidad“quotacheck” para iniciar su contenido con la ocupación actual en disco de cada usuario, con lasopciones siguientes: 5
  7. 7. Opciones Descripción : quotacheck -m Evita que el sistema se remonte como de solo lectura. -u Verifica por soporte de cuotas para usuarios. [alumno:0:~]$ quotacheck -m -u /home/ El comando “quotacheck” recorrió todos los archivos y directorios del sistema de ficheros contabi-lizando el uso actual por parte de cada usuario y almacenando el resultado en el archivo “aquota.user”.A continuación, se instruyó al núcleo para que hiciera un seguimiento continuo de los accesos a disco ycontabilizara el espacio ocupado constantemente. Para ello se activó el sistema de cuotas para el sistemade ficheros deseado mediante el comando “quotaon” y sus opciones: Opciones Descripción : quotaon -u Activa las cuotas de usuario; esta es la opción por defecto. -v Se muestra un mensaje por cada sistema de ficheros en el que se han activado las cuotas. -a Activa las cuotas en todos los sistemas de ficheros incluidos en /etc/fstab. -p Muestra si el sistema operativo está gestionando las cuotas en los sistemas de archivos. [alumno:0:~]$ quotaon -uv /home/ Antes de continuar se compróbó que el sistema operativo realmente estaba gestionando las cuotas deeste sistema de ficheros, mediante el mismo comando pero con la opción adicional “-p”: [alumno:0:~]$ quotaon -vuap Ahora hay que aplicar la cuota por usuario, aunque el sistema de archivos ya soporta cuotas y estánhabilitadas, por defecto ningún usuario tiene establecidas cuotas. Según el enunciado cada usuario tendráuna cuota de 50MB (51.200 KB) la cual podrá superar por un periodo de tiempo. Por lo que, esa cuantíase referirá al límite soft (para bloques o inodos), que es inferior al límite hard. Además, se limitará alusuario la cuantía de bloques de 1 KB y no el número de archivos que está utilizando. Así que parainiciar las cuotas habrá que administrar cada usuario a través del comando setquota sabiendo queeste comando tiene el siguiente formato “setquota -u usuario softBlock hardBlock softInodo hardInododirectorio”: [alumno:0:~]$ setquota -u usu3 51200 60000 0 0 /home/usu3 Para finalizar, se establecerá el tiempo de gracia de dos días (172800 seg) de manera global. Paraello, se utilizará el mismo comando “setquota” pero esta vez con la opción “-t” que implica a todoslos usuarios del sistema de ficheros. Además, en esta ocasión se añadirá a los inodos también el mismoperiodo que a los block aunque no significará nada. Por último, tener en cuenta, que pasado el límite softfuera del periodo de gracia se comportará como hard mientras no se reduzca la ocupación en disco aniveles inferiores a la cuota soft. [alumno:0:~]$ setquota -t -u 172800 172800 /home 6
  8. 8. A continuación, para verificar el buen funcionamiento de las cuotas, se limitará el tiempo de gracia aun par de minutos (120 seg), y se creará un fichero lleno de ceros de 55 MB que exceda las cuotas permi-tidas, gracias al comando “dd” que trasfiere datos entre archivos donde sus opciones bs hace referenciaal tamaño de los bloques (1024 Byte = 1 KB) y count al número de bloques (56.320), y “/dev/zero”es un archivo especial que provee de caracteres null: [alumno:0:~]$ dd if=/dev/zero of=/home/usu2/vacio bs=1024 count =56320 7
  9. 9. 3. Proyecto en Ejecución La Organización tiene varios proyectos en curso. Para estos proyectos, se ha de cumplir: Cada proyecto debe tener un directorio bajo el directorio /export/proyectos donde se almace- nará la documentación asociada al mismo. Todos los usuarios que participan en un proyecto deben tener la posibilidad de leer, modificar, crear y borrar los archivos que forman parte del proyecto. Cuando un usuario cree un archivo en el directorio del proyecto, por defecto, éste debe poder ser leído, modificado o borrado por cualquier otro usuario del mismo proyecto. Ningún otro usuario podrá acceder a estos directorios. En primer lugar, se creó un directorio por cada proyecto (aeropuerto, comercial y parque) en laruta correspondiente (“/export/proyectos”). Para ello, se hizo uso del comando “mkdir” el cualpermitió, con sus opciones, no sólo la creación de los ficheros sino también establecer los permisosnecesarios: Opciones Descripción : mkdir -m Establece los permisos (como en chmod) a los directorios creados. -p Crea directorios intermedios si no existen. [alumno:0:~]$ mkdir -p -m 2070 /export/proyectos/aeropuerto/ / export/proyectos/comercial/ /export/proyectos/parque/ Como puede observarse, se ha otorgado el permiso especial setgid que permite que todos los archivosy directorios creados dentro de estos directorios (“/aeropuerto”, “/comercial” y “/parque”) hereden elmismo grupo de ellos. Además, se establecieron los permisos de lectura, escritura y ejecución sólo a losmiembros del grupo. Consiguiendo así, que al crearse un archivo o directorio sólo los miembros del grupopuedan realizar los cambios permitidos en el enunciado, anulando la posibilidad de que otros usuariosque no pertenezcan al grupo puedan acceder al directorio, y mucho menos realizar modificaciones enellos. Cabe destacar que para que lo anterior tenga sentido, fue necesario establecerle los grupos a cadadirectorio cuyos nombres se correspondieron con la denominación de cada proyecto. Para ello, previa-mente se tuvo que crear los grupos con el comando “groupadd” y su opción “-r” que crea un grupodel sistema con un GID menor que 500: [alumno:0:~]$ groupadd -r aeropuerto Una vez creados los grupos ya se pudo asignar a los directorios los grupos correspondientes, ademásde otorgarle el propietario al root, según se ve a continuación en un ejemplo: [alumno:0:~]$ chown root.comercial /export/proyectos/comercial 8
  10. 10. Para finalizar se añadió a cada usuario los grupos según los proyectos a los que pertenecían. Esto serealizó mediante el comando “usermod” y las opciones: Opciones Descripción : usermod -a Añade al usuario un nuevo grupo secundario. -G Se añade un listado de grupos secundarios. [alumno:0:~]$ usermod -a -G aeropuerto,comercial usu4 Existirá un directorio /export/proyectos/comun donde se almacenará información común a to- dos los proyectos de tal forma que todos los usuarios puedan añadir y modificar información a este directorio, pero sólo el propietario de cada carpeta pueda eliminarla. Se actuó de igual manera que antes, pero con la salvedad de que se añadió un nuevo permiso es-pecial, para ajustarse a los requerimientos del enunciado. Este permiso fue sticky, y se utilizó para queúnicamente el usuario que crea el archivo (i.e. el propietario) tenga la posibilidad de eliminarlo. [alumno:0:~]$ mkdir -p -m 3070 /export/proyectos/comun/ [alumno:0:~]$ groupadd -r comun [alumno:0:~]$ chown root.comun /export/proyectos/comun/ Hay que matizar que en este caso sí es obligatorio añadir la opción “-a” del comando “usermod”,debido a que sino se hiciera se borrarían los grupos anteriores adquiridos y se quedaría como único gruposecundario común. [alumno:0:~]$ usermod -a -G comun usu2 9
  11. 11. 4. Ejecutivos En la empresa existen varios ejecutivos que tienen asignada la evaluación de algunos de losproyectos existentes con las siguientes restricciones: Para esta parte se hizo necesario la utilización de Listas de Control de Acceso, ACL, debido a que losejecutivos gozarán de permisos exclusivos para ellos, que no se regirán por los impuestos en apartadosanteriores. Para trabajar con las ACL fue necesario instalar el paquete acl: [alumno:0:~]$ yum install -y acl Se establecieron las ACL al sistema de ficheros ya existente, de manera que tan sólo con una línea decomando se evitaría tener que editar el fichero “/etc/fstab”. Y al igual que pasaba con las cuotas,habrá que montar el sistema por el mismo motivo: [alumno:0:~]$ mount -t ext4 -o remount,usrquota,acl /dev/mapper/ vg_as07-LogVol02 /home/ Los ejecutivos asociados a un determinado proyecto podrán leer la información de ese pro- yecto. Los ejecutivos que no pertenezcan a un proyecto no deben poder acceder directamente a los directorios de los proyectos. Se inicializaron las ACL de los tres directorios (“/aeropuerto”, “/comercial” y “/parque”), eliminandotodas las existentes, añadiendo las ACL por defecto y de manera recursiva a todos sus subdirectorios. Sellevó a cabo con el comando “setfacl” y las siguientes opciones: Opciones Descripción : setfacl -b Elimina todas las ACL impuestas sin excepción. -k Elimina las ACL por defecto. -R Aplica las operaciones a todos los archivos y directorios recursivamente. -m Modifica o añade permisos. [alumno:0:~]$ setfacl -b -k -R /export/proyectos/parque Para facilitar el manejo de los permisos de los ejecutivos dentro de los directorios, teniendo en cuentaque un ejecutivo pueda cambiar de proyecto en cualquier momento, resultó interesante la creación de tresgrupos nuevos (aeropuertoACL, parqueACL y comercialACL) para cada proyecto. Y así, evitar tener queir directorio a directorio cambiando el permiso para cada ejecutivo modificado, de tal manera, que sólosería necesario cambiar de grupo al ejecutivo implicado. [alumno:0:~]$ groupadd -r aeropuertoACL 10
  12. 12. Se añadió a cada ejecutivo su correspondiente proyecto, no haciéndose necesaria la opción “-a” yaque no se le ha asignado ningún grupo secundario previamente. [alumno:0:~]$ usermod -G aeropuertoACL,parqueACL ejec1 [alumno:0:~]$ usermod -G aeropuertoACL,comercialACL ejec2 Por último, se establecieron los permisos de sólo lectura a cada uno de los directorios del proyecto consu grupo ACL correspondiente. Esto se llevó a cabo con el comando “setfacl” (que lleva por sintaxistres campos separados por “:”, el primero se refiere a si es a un grupo (g) o usuario (u), el segundo elnombre del grupo o usuario, y el tercero al tipo de permiso): [alumno:0:~]$ setfacl -R -m g:parqueACL:r-- /export/proyectos/ parque Para que estos ejecutivos puedan controlar el estado de cada proyecto, deben existir en el directorio /usr/local/bin tantos programas como proyectos existan. Estos programas internamente han de realizar un “ls” sobre el directorio del proyecto co- rrespondiente. Con el fin de utilizar un pequeño programa en C que realizase la función de listar un directorio, fuenecesario instalar el compilador de C: [alumno:0:~]$ yum install -y gcc Dichos programas utilizan la librería “unistd.h” que contiene funciones para el manejo de ficherosy directorios en sistemas UNIX. En dichos programas se deja usar todas las opciones del comando ls,pero se ha restringido que el usuario pueda elegir el directorio deseado. Esto se consiguió realizando unacopia de los argumentos de entrada, pero filtrando cualquier posibilidad de entrada de algún directorio.Además, para que fuera posible la ejecución del comando “ls” se utilizó, de la familia exec, aquel quedeja utilizar los parámetros de entrada por un vector en su segundo parámetro, execv, y cuyo primerparámetro “/bin/ls” es el fichero ejecutable. 1 #include <unistd.h> 2 3 main(int argc, char* argv[]) 4 { 5 int i, j = 0; 6 char* args[argc+2]; 7 8 for (i = 0; i < argc; i++) 9 if ((argv[i][0] == ’-’) || (i == 0)) 10 { 11 args[j] = argv[i]; 11
  13. 13. 12 j++; 13 }; 14 args[j] = "/export/proyectos/parque"; 15 args[j+1] = NULL; 16 17 execv("/bin/ls", args); 18 } Una vez compilado los tres programas realizados (lsAer.c, lsCom.c y lsPar.c), se ubicó los ejecutablesen el directorio que “/usr/local/bin” tal como pedía el enunciado, lo cual permitió poder ejecutarestos programas desde cualquier directorio en que se encuentrase como si fuera un comando de Linux. El programa que permite evaluar cada proyecto, debe cumplir lo siguiente: • Debe poder ser ejecutado únicamente por los ejecutivos de la organización. • Debe tener asignado los permisos suficientes para poder ejecutar el “ls” sobre el direc- torio correspondiente. Dichos programas tuvieron como propietario al root, debido que es él único usuario que puede ac-ceder a todos esos directorios y realizar un ls. Por lo que, para que los ejecutivos pudieran usar estosprogramas y además, tuviera éxito en el acceso a la información de los archivos existentes, se habilitóel bit setuid a cada uno de los ficheros para que aquel que ejecutara alguno de los archivos contara conlos privilegios heredados del propietario. A continuación, se creó un grupo nuevo llamado ejecutivo y seañadió a este nuevo grupo a los dos ejecutivos y además, se modificó el grupo de los ficheros a ejecutivo. [alumno:0:~]$ groupadd -r ejecutivo [alumno:0:~]$ usermod -a -G ejecutivo ejec1 [alumno:0:~]$ usermod -a -G ejecutivo ejec2 [alumno:0:~]$ chown root.ejecutivo lsAer Esto logró que tras otorgarle los permisos de sólo ejecución a los grupos, y anular el resto, fueran losejecutivos los únicos que pudieran ejecutar estos ficheros con los privilegios de root. [alumno:0:~]$ chmod 4010 /usr/local/bin/lsCom 12
  14. 14. ANEXOS A. Script : Gestión de Usuarios A continuación se muestra el código del script que fue creado para la realización de la práctica. El objetivo principal no era sólo el satisfacer los requerimientos de la práctica, sino también una base para la gestión de usuarios de una manera más genérica. Además, se añadieron nuevas secciones bastante relevantes bajo nuestro modesto criterio. 1 #!/bin/bash 2 3 clear 4 5 # Este filtro sólo dejará ejecutar el script al root 6 if [ "‘whoami‘" != "root" ]; then 7 echo -e "n" 8 echo -e "033[1;31m Permiso denegado : No eres root. 033[0m" 9 echo -e "n"10 exit 111 fi1213 # Variable que almacenará el n o de usuarios estándar creados14 i=11516 #***********************************************************************************17 # CABECERA Y SALIDA18 #***********************************************************************************1920 # Es la función que crea la cabecera del scripts21 function cabecera22 {23 clear24 echo -e "033[1m***********************************************************"25 echo " $1 "26 echo -e "***********************************************************"27 }2829 #***********************************************************************************30 # FUNCIONES DE LOS MENÚS31 #***********************************************************************************3233 # GESTIÓN DE USUARIOS : USUARIOS34 # Función : Dará de alta un usuario en /etc/passwd y /etc/shadow35 function altaUsu36 {37 cabecera "USUARIOS : ALTA"38 echo -e "n 033[0m"3940 # Usuario ********************************************************41 read -p " Nombre : " user42 if [ -z "$user" ]; then43 user="usu$i"44 i=‘expr $i "+" 1‘45 fi46 existUser=‘grep -E $user /etc/passwd | cut -d":" -f1‘47 if [ -n "$existUser" ]; then48 echo -e -n "033[1;31m El usuario ya existe. 033[0m"49 else50 # Directorio de Conexión Inicial *********************************51 read -p " Home : " home52 [ -z "$home" ] && home="/home/$user"5354 # uid del usuario ************************************************55 # uid : de manera secuencial a partir de 500 (igual que RedHat) 13
  15. 15. 56 read -p " uid : " uid57 if [ -z "$uid" ]; then58 ultUID="NOHALLADO"59 uid=50060 while [ -n "$ultUID" ]61 do62 ultUID=‘grep -E $uid /etc/passwd | cut -d":" -f3‘63 [ -n "$ultUID" ] && uid=‘expr $uid "+" 1‘ || break64 done65 fi6667 # Shell de Arranque **********************************************68 read -p " Shell : " shell69 [ -z "$shell" ] && shell="/bin/bash"7071 # Contraseña *****************************************************72 read -p " Contraseña : " password73 [ -z "$password" ] && password="$user"7475 # Crear usuario **************************************************76 useradd -m -d $home -s $shell -u $uid $user7778 # Crear contraseña ***********************************************79 echo "$password" | passwd --stdin $user8081 # Modificación del tiempo de expiración, aviso y deshabilitación *82 read -p " Tiempo expiracion (días) : " texp83 [ -z "$texp" ] && texp="90"84 read -p " Tiempo aviso (días) : " tavi85 [ -z "$tavi" ] && tavi="1"86 read -p " Tiempo deshabilitación (días) : " tdes87 [ -z "$tdes" ] && tdes="2"88 passwd $user -x $texp -w $tavi -i $tdes89 fi9091 sleep 192 }9394 # GESTIÓN DE USUARIOS : USUARIOS95 # Función : Elimina un usuario96 function bajaUsu97 {98 cabecera "USUARIOS : BAJA"99 echo -e "n 033[0m"100101 read -p " Nombre : " user102 if [ -n "$user" ]; then103 existUser=‘grep -E $user /etc/passwd | cut -d":" -f1‘104 if [ -z "$existUser" ]105 then106 echo -e -n "033[1;31m El usuario no existe. 033[0m"107 else108 userdel -r $user109 fi110 else111 echo -e -n "033[1;31m No ha introducido usuario. 033[0m"112 fi113114 sleep 1115 }116117 # GESTIÓN DE USUARIOS : USUARIOS118 # Función : Muestra los usuarios creados119 function MostrarUsu120 {121 cabecera "USUARIOS : MOSTRAR"122 echo -e "n 033[0m"123124 echo -e "033[0;33m /etc/passwd 033[0m"125 grep -E x:5.{2}:5.{2} /etc/passwd 14
  16. 16. 126 echo -e "n"127128 sleep 2129130 echo -e "033[0;33m /etc/shadow 033[0m"131 for usu in ‘grep -E x:5.{2}:5.{2} /etc/passwd | cut -d":" -f1‘132 do133 grep -E $usu /etc/shadow134 done135136 echo -e "033[1;34m n"137 read -p " Presiona [ENTER] para continuar. " enterKey138 echo -e "033[0m"139 }140141 # GESTIÓN DE USUARIOS : GRUPOS142 # Función : Dará de alta un grupo en /etc/group143 function altaGru144 {145 cabecera "GRUPOS : ALTA"146 echo -e "n 033[0m"147148 read -p " Nombre : " group149 if [ -z "$group" ]; then150 echo -e -n "033[1;31m No ha introducido grupo. 033[0m"151 else152 existGroup=‘grep -E $group /etc/group | cut -d":" -f1‘153 if [ -n "$existGroup" ]154 then155 echo -e -n "033[1;31m El grupo ya existe. 033[0m"156 else157 groupadd -r $group158 fi159 fi160161 sleep 1162 }163164 # GESTIÓN DE USUARIOS : GRUPOS165 # Función : Elimina un grupo166 function bajaGru167 {168 cabecera "GRUPOS : BAJA"169 echo -e "n 033[0m"170171 read -p " Nombre : " group172 if [ -z "$group" ]; then173 echo -e -n "033[1;31m No ha introducido grupo. 033[0m"174 else175 existGroup=‘grep -E $group /etc/group | cut -d":" -f1‘176 if [ -z "$existGroup" ]177 then178 echo -e -n "033[1;31m El grupo no existe. 033[0m"179 else180 groupdel $group181 fi182 fi183184 sleep 1185 }186187 # GESTIÓN DE USUARIOS : GRUPOS188 # Función : Añadir grupos a los usuarios189 function anadGruUsu190 {191 cabecera "USUARIOS : GRUPOS"192 echo -e "n 033[0m"193194 read -p " Nombre usuario : " user195 if [ -z "$user" ]; then 15
  17. 17. 196 echo -e -n "033[1;31m No se ha introducido usuario. 033[0m"197 else198 existUser=‘grep -E $user /etc/passwd | cut -d":" -f1‘199 if [ -z "$existUser" ]200 then201 echo -e -n "033[1;31m El usuario no existe. 033[0m"202 else203 # Puede dar un fallo si alguno de los grupos metidos no existe204 read -p " Nombre/s grupo/s separados por , : " group205 if [ -z "$group" ]; then206 echo -e -n "033[1;31m No se ha introducido grupo. 033[0m"207 else208 usermod -a -G $group $user209 fi210 fi211 fi212213 sleep 1214 }215216 # GESTIÓN DE USUARIOS : GRUPOS217 # Función : Modificar los grupos secundarios a un usuario218 function modGruUsu219 {220 cabecera "USUARIOS : GRUPOS"221 echo -e "n 033[0m"222223 read -p " Nombre usuario : " user224 if [ -z "$user" ]; then225 echo -e -n "033[1;31m No se ha introducido usuario. 033[0m"226 else227 existUser=‘grep -E $user /etc/passwd | cut -d":" -f1‘228 if [ -z "$existUser" ]229 then230 echo -e -n "033[1;31m El usuario no existe. 033[0m"231 else232 # Puede dar un fallo si alguno de los grupos metidos no existe233 read -p " Nombre/s grupo/s separados por , : " group234 if [ -z "$group" ]; then235 echo -e -n "033[1;31m No se ha introducido grupo. 033[0m"236 else237 usermod -G $group $user238 fi239 fi240 fi241242 sleep 1243 }244245 # GESTIÓN DE USUARIOS : GRUPOS246 # Función : Mostrar grupos usuarios247 function MostrarGruUsu248 {249 cabecera "GRUPOS : MOSTRAR"250 echo -e "n 033[0m"251252 echo -e "033[0;33m /etc/group 033[0m"253 for usu in ‘grep -E x:5.{2}:5.{2} /etc/passwd | cut -d":" -f1‘254 do255 grep -E $usu /etc/group256 done | sort | uniq257258 echo -e "033[1;34m n"259 read -p " Presiona [ENTER] para continuar. " enterKey260 echo -e "033[0m"261 }262263 # GESTIÓN DE USUARIOS : DIRECTORIO264 # Función : Crea un directorio con permisos265 function creaDir 16
  18. 18. 266 {267 cabecera "DIRECTORIO : CREAR"268 echo -e "n 033[0m"269270 read -p " Rutas/directorios separados por espacios : " directorio271 if [ -z "$directorio" ]; then272 echo -e -n "033[1;31m No se ha introducido ruta. 033[0m"273 else274 read -p " Permisos : " permiso275 if [ -n "$permiso" ]; then276 permiso="-m $permiso"277 fi278 mkdir $permiso -p $directorio279 fi280281 sleep 1282 }283284 # GESTIÓN DE USUARIOS : DIRECTORIO285 # Función : Borrar un directorio286 function borrarDir287 {288 cabecera "DIRECTORIO : BORRAR"289 echo -e "n 033[0m"290291 read -p " Ruta/directorios separados por espacios : " directorio292 if [ -z "$directorio" ]; then293 echo -e -n "033[1;31m No se ha introducido directorio. 033[0m"294 else295 [ -d "$directorio" ] && rm -R $directorio || echo -e -n "033[1;31m No existe directorio 033[0m"296 fi297298 sleep 1299 }300301 # GESTIÓN DE USUARIOS : DIRECTORIO302 # Función : Modifica propietario y nombre del grupo de un directorio303 function modiOwnGruDir304 {305 cabecera "DIRECTORIO : MODIFICAR"306 echo -e "n 033[0m"307308 read -p " Nombre de la ruta del directorio : " directorio309 if [ -z "$directorio" ]; then310 echo -e -n "033[1;31m No se ha introducido ruta. 033[0m"311 else312 read -p " (Nombre del propietario)(y/o).(Nombre del grupo) : " ownGroup313 if [ -z "$ownGroup" ]; then314 echo -e -n "033[1;31m No se ha introducido cambio. 033[0m"315 else316 chown $ownGroup $directorio317 fi318 fi319320 sleep 1321 }322323 # GESTIÓN DE USUARIOS : DIRECTORIO324 # Función : Mostrar ls -l325 function mostrarDir326 {327 cabecera "DIRECTORIO : MOSTRAR"328 echo -e "n 033[0m"329330 read -p " Ruta del directorio : " directorio331 if [ -z "$directorio" ]; then332 ls -l333 else334 if [ -d "$directorio" ]; then 17
  19. 19. 335 ls -l "$directorio"336 else337 echo -e -n "033[1;31m Directorio no existe. 033[0m"338 fi339 fi340341 echo -e "033[1;34m n"342 read -p " Presiona [ENTER] para continuar. " enterKey343 echo -e "033[0m"344 }345346 # GESTIÓN DE USUARIOS : PERMISOS347 # Función : Modificar permisos de fichero o directorio348 function modiPermiso349 {350 cabecera "PERMISOS/UNIX : MODIFICAR"351 echo -e "n 033[0m"352353 read -p " Nombre del fichero o ruta directorio : " fich354 if [ -z "$fich" ]; then355 echo -e -n "033[1;31m No se ha introducido datos. 033[0m"356 else357 if [ -d "$fich" ]; then358 read -p " Permiso : " permiso359 if [ -z "$permiso" ]; then360 echo -e -n "033[1;31m No se ha introducido permiso. 033[0m"361 else362 chmod $permiso $fich363 fi364 else365 echo -e -n "033[1;31m Directorio no existe. 033[0m"366 fi367 fi368369 sleep 1370 }371372 # GESTIÓN DE USUARIOS : CUOTAS373 # Función : Preparar el sistema para el uso de cuotas374 function actCuotas375 {376 cabecera "CUOTAS : ACTIVAR"377 echo -e "n 033[0m"378379 echo -e "033[0;32m Añadiendo soporte de cuotas a un sistema de ficheros ya en uso:"380 echo -e "/dev/mapper/vg_as07-LogVol02 /home/ 033[0m"381 sleep 1382 mount -t ext4 -o remount,usrquota /dev/mapper/vg_as07-LogVol02 /home/383384 df385386 echo -e "n"387 echo -e "033[0;32m Montando el sistema de ficheros con las opciones de usar cuotas de disco .033[0m"388 mount389 sleep 1390 echo -e "033[0;32m El sistema de archivos home está listo para soportar cuotas.033[0m"391 sleep 1392393 echo -e "n"394 echo -e "033[0;32m Inicializando el contenido del fichero que lleva el control de la cuotas .033[0m"395 quotacheck -m -u /home/396 sleep 1397 echo -e "033[0;32m Comprobando que existe. 033[0m"398 ls -l /home/399 sleep 1400401 echo -e "n"402 echo -e "033[0;32m Indicando al núcleo que esté preparado para gestionar la cuotas.033[0m" 18
  20. 20. 403 quotaon -uv /home/404 sleep 1405406 echo -e "n"407 echo -e "033[0;32m Comprobando que el SO está gestionando las cuotas.033[0m"408 quotaon -vuap409410411 echo -e "033[1;34m n"412 read -p " Presiona [ENTER] para continuar. " enterKey413 echo -e "033[0m"414 }415416 # GESTIÓN DE USUARIOS : CUOTAS417 # Función : Establecer cuota418 function estCuota419 {420 cabecera "CUOTAS : ESTABLECER"421 echo -e "n 033[0m"422423 read -p " Usuario : " user424425 if [ -n "$user" ]; then426 existUser=‘grep -E $user /etc/passwd | cut -d":" -f1‘427 if [ -z "$existUser" ]; then428 echo -e -n "033[1;31m El usuario no existe. 033[0m"429 else430 read -p " Softlimit : " soft431 read -p " Hardlimit : " hard432 read -p " Ruta/Directorio : " directorio433 [ -z "$soft" ] && soft="51200"434 [ -z "$hard" ] && hard=‘expr $soft "+" 8800‘435 [ -z "$directorio" ] && directorio="/home"436 ‘setquota -u $user $soft $hard 0 0 $directorio‘437 fi438 else439 echo -e -n "033[1;31m No se ha introducido el usuario. 033[0m"440 fi441442 sleep 1443 }444445 # GESTIÓN DE USUARIOS : CUOTAS446 # Función : Tiempo de gracia447 function tgracia448 {449 cabecera "CUOTAS : T GRACIA"450 echo -e "n 033[0m"451452 read -p " Tiempo de gracia : " tgra453 read -p " Ruta/Directorio : " directorio454 [ -z "$tgra" ] && tgra="172800"455 [ -z "$directorio" ] && directorio="/home/"456 ‘setquota -t -u $tgra $tgra $directorio‘457458 sleep 1459 }460461 # GESTIÓN DE USUARIOS : CUOTAS462 # Función : Mostrar463 function mostrarCuot464 {465 cabecera "CUOTAS : MOSTRAR"466 echo -e "n 033[0m"467468 repquota -u /home/469470 echo -e "033[1;34m n"471 read -p " Presiona [ENTER] para continuar. " enterKey472 echo -e "033[0m" 19
  21. 21. 473 }474475 # GESTIÓN DE USUARIOS : ACL476 # Función : Preparar el sistema para el uso de ACL477 function actACL478 {479 cabecera "PERMISOS/ACL : ACTIVAR"480 echo -e "n 033[0m"481482 echo -e "033[0;32m Añadiendo soporte de ACL a un sistema de ficheros ya en uso:"483 echo -e "/dev/mapper/vg_as07-LogVol02 /home/ 033[0m"484 sleep 1485 mount -t ext4 -o remount,usrquota,acl /dev/mapper/vg_as07-LogVol02 /home/486487 df488489 echo -e "n"490 echo -e "033[0;32m Montando el sistema de ficheros con la opción ACL.033[0m"491 mount492 sleep 1493 echo -e "033[0;32m El sistema de archivos está listo para utilizar ACL.033[0m"494495 echo -e "033[1;34m n"496 read -p " Presiona [ENTER] para continuar. " enterKey497 echo -e "033[0m"498 }499500 # GESTIÓN DE USUARIOS : ACL501 # Función : Introducimos un nuevo permiso a un grupo o usuario a un directorio o fichero502 function introPerm503 {504 cabecera "PERMISOS/ACL : ACTIVAR"505 echo -e "n 033[0m"506507 read -n 1 -p " A un Usuario(u) o Grupo (g) : " user508 echo -e "n"509 if [ -z "$user" ]; then510 echo -e -n "033[1;31m No se ha introducido el usuario. 033[0m"511 else512 read -p " Nombre del usuario/grupo/todos : " name513 read -p " Permiso (rwx,-wx,r--,...) : " permiso514 read -p " ruta/directorio : " directorio515 [ -d "$directorio" ] && setfacl -R -m $user:$name:$permiso $directorio || echo -e -n " 033[1;31m No existe directorio. 033[0m"516 fi517518 }519520 # GESTIÓN DE USUARIOS : ACL521 # Función : Elimina todas las ACL, añade los por defectos y de manera recursiva a sus directorios522 function inicializa523 {524 cabecera "PERMISOS/ACL : INICIALIZAR"525 echo -e "n 033[0m"526527 read -p " ruta/directorio raíz a inicializar : " directorio528 [ -d "$directorio" ] && setfacl -b -k -R $directorio || echo -e -n "033[1;31m El directorio no existe. 033[0m"529530 sleep 1531 }532533 # GESTIÓN DE USUARIOS : ACL534 # Función : Visualiza los permisos impuestos a un directorio535 function mostrarACL536 {537 cabecera "PERMISOS/ACL : MOSTRAR"538 echo -e "n 033[0m"539540 read -p " ruta/directorio : " directorio 20
  22. 22. 541 [ -d "$directorio" ] && getfacl $directorio || echo -e -n "033[1;31m El directorio no existe . 033[0m"542543 echo -e "033[1;34m n"544 read -p " Presiona [ENTER] para continuar. " enterKey545 echo -e "033[0m"546 }547548 #***********************************************************************************549 # MENÚS550 #***********************************************************************************551552 # MENÚ USUARIOS -----------------------553 function menuUsu554 {555 cabecera USUARIOS556557 select opcionUsu in "Alta" "Baja" "Mostrar Usuarios" "Salir"558 do559 echo -e "n 033[0m"560 case "$opcionUsu" in561 "Alta") altaUsu;;562 "Baja") bajaUsu;;563 "Mostrar Usuarios") MostrarUsu;;564 "Salir") break;;565 esac566 break567 done568 }569570 # MENÚ GRUPOS -------------------------571 function menuGru572 {573 cabecera GRUPOS574575 select opcionGru in "Alta" "Baja" "Añadir Usuario a Grupo" "Mostrar Grupo de Usuarios" "Salir"576 do577 echo -e "n 033[0m"578 case "$opcionGru" in579 "Alta") altaGru;;580 "Baja") bajaGru;;581 "Añadir Usuario a Grupo") anadGruUsu;;582 "Modificar Grupo a Usuario") modGruUsu;;583 "Mostrar Grupo de Usuarios") MostrarGruUsu;;584 "Salir") break;;585 esac586 break587 done588 }589590 # DIRECTORIOS -------------------------591 function menuDir592 {593 cabecera DIRECTORIOS594595 select opcionDir in "Crear" "Borrar" "Modificar Propietario" "Mostrar Directorio" "Salir"596 do597 echo -e "n 033[0m"598 case "$opcionDir" in599 "Crear") creaDir;;600 "Borrar") borrarDir;;601 "Modificar Propietario")modiOwnGruDir;;602 "Mostrar Directorio") mostrarDir;;603 "Salir") break;;604 esac605 break606 done607 }608609 # ACL --------------------------------- 21
  23. 23. 610 function menuACL611 {612 cabecera PERMISOS613614 select opcionACL in "Activar" "Introducir Permiso" "Inicializar Directorio" "Mostrar ACL" "Salir "615 do616 echo -e "n 033[0m"617 case "$opcionACL" in618 "Activar") actACL;;619 "Introducir Permiso") introPerm;;620 "Inicializar Directorio") inicializa;;621 "Mostrar ACL") mostrarACL;;622 "Salir") break;;623 esac624 break625 done626 }627628 # PERMISOS ----------------------------629 function menuPermiso630 {631 cabecera PERMISOS632633 select opcionPermiso in "ACL" "UNIX" "Salir"634 do635 echo -e "n 033[0m"636 case "$opcionPermiso" in637 "ACL") menuACL;;638 "UNIX") modiPermiso;;639 "Salir") break;;640 esac641 break642 done643 }644645 # CUOTAS ------------------------------646 function menuCuota647 {648 cabecera CUOTAS649650 select opcionCuota in "Activar" "Añadir" "Tiempo de Gracia" "Mostrar Cuotas" "Salir"651 do652 echo -e "n 033[0m"653 case "$opcionCuota" in654 "Activar") actCuotas;;655 "Añadir") estCuota;;656 "Tiempo de Gracia") tgracia;;657 "Mostrar Cuotas") mostrarCuot;;658 "Salir") break;;659 esac660 break661 done662 }663664 # MENÚ PRINCIPAL ----------------------665 while true666 do667 cabecera "GESTIÓN DE USUARIOS"668669 PS3="Elige una opción : "670 select opcion in "Usuarios" "Grupos" "Directorios" "Permisos" "Cuotas" "Salir"671 do672 case "$opcion" in673 "Usuarios") menuUsu;;674 "Grupos") menuGru;;675 "Directorios") menuDir;;676 "Permisos") menuPermiso;;677 "Cuotas") menuCuota;;678 "Salir") clear 22
  24. 24. 679 echo -e "n 033[1m"680 echo -n " Guardando los cambios... "681 sleep 2682 echo -e "033[0m n"683 exit 2;;684 esac685 break686 done687 done 23
  25. 25. B. Limitación de horas de conexión Con el fin de restringir que los usuarios utilizaran el sistema en determinados periodos de tiempo, bajoun terminal concreto, aplicaciones, ... se utilizó el mecanismo PAM, Pluggable Authentication Modules. En primer lugar, fue necesario editar el archivo “/etc/pam.d/login”, añadir un nuevo módulo(pam_time) bajo la interfaz de account (la cual permitirá controlar la autenticación), con el indicador decontrol required (que indica que el resultado del módulo debe ser exitoso para continuar con la auten-ticación, pero si el módulo falla no se notifica al usuario hasta los otros módulos referenciados no severifiquen): [alumno:0:~]$ vi /etc/pam.d/login ... account required pam_time.so ... Aclarar que este módulo se añadió justo antes del primer módulo con interfaz account existente. Luego, se tuvo que editar el fichero “/etc/security/time.conf” para incorporar las restric-ciones pertinentes. Estas restricciones tienen un formato (services;ttys;users;times) a seguir separadospor “;” cuyos campos son: a) Primer campo: Servicios. b) Segundo campo: Terminales. c) Tercero campo: Usuarios. d) Cuarto campo: Indicadores de tiempo. Y algunas opciones de los indicadores de tiempo son: Opciones Descripción : indicadores de tiempo Mo Lunes Tu Martes We Miércoles Th Jueves Fr Viernes Sa Sábado Su Domingo Al Todos los días Wd Fin de Semana wk De lunes a viernes El ejemplo escogido en clase para verificar el funcionamiento del PAM, fue restringir al usuario usu5el terminal tty3 para que sólo puediera hacer login los lunes de 18 a 23 horas. [alumno:0:~]$ vi /etc/security/time.conf login;tty3;usu5;Mo1800-2300 Para comprobarlo, se habrió el terminal tty3 (CTRL + F3) y se intentó autenticarse con usu5, el cualno pudo hacerlo. 24

×