administración de sistemas

25
Administración de Sistemas Gestión de Usuarios : Linux I TAHISA M. DÍAZ DÍAZ MARÍA D. BATISTA GALVÁN ESCUELA TÉCNICA SUPERIOR DE I NGENIERÍA I NFORMÁTICA Universidad de La Laguna

Upload: maria-galvan

Post on 12-Jun-2015

454 views

Category:

Technology


1 download

DESCRIPTION

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

TRANSCRIPT

Page 1: Administración de Sistemas

Administración de SistemasGestión de Usuarios : Linux

ITAHISA M. D ÍAZ DÍAZ

MARÍA D. BATISTA GALVÁN

ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA INFORMÁTICA

Universidad de La Laguna

Page 2: Administración de Sistemas

RESUMEN. El presente informe tiene como objetivo describir el desarrollo de la prácticarealizada en el laboratorio de la asignaturaAdministració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 eraLinux . Concreta-mente, la práctica se implementó sobre una máquina virtual creada para trabajar comoservidor, cuyo sistema operativo eraCentOS.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íansu 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 unscript 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.Dichoscript 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 casos

similares. Y eso es debido, a que no se quiso cargar el informedemasiado con detalles

evidentes (ej. sólo se añadió la siguiente línea de comando “passwd usu5 -x 90 -w 1 -i

2”, entendiendo que se tendría que hacer para el resto de usuarios).

1

Page 3: Administración de Sistemas

Índice

1. Contraseñas 3

2. Directorio de cada usuario 4

3. Proyecto en Ejecución 8

4. Ejecutivos 10

Anexos 13

A. Script : Gestión de Usuarios 13

B. Limitación de horas de conexión 24

2

Page 4: Administración de Sistemas

1. Contraseñas

En la práctica, la contraseña de cada usuario coincidirá conel 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ñacifrada en el fichero “/etc/shadow ” en su fila correspondiente.Para conseguir esto sin tener que editar el fichero, sirvió deayuda el comando “passwd ” y la opción “--stdin ”, donde esta opción dejaría introducir mediante unpipe la contraseña ($password=$user) delusuario ($user). A continuación puede verse un ejemplo general en el que se han definido previamentedos variables (usery 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

Page 5: Administración de Sistemas

2. Directorio de cada usuario

Todo usuario del sistema debe poseer un subdirectorio del directorio /home cuyo nombredebe 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 elscript que puede verse en el anexo A, se da la oportunidadal administrador de introducir otrashelly otra manera de gestionar losuid, aunque por defecto elscriptlo realiza como enRedHat , de manera secuencial a partir de 500.

En este directorio, el usuario debe poder crear y borrar ficheros y directorios, pero no debepoder modificar los permisos de su directorio de conexión.

Para conseguir que un usuario no pueda modificar los permisosde supropio 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 huboque cambiarle el propietario del directoriode conexión porroot (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ízpor 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

Page 6: Administración de Sistemas

[alumno:0:~]$ chmod 070 /home/usu1

Cada usuario tendrá una cuota de disco de 50 Mb que podrá sobrepasar temporalmente (2dí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 sistemaLinux , 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 eneste 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

Page 7: Administración de Sistemas

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 almacenandoel 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 incluidosen /etc/fstab.-p Muestra si el sistema operativo está gestionando las cuotasen 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 sistemade 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á allímite soft(para bloques o inodos), que es inferior allímite hard. Además, se limitará alusuario la cuantía de bloques de 1 KB y no el número de archivosque está utilizando. Así que parainiciar las cuotas habrá que administrar cada usuario a través del comandosetquota 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ónse añadirá a losinodostambién el mismoperiodo que a losblockaunque no significará nada. Por último, tener en cuenta, que pasado ellímite softfuera del periodo de gracia se comportará comohard mientras no se reduzca la ocupación en disco aniveles inferiores a la cuotasoft.

[alumno:0:~]$ setquota -t -u 172800 172800 /home

6

Page 8: Administración de Sistemas

A continuación, para verificar el buen funcionamiento de lascuotas, 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 opcionesbshace referenciaal tamaño de los bloques (1024 Byte = 1 KB) ycountal número de bloques (56.320), y “/dev/zero ”es un archivo especial que provee de caracteresnull:

[alumno:0:~]$ dd if=/dev/zero of=/home/usu2/vacio bs=1024 count=56320

7

Page 9: Administración de Sistemas

3. Proyecto en Ejecución

La Organización tiene varios proyectos en curso. Para estosproyectos, 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 tenerla 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 poderser 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, comercialy 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 especialsetgidque 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 permisosde 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 unGID 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 alroot, según se ve a continuación en un ejemplo:

[alumno:0:~]$ chown root.comercial /export/proyectos/comercial

8

Page 10: Administración de Sistemas

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óna este directorio, pero sólo el propietario de cada carpeta pueda eliminarla.

Se actuó de igual manera que antes, pero con la salvedad de quese añadió un nuevo permiso es-pecial, para ajustarse a los requerimientos del enunciado.Este permiso fuesticky, 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 gruposecundariocomún.

[alumno:0:~]$ usermod -a -G comun usu2

9

Page 11: Administración de Sistemas

4. Ejecutivos

En la empresa existen varios ejecutivos que tienen asignadala evaluación de algunos de losproyectos existentes con las siguientes restricciones:

Para esta parte se hizo necesario la utilización deListas 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 lasACL fue necesario instalar el paqueteacl:

[alumno:0:~]$ yum install -y acl

Se establecieron lasACLal sistema de ficheros ya existente, de manera que tan sólo conuna 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 losdirectorios de los proyectos.

Se inicializaron lasACLde los tres directorios (“/aeropuerto”, “ /comercial” y “ /parque”), eliminandotodas las existentes, añadiendo lasACL 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, parqueACLy 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

Page 12: Administración de Sistemas

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 ungrupo (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 cadaproyecto, deben existir en eldirectorio /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 enC que realizase la función de listar un directorio, fuenecesario instalar el compilador deC:

[alumno:0:~]$ yum install -y gcc

Dichos programas utilizan la librería “unistd.h” que contiene funciones para el manejo de ficherosy directorios en sistemasUNIX. 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 cualquierposibilidad de entrada de algún directorio.Además, para que fuera posible la ejecución del comando “ls ” se utilizó, de la familiaexec, 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

Page 13: Administración de Sistemas

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.cy 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 deLinux .

El programa que permite evaluar cada proyecto, debe cumplirlo siguiente:

• Debe poder ser ejecutado únicamente por los ejecutivos de laorganización.

• Debe tener asignado los permisos suficientes para poder ejecutar el “ ls” sobre el direc-torio correspondiente.

Dichos programas tuvieron como propietario alroot, debido que es él único usuario que puede ac-ceder a todos esos directorios y realizar unls . 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 setuida 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 llamadoejecutivoy seañadió a este nuevo grupo a los dos ejecutivos y además, se modificó el grupo de los ficheros aejecutivo.

[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óna los grupos, y anular el resto, fueran losejecutivos los únicos que pudieran ejecutar estos ficheros con los privilegios deroot.

[alumno:0:~]$ chmod 4010 /usr/local/bin/lsCom

12

Page 14: Administración de Sistemas

ANEXOS

A. Script : Gestión de Usuarios

A continuación se muestra el código delscript que fue creado para la realización de la práctica. Elobjetivo principal no era sólo el satisfacer los requerimientos de la práctica, sino también una base parala gestión de usuarios de una manera más genérica. Además, seañadieron nuevas secciones bastanterelevantes bajo nuestro modesto criterio.

1 #!/bin/bash2

3 clear4

5 # Este filtro sólo dejará ejecutar el script al root6 if [ "‘whoami‘" != "root" ]; then7 echo -e "\n"8 echo -e "\033[1;31m Permiso denegado : No eres root. \033[0m"9 echo -e "\n"

10 exit 111 fi12

13 # Variable que almacenará el n o de usuarios estándar creados14 i=115

16 #*************************************************** ********************************17 # CABECERA Y SALIDA18 #*************************************************** ********************************19

20 # 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 }28

29 #*************************************************** ********************************30 # FUNCIONES DE LOS MENÚS31 #*************************************************** ********************************32

33 # GESTIÓN DE USUARIOS : USUARIOS34 # Función : Dará de alta un usuario en /etc/passwd y /etc/shad ow35 function altaUsu36 {37 cabecera "USUARIOS : ALTA"38 echo -e "\n \033[0m"39

40 # 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"53

54 # uid del usuario ************************************************55 # uid : de manera secuencial a partir de 500 (igual que RedHat)

13

Page 15: Administración de Sistemas

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 fi66

67 # Shell de Arranque **********************************************68 read -p " Shell : " shell69 [ -z "$shell" ] && shell="/bin/bash"70

71 # Contraseña *************************************************** **72 read -p " Contraseña : " password73 [ -z "$password" ] && password="$user"74

75 # Crear usuario **************************************************76 useradd -m -d $home -s $shell -u $uid $user77

78 # Crear contraseña ***********************************************79 echo "$password" | passwd --stdin $user80

81 # Modificación del tiempo de expiración, aviso y deshabilit ació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 fi90

91 sleep 192 }93

94 # GESTIÓN DE USUARIOS : USUARIOS95 # Función : Elimina un usuario96 function bajaUsu97 {98 cabecera "USUARIOS : BAJA"99 echo -e "\n \033[0m"

100

101 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 fi113

114 sleep 1115 }116

117 # GESTIÓN DE USUARIOS : USUARIOS118 # Función : Muestra los usuarios creados119 function MostrarUsu120 {121 cabecera "USUARIOS : MOSTRAR"122 echo -e "\n \033[0m"123

124 echo -e "\033[0;33m /etc/passwd \033[0m"125 grep -E x:5.{2}:5.{2} /etc/passwd

14

Page 16: Administración de Sistemas

126 echo -e "\n"127

128 sleep 2129

130 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 done135

136 echo -e "\033[1;34m \n"137 read -p " Presiona [ENTER] para continuar. " enterKey138 echo -e "\033[0m"139 }140

141 # 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"147

148 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 fi160

161 sleep 1162 }163

164 # GESTIÓN DE USUARIOS : GRUPOS165 # Función : Elimina un grupo166 function bajaGru167 {168 cabecera "GRUPOS : BAJA"169 echo -e "\n \033[0m"170

171 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 fi183

184 sleep 1185 }186

187 # 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"193

194 read -p " Nombre usuario : " user195 if [ -z "$user" ]; then

15

Page 17: Administración de Sistemas

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 fi212

213 sleep 1214 }215

216 # 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"222

223 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 fi241

242 sleep 1243 }244

245 # GESTIÓN DE USUARIOS : GRUPOS246 # Función : Mostrar grupos usuarios247 function MostrarGruUsu248 {249 cabecera "GRUPOS : MOSTRAR"250 echo -e "\n \033[0m"251

252 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 | uniq257

258 echo -e "\033[1;34m \n"259 read -p " Presiona [ENTER] para continuar. " enterKey260 echo -e "\033[0m"261 }262

263 # GESTIÓN DE USUARIOS : DIRECTORIO264 # Función : Crea un directorio con permisos265 function creaDir

16

Page 18: Administración de Sistemas

266 {267 cabecera "DIRECTORIO : CREAR"268 echo -e "\n \033[0m"269

270 read -p " Rutas/directorios separados por espacios : " directori o271 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 fi280

281 sleep 1282 }283

284 # GESTIÓN DE USUARIOS : DIRECTORIO285 # Función : Borrar un directorio286 function borrarDir287 {288 cabecera "DIRECTORIO : BORRAR"289 echo -e "\n \033[0m"290

291 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 fi297

298 sleep 1299 }300

301 # GESTIÓN DE USUARIOS : DIRECTORIO302 # Función : Modifica propietario y nombre del grupo de un dire ctorio303 function modiOwnGruDir304 {305 cabecera "DIRECTORIO : MODIFICAR"306 echo -e "\n \033[0m"307

308 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) : " ow nGroup313 if [ -z "$ownGroup" ]; then314 echo -e -n "\033[1;31m No se ha introducido cambio. \033[0m"315 else316 chown $ownGroup $directorio317 fi318 fi319

320 sleep 1321 }322

323 # GESTIÓN DE USUARIOS : DIRECTORIO324 # Función : Mostrar ls -l325 function mostrarDir326 {327 cabecera "DIRECTORIO : MOSTRAR"328 echo -e "\n \033[0m"329

330 read -p " Ruta del directorio : " directorio331 if [ -z "$directorio" ]; then332 ls -l333 else334 if [ -d "$directorio" ]; then

17

Page 19: Administración de Sistemas

335 ls -l "$directorio"336 else337 echo -e -n "\033[1;31m Directorio no existe. \033[0m"338 fi339 fi340

341 echo -e "\033[1;34m \n"342 read -p " Presiona [ENTER] para continuar. " enterKey343 echo -e "\033[0m"344 }345

346 # 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"352

353 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 fi368

369 sleep 1370 }371

372 # 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"378

379 echo -e "\033[0;32m Añadiendo soporte de cuotas a un sistema de fi cheros 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-Lo gVol02 /home/383

384 df385

386 echo -e "\n"387 echo -e "\033[0;32m Montando el sistema de ficheros con las opcio nes de usar cuotas de disco

.\033[0m"388 mount389 sleep 1390 echo -e "\033[0;32m El sistema de archivos home está listo para so portar cuotas.\033[0m"391 sleep 1392

393 echo -e "\n"394 echo -e "\033[0;32m Inicializando el contenido del fichero que l leva 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 1400

401 echo -e "\n"402 echo -e "\033[0;32m Indicando al núcleo que esté preparado para g estionar la cuotas.\033[0m"

18

Page 20: Administración de Sistemas

403 quotaon -uv /home/404 sleep 1405

406 echo -e "\n"407 echo -e "\033[0;32m Comprobando que el SO está gestionando las cu otas.\033[0m"408 quotaon -vuap409

410

411 echo -e "\033[1;34m \n"412 read -p " Presiona [ENTER] para continuar. " enterKey413 echo -e "\033[0m"414 }415

416 # GESTIÓN DE USUARIOS : CUOTAS417 # Función : Establecer cuota418 function estCuota419 {420 cabecera "CUOTAS : ESTABLECER"421 echo -e "\n \033[0m"422

423 read -p " Usuario : " user424

425 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 fi441

442 sleep 1443 }444

445 # GESTIÓN DE USUARIOS : CUOTAS446 # Función : Tiempo de gracia447 function tgracia448 {449 cabecera "CUOTAS : T GRACIA"450 echo -e "\n \033[0m"451

452 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‘457

458 sleep 1459 }460

461 # GESTIÓN DE USUARIOS : CUOTAS462 # Función : Mostrar463 function mostrarCuot464 {465 cabecera "CUOTAS : MOSTRAR"466 echo -e "\n \033[0m"467

468 repquota -u /home/469

470 echo -e "\033[1;34m \n"471 read -p " Presiona [ENTER] para continuar. " enterKey472 echo -e "\033[0m"

19

Page 21: Administración de Sistemas

473 }474

475 # 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"481

482 echo -e "\033[0;32m Añadiendo soporte de ACL a un sistema de fiche ros 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_as0 7-LogVol02 /home/486

487 df488

489 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 utiliz ar ACL.\033[0m"494

495 echo -e "\033[1;34m \n"496 read -p " Presiona [ENTER] para continuar. " enterKey497 echo -e "\033[0m"498 }499

500 # 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"506

507 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 fi517

518 }519

520 # GESTIÓN DE USUARIOS : ACL521 # Función : Elimina todas las ACL, añade los por defectos y de m anera recursiva a sus directorios522 function inicializa523 {524 cabecera "PERMISOS/ACL : INICIALIZAR"525 echo -e "\n \033[0m"526

527 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"529

530 sleep 1531 }532

533 # 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"539

540 read -p " ruta/directorio : " directorio

20

Page 22: Administración de Sistemas

541 [ -d "$directorio" ] && getfacl $directorio || echo -e -n "\033[1;31m El directorio no existe. \033[0m"

542

543 echo -e "\033[1;34m \n"544 read -p " Presiona [ENTER] para continuar. " enterKey545 echo -e "\033[0m"546 }547

548 #*************************************************** ********************************549 # MENÚS550 #*************************************************** ********************************551

552 # MENÚ USUARIOS -----------------------553 function menuUsu554 {555 cabecera USUARIOS556

557 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 }569

570 # MENÚ GRUPOS -------------------------571 function menuGru572 {573 cabecera GRUPOS574

575 select opcionGru in "Alta" "Baja" "Añadir Usuario a Grupo" "Mostra r 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 }589

590 # DIRECTORIOS -------------------------591 function menuDir592 {593 cabecera DIRECTORIOS594

595 select opcionDir in "Crear" "Borrar" "Modificar Propietario" "Mo strar 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 }608

609 # ACL ---------------------------------

21

Page 23: Administración de Sistemas

610 function menuACL611 {612 cabecera PERMISOS613

614 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 }627

628 # PERMISOS ----------------------------629 function menuPermiso630 {631 cabecera PERMISOS632

633 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 }644

645 # CUOTAS ------------------------------646 function menuCuota647 {648 cabecera CUOTAS649

650 select opcionCuota in "Activar" "Añadir" "Tiempo de Gracia" "Most rar 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 }663

664 # MENÚ PRINCIPAL ----------------------665 while true666 do667 cabecera "GESTIÓN DE USUARIOS"668

669 PS3="Elige una opción : "670 select opcion in "Usuarios" "Grupos" "Directorios" "Permisos" "C uotas" "Salir"671 do672 case "$opcion" in673 "Usuarios") menuUsu;;674 "Grupos") menuGru;;675 "Directorios") menuDir;;676 "Permisos") menuPermiso;;677 "Cuotas") menuCuota;;678 "Salir") clear

22

Page 24: Administración de Sistemas

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

Page 25: Administración de Sistemas

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 mecanismoPAM, 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 deaccount(la cual permitirá controlar la autenticación), con el indicador decontrol required (que indica que el resultado del módulo debe ser exitoso paracontinuar 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 interfazaccountexistente.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 tiempoMo Lunes Tu Martes We MiércolesTh Jueves Fr Viernes Sa SábadoSu Domingo Al Todos los días Wd Fin de Semanawk De lunes a viernes

El ejemplo escogido en clase para verificar el funcionamiento del PAM, fue restringir al usuariousu5el terminaltty3para que sólo puediera hacerlogin los lunes de 18 a 23 horas.

[alumno:0:~]$ vi /etc/security/time.conflogin;tty3;usu5;Mo1800-2300

Para comprobarlo, se habrió el terminaltty3 (CTRL + F3) y se intentó autenticarse conusu5, el cualno pudo hacerlo.

24