Manejo Usuarios y Permisos en Linux

36
3 Administración Linux I - Modalidad Virtual Tema 3 Manejo de usuarios y permisos C e n tr o d e E d u c a c i ón C o n t i n u a Edificio “Aulas y relación con el medio externo” Toledo y Lerida, Planta baja PBX: 25-25-766 [email protected]

description

Linux Manejo Usuarios y Permisos

Transcript of Manejo Usuarios y Permisos en Linux

3

Administración Linux I - Modalidad VirtualTema 3

Manejo de usuarios y permisos

Centro de Educación Continua

Edificio “Aulas y relación con el medio externo”Toledo y Lerida, Planta bajaPBX: 25-25-766

[email protected]

Capacitación en Modalidad Virtual Administración Linux I, Manejo de usuarios y permisos Ricardo Ortega Levantamiento de texto 2008: Ernesto Pérez Redacción de textos 2010: Ricardo Ortega Registro de derecho autoral: en trámite ISBN de este volumen: en trámite Depósito Legal: en trámite Publicado en http://cursos.cec-epn.edu.ec/aulavirtual/ desde Abril 2008 CENTRO DE EDUCACIÓN CONTINUA ESCUELA POLITÉCNICA NACIONAL UNIDAD DE EDUCACIÓN VIRTUAL Quito –Ecuador

1

ADMINISTRACIÓN DE LINUX I

Manejo de usuarios y permisos

Material para la modalidad virtual

Master Ricardo B. Ortega O.

www.ricardoortega.com

Objetivos del capítulo 3

Crear, borrar y administrar usuarios en Linux Dar permisos de escritura lectura o ejecución a directorios y archivos Activar cuotas Utilizar el su y el sudo

Prerrequisitos para el capítulo 3

Tener instalado y funcionando un computador con Linux CENTOS. Conocer los comandos básicos de Linux Conocer el uso de un editor de texto

Recursos necesarios para el capítulo 3

Un computador con Linux CENTOS instalado y funcionando.

La administración de usuarios se debe hacer desde el usuario root.

Recomendaciones para el capítulo 3

LINUX CENTOS De aquí en adelante, nos limitaremos a explicar el funcionamiento de CENTOS. Las pruebas en otras distribuciones quedan a su propia cuenta y riesgo.

MODO TEXTO a menos que se indique otra cosa, todos los comandos se deben escribir desde una sesión de bash desde el usuario root. Si se dice escriba system-config-users se está diciendo precisamente eso: desde el bash, escriba ese texto y presione ENTER.

CLAVES FÁCILES DE RECORDAR PERO DIFÍCILES DE ADIVINAR: Para la creación de usuarios necesitará asignarles claves fáciles para recordar, pero que no sean fácilmente adivinables por terceras personas.

LEA LOS MENSAJES: Observe los mensajes que le aparecen. No pase por alto los mensajes de error. La mayoría de usuarios no lee los mensajes y cuando se le pregunta “qué decía el mensaje” la respuesta es “no sé, nunca leo los mensajes”. Por supuesto que esa actitud no es propia de aspirantes a administradores de redes.

Contenidos

OBJETIVOS DEL CAPÍTULO 3 .................................................................................................................................... 1

2

PRERREQUISITOS PARA EL CAPÍTULO 3 ............................................................................................................. 1 RECURSOS NECESARIOS PARA EL CAPÍTULO 3 ................................................................................................ 1 RECOMENDACIONES PARA EL CAPÍTULO 3 ....................................................................................................... 1 CONTENIDOS ................................................................................................................................................................. 1 3.1 USUARIOS Y GRUPOS ............................................................................................................................................ 2

3.1.1 Términos generales ............................................................................................................................................ 2 3.1.2 Creación de usuarios ......................................................................................................................................... 5 3.1.3 Proceso interno para crear un usuario............................................................................................................ 10 3.1.4 Cómo cambiar el shell predeterminado ........................................................................................................... 11 3.1.5 Consolas múltiples ........................................................................................................................................... 11

3.2 ADMINISTRACIÓN DE PERMISOS ................................................................................................................... 11 3.2.1 Interpretando los permisos .............................................................................................................................. 11 3.3.2 Los permisos en forma numérica ..................................................................................................................... 16 3.3.2 Cambio de usuario propietario (owner) .......................................................................................................... 17 Cambio de grupo propietario ................................................................................................................................... 18 Cambio de permisos ................................................................................................................................................. 19 Cambiar permisos a los directorios: ........................................................................................................................ 21

3.3 SUBSTITUIR USUARIO ......................................................................................................................................... 23 3.3.1 su ...................................................................................................................................................................... 23 3.3.2 su - ................................................................................................................................................................... 25

3.4 DELEGACIÓN DE PRIVILEGIOS DE SUPERUSUARIO ................................................................................ 27 3.4.1 Alternativas para delegar funciones de administración .................................................................................. 27 3.4.2 El mecanismo sudo .......................................................................................................................................... 27

3.5 LIMITANDO EL ESPACIO (CUOTAS) DE DISCO ........................................................................................... 30 3.5.1 Manejo de quotas ............................................................................................................................................. 30 3.5.2 Activando las cuotas ........................................................................................................................................ 32 3.5.3 ¿Cómo hacemos para editar las cuotas? ......................................................................................................... 33

3.1 Usuarios y Grupos

3.1.1 Términos generales ¿Qué es un usuario de Linux?

Es la combinación de usuario, contraseña, carpeta de inicio, permisos y recursos que se asignan para utilizar un computador, de tal manera que este usuario se conserve independiente y separado de otros.

Por ejemplo puedo crear usuarios llamados ricardo, juan, mariana, Ricardo.Ortega, etc. Recuerde que en Linux es distinto escribir Ricardo que ricardo o RICARDO, son tres usuarios distintos, así que mejor evite este tipo de nombres y adopte una única nomenclatura: o todo minúsculas, o sepárelos por puntos. No se permiten espacios en blanco en los nombres de los usuarios.

Qué es un grupo?

Es un conjunto de usuarios a los cuales se les asigna permisos similares. Por ejemplo puedo tener un grupo llamado estudiantes a los cuales les doy globalmente permisos sobre ciertos archivos o directorios y basta agregar a un nuevo usuario al grupo respectivo y listo, no necesito volver a definir sus permisos.

Dónde se almacenan los nombres de usuarios y sus permisos?

3

Esta pregunta es fácil de responder y muy interesante. Demuestra la filosofía de Linux. La información se guarda en archivos planos en la capeta /etc bajo los siguientes nombres:

passwd

group

shadow

Aunque no lo parezca, el sistema es bastante potente y al mismo tiempo sencillo de recordar y administrar. Si desea mirar los nombres de usuario creados, solo tiene que mirar el archivo /etc/passwd. Si desea mirar los grupos, solo tiene que abrir el archivo /etc/group. El archivo /etc/shadow guarda las contraseñas que por supuesto están cifradas para evitar que sean conocidas por terceros.

ARCHIVO DESCRIPCIÓN passwd El archivo /etc/passwd guarda la lista de usuarios junto con características como uso de

contraseña, UID (User ID), nombre completo, directorio inicial y shell inicial.

group El archivo /etc/group guarda la lista de grupos y su respectivo GID (Group ID) o identificador de grupo.

4

shadow El archivo /etc/shadow guarda la lista de cada usuario con la información de sus

contraseñas (tiempo de caducidad, contraseña cifrada, etc.)

Los tres archivos deben estar sincronizados, por lo cual es importante que el administrador los conozca y se preocupe de sacar respaldos periódicos. Total son solo tres archivos relativamente pequeños.

Un administrador cauteloso podrá borrar los usuarios y grupos que no planea utilizar. Pero esto lo deberá hacer luego de concluir el ciclo de cursos, para saber cuáles usuarios y grupos son los que realmente no necesita. Si hoy borra un usuario importante, digamos proxy o sshd, simplemente NO podrá utilizar esas facilidades. Si no planea usar la impresora, borre el usuario lp de los tres archivos.

Adicionalmente, cada usuario tiene asignado un directorio inicial donde podrá colocar sus datos. Cada usuario solo tiene permisos para su respectivo directorio.

Análisis detallado de estos archivos:

En Linux los usuarios se almacenan en el archivo /etc/passwd, donde no se almacenan las claves, aunque por su nombre lo parezca (anteriormente sí se guardaban allí las claves, pero luego se pasaron al archivo shadow que significa sombra, con lo cual se dio mayor seguridad a Linux).

La información que se guarda en /etc/passwd (para cada usuario, esto es, en cada línea) es la siguiente:

username

passwd (ya no se usa, por lo que aparece una x cuando el usuario tiene una clave en el archivo shadow, o está en blanco si el usuario no tiene contraseña). Ojo, esta x es importante, porque basta quitar la x para desactivar la clave del usuario.

UID, o identificador de usuario. Es un número entre 1 y 65535, típicamente es único para cada usuario del sistema. El UID 0 se utiliza para el usuario administrador (root). Cualquier usuario que tenga UID 0 tendrá derechos de root. Los UID de 1 a 499 son utilizados por el sistema para usuarios creados automáticamente al instalarse paquetes. Del UID 500 en adelante se crean los usuarios propios de nuestro sistema. Esta asignación de UID es automática y siempre se toma el número más alto y va ascendiendo. Esto provocará vacíos y números no asignados.

GID, o grupo primario de usuario. Típicamente un número entre 0 y 65535. El GID 0 indica que el usuario pertenece al grupo root (un grupo con privilegios)

nombre del usuario (campo informativo)

directorio base (home dir)

shell que se ejecutará

5

La información que se guarda en /etc/shadow (para cada usuario, esto es, en cada línea) es la siguiente:

username

clave encriptada

día en que la clave fue cambiada por ultima vez

días durante los cuales la clave no puede ser cambiada

días a partir de los cuales la clave tiene que ser cambiada

días de advertencia en los cuales la clave debe cambiarse

días después de los cuales la clave expira y se deshabilita la cuenta

día en que se deshabilitó la clave

El archivo /etc/group es bastante sencillo, ya que solamente contiene el nombre del grupo y el GID (identificador de grupo).

Es muy importante resaltar que los permisos y todo el funcionamiento de Linux NO se basa en el nombre del usuario o del grupo sino en su ID (UID y GID). Supongamos que se crea el usuario ricardo con el UID 500 y luego de un tiempo lo borra y crea otro usuario juan. Es posible que el sistema le asigne el número 500, o el administrador puede asignar el 500 manualmente (modificando los archivos indicados: shadow, group y passwd). Resultará que el nuevo usuario tendrá acceso a los archivos y carpetas que anteriormente tenía ricardo, por la sencilla razón de que ambos usuarios tienen el mismo UID que es 500.

Para evitar esto, el sistema no reutiliza los números anteriores y siempre toma el mayor y lo incrementa, pero ya dijimos que el administrador puede cambiar manualmente y puede provocar estos inconvenientes o beneficios (ya que puede ser que eso es precisamente lo que desea lograr, es decir que los archivos de ricardo sean accedidos por juan).

Esto nos lleva a la lógica conclusión de que si un usuario distinto de root tiene su UID o su GID en 0, tendrá privilegios similares a root. Esto puede ser beneficioso si el administrador lo aprovecha, pero puede ser perjudicial si lo aprovechan terceros. Deberá revisar periódicamente los archivos passwd, shadow y group para saber si alguien modificó los UID o GID y se tomó privilegios de administrador (puso 0 en la columna).

Otra columna que debe vigilar es la segunda columna de /etc/passwd que generalmente tiene una x. La falta de una x significa que ese usuario tiene deshabilitada la clave. De hecho, una forma fácil de desactivar la clave de root cuando no la conocemos es quitar la letra x, o sea dejar root::etc. en vez de root:x:.. etc. De esta forma, podemos ingresar como root sin que pida la clave.

Linux es seguro, pero debe estar alerta frente a terceros que conozcan cómo vulnerar estas seguridades. No le estamos enseñando cómo hackear un servidor linux sino cómo evitar que su servidor sea hacheado. Es decir estamos formando administradores competentes.

3.1.2 Creación de usuarios Existen varias formas de crear usuarios en Linux, el resultado es el mismo: la información se almacena en los tres archivos ya indicados al inicio de este capítulo.

Modo texto

Comando adduser o useradd

6

El mensaje BAD PASSWORD apareció porque para el password se utilizaron solamente letras, lo que significa que un ataque basado en diccionario o en fuerza bruta quebrará ese password en menos de lo que canta un gallo. Hay que usar claves más complejas, pero fáciles de recordar.

Modo web

Para administrar usuarios en ambiente web se puede usar el programa webmin que se verá en el módulo 4.

Modo gráfico

No tenemos inconveniente en que use el modo gráfico para su aprendizaje, es más, lo recomendamos, pero para ejercer sus actividades de administrador, le recomendamos que utilice exclusivamente el modo texto.

En modo gráfico escriba (en el bash, por supuesto) system-config-users y le aparecerá esto:

Aquí podrá apreciar las diferentes columnas del archivo /etc/passwd.

Puede mostrar todos los usuarios si elije Editar -> Preferencias y quita la marca en Ocultar Usuarios y Grupos del sistema.

7

8

Usando los botones superiores se puede añadir un usuario o un grupo. La información es la indicada. Normalmente el shell de conexión es el bash, aunque algunos podrían preferir otro. Normalmente se deja que el sistema cree el directorio principal automáticamente (en este caso /home/juan), se creará un grupo privado llamado juan (en /etc/group) y se asignará el siguiente UID a menos que elija Especificar ID manualmente y escriba un UID no existente.

Para crear el grupo solo debe indicar el nombre del grupo y el sistema le asignará el siguiente GID disponible, a menos que Ud. especifique el ID de grupo manualmente.

9

En Propiedades Ud. puede modificar varias características del usuario (en este caso de juan), por ejemplo los grupos a los que pertenece o la información de caducidad de la cuenta.

Ahora el usuario juan pertenece a los grupos juan (privado) y estudiantes.

Recuerde que todo esto va a parar a los archivos ya indicados, así que una buena manera de aprender el significado de esos archivos es usar el modo gráfico y luego mirarlos.

El archivo /etc/group luego de crear desde el modo gráfico el usuario juan

10

El archivo /etc/passwd

Y el archivo /etc/shadow

El significado de estas columnas ya fue explicado, pero le quedará más claro si utiliza el programa en modo gráfico y mira el resultado en los archivos indicados.

Borrar usuarios

Para borrar usuarios en modo texto se usa el comando userdel seguido del nombre de usuario.

Este comando no borra la carpeta /home/ricardo, a menos que escriba userdel –r seguido del nombre de usuario, con lo cual borará no solo los archivos dentro de home sino los correos en /var/spool/mail

3.1.3 Proceso interno para crear un usuario El proceso completo para la creación de un usuario es el siguiente:

1. Se lee /etc/defaults/useradd donde se encuentra la información sobre el shell por defecto a asignar a los usuarios nuevos (/bin/bash). Nosotros podemos ver /etc/defaults/useradd con el comando cat, para enterarnos de qué dice.

2. Se crea un nuevo grupo en /etc/group, con el nombre del usuario que se está creando; este GID será el que se asignará en /etc/passwd.

3. Se agrega una línea en /etc/passwd, donde se almacenará el identificador de usuario (UID), el grupo primario del usuario (GID), el directorio raíz, el shell que se ejecutará para el usuario.

4. Luego se crea una línea en /etc/shadow donde se indicará el username y la clave en formato deshabilitado (!!), así como opcionalmente los tiempos de expiración de las claves, etc.

5. A continuación se sigue con el directorio raíz del usuario (usualmente /home/username).

11

6. Posteriormente se debe proceder a cambiar la clave del usuario por una válida, y se actualiza /etc/shadow con la nueva clave.

3.1.4 Cómo cambiar el shell predeterminado La mayoría de los usuarios que se crean en un sistema Linux se usan solo como servidor de mensajería, es decir que los usuarios no acceden directamente al shell del sistema, sino que usan sus contraseñas para leer los correos y/o enviarlos, así como para potencialmente hacer otras tareas como acceder via ftp.

Entre los usuarios que se tendrá (nivel gerencial, secretarias, ingenieros de otras áreas, etc.) casi nadie conoce el uso del shell, por lo tanto no es necesario que lo tengan. De esta forma hay un potencial ahorro de problemas a la hora de un ataque, pues muchos hacen lo que se conoce como un ataque de diccionario, mediante el cual intentan adivinar las claves de los usuarios de un sistema para poder entrar por esa vía. Una vez dentro intentarán otros métodos (que se explicarán en cursos más avanzados) mediante los cuales pueden obtener privilegios de root.

Por lo tanto, para leer correos y usar ftp no es necesario que un usuario tenga asignado un shell como bash, pues ello más bien sería un potencial problema. Por eso es recomendable que siempre que se cree este tipo de usuarios se haga con un shell no válido o un shell que no deje entrar al usuario. Por ejemplo, se puede cambiar, usando vi /bin/bash por /bin/false

Ahora, cambiar en /etc/passwd unos 10 usuarios es algo posible, a diferencia de hacerlo con unos 50 ó 100. Es mejor crear todos los usuarios con un shell que no sea /bin/bash.

Esto se puede lograr editando /etc/defaults/useradd. Se debe cambiar la línea que dice:

SHELL=/bin/bash

por

SHELL=/bin/false

De esta forma cualquier usuario que se cree a partir de ahora será creado con el shell /bin/false, a menos que se indique otra cosa.

Para verificarlo, se creará un usuario nuevo con el nombre eperez, hay que poner atención en que, una vez creado el usuario eperez sea /bin/false su shell por defecto en /etc/passwd (verificar con cat /etc/passwd).

3.1.5 Consolas múltiples Si el usuario tiene asignado el shell /bin/bash o algún otro distinto de /bin/false, puede entrar a nuestro sistema, por ejemplo desde la primera consola de texto (presionar CTRL ALT F1). Si quieres regresar al ambiente gráfico puedes apretar CTRL-ALT-F7

3.2 Administración de Permisos

3.2.1 Interpretando los permisos En el capítulo anterior, al ejecutar el comando ls -l (listado extendido), se vio que las primeras columnas de ese listado tenían algo así:

-rw-rw-r-- 1 eperez eperez 2748 Feb 22 19:01 nuestroserver.png drwxr-xr-x 3 eperez eperez 4096 Mar 4 14:15 Desktop

Al leer esto con atención se podrían deducir algunos datos (se ha marcado en colores cada caso):

12

1. nombre del archivo 2. hora 3. día y mes 4. tamaño (en bytes)

Pero las otras columnas ¿qué significan?, ¿por qué en el ejemplo aparece eperez eperez?

Los nombres que aparecen son el usuario y el grupo de propietarios del archivo o directorio, respectivamente.

Por ejemplo ll /home

Se puede deducir que el dueño del directorio ricardo es el usuario ricardo, y el grupo ricardo. Igual ocurre con el directorio juan.

Esto impide que ricardo pueda alterar información de juan.

Por omisión, en Linux cada usuario tiene su propio grupo, es por eso que cada archivo o directorio tiene un usuario y grupo con el mismo nombre.

Ahora, los primeros diez caracteres (en amarillo en la tabla anterior) son los tipos de archivos y permisos:

• El primer caracter puede ser una - , que significa que es un archivo, o una d si fuera un directorio, también puede ser una l, que indicaría que es un link (enlace directo). • Los siguientes nueve caracteres se dividen en 3 grupos de tres e indican

o Los tres primeros: permisos para el usuario dueño (user). o El segundo grupo de tres: permisos para el grupo dueño (group). o El tercer grupo de tres: permisos para los otros (other).

Por ejemplo: -rw-rw-r-- 1 eperez eperez 177341 Feb 22 20:17 bienvenidos drwxrwxr-x 2 eperez eperez 4096 Mar 6 08:04 bin

13

• En el primer caso, el archivo se llama bienvenidos y tiene 177341kb de tamaño, el usuario dueño es eperez, el grupo dueño es: eperez

o Los permisos para el usuario dueño son rw- o Los permisos para el grupo dueño son: rw- o Los permisos para los demás (otros) usuarios son: r--

• En el segundo caso, el directorio se llama bin, y tiene 4k de tamaño, el usuario dueño es: eperez, el grupo dueño es: eperez.

o Es un directorio porque el primer caracter es una d. o Los permisos para el usuario dueño son rwx. o Los permisos para el grupo dueño son: rwx. o Los permisos para los demás (otros) usuarios son: r-x.

Pero ¿qué significan esas letras?

• r: permiso de lectura. • w: permiso de escritura. • x: permiso de ejecución (si es un directorio, el permiso indica que se puede entrar al

directorio).

La inexistencia de uno de los permisos (leer, escribir o ejectuar) se representa con un – (guión o signo menos). Esto dará siempre como resultado nueve caracteres para los permisos, dando un total de 10 si juntamos el primer carácter que indica el tipo de archivo.

Ahora el alumno deberá reconocer, con esta notación, qué tipo de permisos habría en los siguientes ejemplos:

1. rwxrwxr-- 2. rwxrw-r-- 3. rw-r-----

1. El usuario dueño y el grupo tienen todos los permisos, los otros solo pueden leer.

2. El usuario dueño tiene todos los permisos, el grupo puede leer y escribir, mas no ejecutar, y los otros solo pueden leer.

3. El dueño puede leer y escribir, el grupo sólo puede leer y los otros no pueden hacer nada.

Como se ve, aquellas letras que parecían tan complicadas solamente explican qué tipo de permisos tienen los archivos en cuestión.

14

Además de los permisos que se han explicado hay más, hay tres tipos más que todos los administradores deberían conocer. Son los permisos setuid, setgid y sticky.

Estos permisos juegan un papel clave en ciertas operaciones UNIX puesto que facilitan funcionalidades que no se suelen permitir a los usuarios normales. Para comprenderlas totalmente hay que comprender la diferencia entre el ID real del usuario y el ID efectivo.

El ID del usuario real es el UID que arranca (y el propietario) del proceso. El UID efectivo es el ID bajo el que se ejecuta el proceso. Veamos un ejemplo; el programa passwd(1) se ejecuta con el ID real del usuario puesto que el usuario está cambiando su contraseña. Pero para poder manipular la base de datos de contraseñas debe ejecutarse con el ID efectivo del usuario root. De este modo es posible que los usuarios cambien su contraseña sin llegar a ver un error de “Permission Denied” (permiso denegado).

Nota: La opción nosuid de mount(8) hace que estos binarios den errores silenciosos, es decir, fallarán pero el usuario no recibirá ningún mensaje de error por ello. Esta opción no funciona siempre, pues, según la página man de mount(8), un «wrapper» nosuid puede sortear esta limitación.

El permiso setuid puede asignarse colocando un número cuatro (4) antes de los permisos. Se ve mejor con un ejemplo:

# chmod 4755 ejemplosuid.sh

Los permisos de ejemplosuid.sh deberían ser así:

-rwsr-xr-x 1 trhodes trhodes 63 Aug 29 06:36 ejemplosuid.sh

Fíjese atentamente en la s que ha aparecido en los permisos del fichero, en la parte de los permisos del propietario; esa s está en donde estaría el bit de ejecución. Gracias a esto el funcionamiento de aplicaciones que necesitan permisos elevados, como passwd, pueden funcionar.

15

Si quiere ver un ejemplo con sus propios ojos abra dos terminales. En una arranque un proceso (ejecute) passwd con un usuario normal. Mientras la aplicación espera a que le de una nueva contraseña busque la información de usuario del proceso passwd en la tabla de procesos.

En la terminal A:

Changing local password for trhodes Old Password:

En la terminal B:

# ps aux | grep passwd trhodes 5232 0.0 0.2 3420 1608 0 R+ 2:10AM 0:00.00 grep passwd root 5211 0.0 0.2 3620 1724 2 I+ 2:09AM 0:00.01 passwd

Tal y como se ha dicho, un usuario normal puede ejecutar passwd, pero en realidad está utilizando el UID efectivo de root.

El permiso setgid actúa del mismo modo que el setuid, pero afecta a los permisos del grupo. Cuando una aplicación funciona con esta configuración lo hace con los permisos del grupo al que pertenece el fichero, no los del usuario que ha arrancado el proceso.

Si quiere utilizar el permiso setgid debe situar un núnmero dos (2) al principio de los permisos que vaya a asignar mediante chmod.

# chmod 2755 ejemplosuid.sh

La nueva configuración tiene un aspecto muy similar a la que tenía antes, pero observe que la s de antes está ahora en el campo de los permisos de grupo:

-rwxr-sr-x 1 trhodes trhodes 44 Aug 31 01:49 ejemplosuid.sh

Nota: En ambos ejemplos, incluso si el «script» en cuestión es ejecutable, no se va a ejecutar con un EUID distinto o un ID efectivo de usuario porque los «scripts» de shell no pueden acceder a la llama del sistema setuid(2).

Los dos permisos que acabamos de mostrar los bits de permisos (setuid y setgid) pueden reducir el nivel de seguridad haciendo que se escalen los permisos. Pero hay un tercer bit especial de permisos que puede ser de mucha ayuda para reforzar la seguridad del sistema: el sticky bit.

El sticky bit( que podríamos traducir como «bit pegajoso») aplicado a un directorio hace que solamente el propietario de un fichero pueda borrarlo. Esto evita el borrado de ficheros ajenos en directorios públicos como /tmp. Si quiere usarlo coloque un uno (1) antes de los permisos. Veamos un ejemplo:

# chmod 1777 /tmp

Para ver el ;sticky bit en acción usamos ls:

# ls -al / | grep tmp drwxrwxrwt 10 root wheel 512 Aug 31 01:49 tmp

16

El sticky bit es la letra t al final de los permisos.

Las nuevas versiones de Linux tienen 11 caracteres. El significado de los atributos de los archivos en la última columna (columna 11)

Tabla 4.1: Atributos de los archivos en extXfs

Atributo Significado

A Don´t update Atime

S Synchronous updates

a Append only

c Compressed file

i Immutable file

d No Dump

s Secure deletion

u Undeletable file

3.3.2 Los permisos en forma numérica Alguien que había recibido hace muchos años un curso de Unix, insistía en indicar que el profesor de aquel curso usaba números en vez de las letras antes mencionadas, por ejemplo, este permiso:

• rwxrw-r-- él insistía en que se decía: 764 Así que le pidieron explicara un poco más el proceso de numeración que reemplazaba a las 9 letras.

Cada grupo de permisos constaba de 3 letras que totalizaban 9 caracteres, y al dividir el permiso anterior se ve lo siguiente:

• rwx • rw-

• r- Al asignar en notación binaria el valor de 1 cuando las letras están activas y el valor de 0 cuando no lo están (-) quedaría lo siguiente:

• rwx quedaría como: 111 (las tres letras están activas) • rw- quedaría como 110 • r-- quedaría como 100

17

• rwxrw-r-- se leería como: 764 (rwx es igual a 111, que es igual a 7; rw- es igual a 110, que a su vez es igual a 6; r—es igual a 100 y a su vez igual a 4).

Ejercicios:

• rw ----- • r ------ • rw-rw-rw- • r--r--r--

• rwxr--r-Respuestas:

• 600 • 400 • 666 • 444 • 744

Es un poco complicado de usar, pero increíblemente hay muchas personas que prefieren este formato, pues es más conciso para expresar un permiso.

3.3.2 Cambio de usuario propietario (owner) El comando chown (change owner o cambiar propietario) sirve para cambiar al propietario de un archivo o directorio.

Para utilizar este comando primero se crea un archivo llamado prueba. Desde el usuario root se utilizará el ya conocido comando touch:

[root@eperez ~]# touch prueba

[root@eperez ~]# ls -l prueba

-rw-r--r--1 root root 0 Mar 9 21:01 prueba

Caracteres Binario Decimal rwx 111 7 rw- 110 6 r-x 101 5 r-- 100 4 — 000 0

Según la tabla

18

Resultó un archivo llamado prueba, con el dueño root y el grupo dueño root. Los permisos eran 644.

Para cambiar el dueño de un archivo se utilizará el comando chown con la sintaxis como se explica a continuación:

chown nuevousuario nombredearchivo

por ejemplo: [root@eperez ~]# chown eperez prueba

[root@eperez ~]# ll prueba

-rw-r--r--1 eperez root 0 Mar 9 21:01 prueba

El comando chown hizo que el usuario eperez sea el dueño del archivo prueba. No alteró los permisos, que se mantienen como 644.

Cambio de grupo propietario

Si se quiere cambiar de grupo de usuarios propietarios hay dos opciones:

a. El comando chgrp (change group), que cambia el grupo propietario Tiene la siguiente sintaxis: chgrp nuevogrupo nombredearchivo

permite cambiar solamente el grupo, por ejemplo: [root@eperez ~]# ll prueba -rw-r--r--1 eperez root 0 Mar 9 21:01 prueba

[root@eperez ~]# chgrp eperez prueba [root@eperez ~]# ll prueba -rw-r--r--1 eperez eperez 0 Mar 9 21:01 prueba

En efecto, el archivo inicialmente pertenecía al grupo root y después de ejecutar el comando CHange GRouP este pasó a pertenecer al usuario eperez.

b. El comando chown, con otra sintaxis, que cambia el grupo propietario y el usuario propietario a la vez.

El formato para utilizar el comando chgrp con esta función es: chown

nuevousuario.nuevogrupo nombredearchivo

19

Por ejemplo, para ponerle a este archivo el usuario root y el grupo root, ambos en un solo comando, se usaría:

[root@eperez ~]# ll prueba -rw-r--r--1 eperez eperez 0 Mar 9 21:01 prueba

[root@eperez ~]# chown root.root prueba [root@eperez ~]# ll prueba -rw-r--r--1 root root 0 Mar 9 21:01 prueba

Además del signo de punto (.) se puede usar el signo dos puntos (:) para separar usuario de grupo en caso de que el nombre de los usuarios y/o grupos contuvieran un punto (.) . Por ejemplo, con un usuario o grupo llamado: e.perez, si se usara el signo de . no se podría determinar bien dónde acababa el nombre del usuario y dónde comenzaba el del grupo. Es por esto que muchas personas prefieren usar los dos puntos siempre.

En consecuencia, el siguiente comando es equivalente. [root@eperez ~]# ll prueba -rw-r--r--1 eperez eperez 0 Mar 9 21:01 prueba

[root@eperez ~]# chown root:root prueba [root@eperez ~]# ll prueba -rw-r--r--1 root root 0 Mar 9 21:01 prueba

Cambio de permisos

El comando chmod permite cambiar los permisos para cada grupo de usuario. Tiene dos formas:

1. Mediante los números convertidos de binario (755, 600, etc).

2. Mediante el uso de caracteres identificando a los usuarios/grupos y a los permisos.

1- Números binarios: Para cambiar los permisos se pueden utilizar los números convertidos en binarios con el siguiente formato: chmod nuevopermiso nombredearchivo Por ejemplo: [root@eperez ~]# ll prueba -rw-r--r--1 root root 0 Mar 9 21:01 prueba

[root@eperez ~]# chmod 400 prueba [root@eperez ~]# ll prueba

20

-r-------- 1 root root 0 Mar 9 21:01 prueba

El archivo inicialmente tenía de permisos rw-r--r-- (644) y al ejecutar el chmod 400 prueba, se cambiaron a r --- (400).

2- Uso de caracteres para identificar usuarios/grupos y permisos. Esta forma en cambio es muy cómoda porque permite identificar precisamente lo que se realiza. El formato es muy parecido: chmod nuevopermiso nombredearchivo

La parte de nuevopermiso está formada a su vez por 3 partes:

• A quien se le asignará el permiso: usuario (u), grupo (g), otros (o) y/o todos (a)

• El permiso se quitará (-); pondrá (+); o se ignorará los permisos previos (=) • ¿Sobre qué permiso se trabajará?: Lectura (r), Escritura (w), y/o ejecución (x)

Por ejemplo, si quisiera dar el permiso de lectura para todos, podría poner: [root@eperez ~]# ll prueba -r ........ 1 root root 0 Mar 9 21:01 prueba [root@eperez ~]# chmod a+r prueba [root@eperez ~]# ll prueba -r--r--r-- 1 root root 0 Mar 9 21:01 prueba

En efecto, al poner a+r (Todos, darle, lectura), el archivo prueba se cambió a r--r--r-(666)

Otra manera de hacer la misma acción es poniendo: chmod

ugo+r prueba

En la primera parte, en la que se señaló a quién se le darán los permisos, se puede poner más de una opción, como en el caso anterior: a (todos) es equivalente a ugo (usuarios, grupos y otros).

De igual manera, en la parte en la que se específicó qué permisos se están modificando, se tiene más de una opción.

Por ejemplo, si se busca dar derecho de escritura y ejecución al usuario dueño y al grupo, debería ponerse:

21

[root@eperez ~]# ll prueba -r--r--r-- 1 root root 0 Mar 9 21:01 prueba [root@eperez ~]# chmod ug+wx prueba [root@eperez ~]# ll prueba -rwxrwxr-- 1 root root 0 Mar 9 21:01 prueba

El signo = sirve para ignorar los permisos previos y cambiar los permisos a los solicitados. Por ejemplo, darles a todos solamente permisos de lectura:

[root@eperez ~]# ll prueba -rwxrwxr-- 1 root root 0 Mar 9 21:01 prueba [root@eperez ~]# chmod ugo=r prueba [root@eperez ~]# ll prueba -r--r--r-- 1 root root 0 Mar 9 21:01 prueba

Al poner ugo=r se indica: a los usuarios, grupo y otros,(u g o) ponerles (=) permisos de lectura (r). Se ignoran los permisos que había antes y se modifican los permisos.

Cambiar permisos a los directorios:

Cualquiera de los comandos antes mencionados puede utilizarse para cambiar los permisos o dueños de un directorio. Si se quiere cambiar los permisos recursivamente se utilizará el ya conocido switch -R para que se cambien los permisos al directorio y a todos los archivos y directorios que están dentro de él. Por ejemplo, al crear un directorio llamado: test que contenga un directorio llamado

uno y otro llamado dos

[root@eperez ~]# mkdir test [root@eperez ~]# mkdir test/uno [root@eperez ~]# mkdir test/dos [root@eperez ~]# ll test/ total 8 drwxr-xr-x 2 root root 4096 Mar 9 21:28 dos drwxr-xr-x 2 root root 4096 Mar 9 21:28 uno [root@eperez ~]# ll drwxr-xr-x 4 root root 4096 Mar 9 21:28 test

Estos directorios eran propiedad de root y el grupo root.

Para cambiarles el dueño y el grupo a eperez se haría:

[root@eperez ~]# chown -R eperez.eperez test [root@eperez ~]# ll drwxr-xr-x 4 eperez eperez 4096 Mar 9 21:28 test [root@eperez ~]# ll test/ drwxr-xr-x 2 eperez eperez 4096 Mar 9 21:28 dos drwxr-xr-x 2 eperez eperez 4096 Mar 9 21:28 uno

22

El switch -R cambió el dueño y grupo al directorio y a todos los directorios y archivos que estaban dentro de ese directorio.

Este mismo switch puede ser utilizado con chmod y chgrp

chmod

Se usa para cambiar los permisos de los archivos y directorios. Los tipos de permisos son los tres anteriormente estudiados

r :lectura w :escritura x :ejecución (acceso cuando se trata de un directorio)

Los permisos los podemos agrupar en

u : usuario g : grupo o : otros

Para añadir un permiso se utiliza el + mas y para quitarlo el - menos, y para asignar quitando otros cambios se usa el =, con esto agregar a todos el permiso de lectura a un archivo sería así:

chmod ugo+r archivo

si deseamos que todos mis archivos y carpetas sean accedidas y leídas por las personas de mi grupo, puedo agregar la opción de recursividad -R

chmod g+rx * -R

Cambio de permisos utilizando números

Es posible asignar un número identificatorio a cada tipo de permiso, considerando lo siguiente:

r = 4 (lectura) w = 2 (escritura) x = 1 (ejecución) - = 0 (sin permisos)

Cuando asignamos los permisos utilizando números debemos tener en cuenta que primero se sumarán los valores y dicho resultado es el que se usará.

Ejemplos

rw------- (600) Sólo el propietario tiene el derecho de leer y escribir.

23

chmod 600 archivo.txt

rw-r--r-- (644) Sólo el propietario tiene los permisos de leer y escribir; el grupo y los demás sólo pueden leer.

rwx------ (700) Sólo el propietario tiene los derechos de leer, escribir y ejecutar el archivo.

rwxr-xr-x (755) El propietario tiene los derechos de leer, escribir y ejecutar; el grupo y los demás sólo pueden leer y ejecutar.

rwx--x--x (711) El propietario tiene los derechos de lectura, escritura y ejecución; el grupo y los demás sólo pueden ejecutar.

rw-rw-rw- (666) Todo el mundo puede leer y escribir en el archivo. ¡No es una buena elección!

rwxrwxrwx (777) Todo el mundo puede leer, escribir y ejecutar. ¡Tampoco es buena elección!

chgrp

Cambia el grupo a un archivo o carpeta, su uso es simple, se especifica el grupo y de ahí a que se le desea cambiar, al igual que a chmod tiene la opción -R para cambiar el grupo de forma recursiva, por ejemplo podemos querer cambiar el grupo del directorio public_html y su contenido al grupo apache.

chgrp apache public_html -R

chown

Cambia el usuario (owner) y opcionalmente el grupo a un archivo o directorio, su uso es similar a los comandos anteriores, por ejemplo podríamos copiar una carpeta carpeta como root dentro del usuario gulixiano que pertenece al grupo gulix, el paso siguiente es que gulixiano pueda disponer de dicha carpeta y archivos interiores, el comando que debería ejecutar es:

chown gulixiano:gulix carpeta -R

3.3 Substituir Usuario

3.3.1 su El comando su permite cambiar rápidamente de un usuario a otro, esto es, sustituir la sesión de un usuario por la sesión de otro usuario.

su requiere de un parámetro opcional:

su - usuario: permite cambiar a "usuario"

su - : permite cambiar a "root"

Por ejemplo, supongamos que estamos en un shell (por ejemplo en la primera consola de texto) con el usuario ricardo, y queremos cambiar de ricardo a juan (por supuesto, ambos usuarios deben estar creados y deben tener una clave asignada).

Primero se debe verificar qué usuario se está utilizando. Para ello se usará el comando whoami (who am I?, es decir, ¿quién soy?).

24

Así se ha verificado la entrada como usuario ricardo

Entonces se escribe: su juan -

(La clave que se debe poner es la del usuario al que se va a convertir, en este ejemplo será: prueba, por favor verificar que tengamos creado ese usuario previo a hacer su - juan)

Y en efecto, al escribir la clave y dar enter, el usuario se habrá convertido en juan. Se puede verificar en la imagen.

whoami prueba

Si quisiera cerrar la sesión del usuario prueba debería apretar control d, para regresar automáticamente al usuario ricardo, y salir del shell (o escribir exit).

A continuación el usuario debería verificar esto apretando control d.

Ahora el usuario se convertirá de ricardo en root:

Hay que verificar que el nombre de usuario sea ricardo:

whoami

ricardo

Para convertirse en root no es necesario poner el nombre, es suficiente escribir: su -

Password:

Es necesario recordar que la clave que se debe escribir es la clave de root.

Es importante recordar que para salir del shell se escribes: control d y esto te regresará al usuario anterior (ricardo en este caso es el usuario anterior)

Si se quiere cambiar desde el usuario root hacia otro usuario se lo puede hacer sin tener que conocer la clave del segundo, por ejemplo, entremos como el usuario root y pongamos:

whoami root

su - ricardo

$

En efecto, no hizo falta poner la clave de ricardo

25

En resumen:

El usuario root se puede convertir en cualquier otro usuario sin necesidad de clave.

Cada vez que ejecute el comando su, como un usuario no privilegiado, se solicitará la clave del usuario al que se quiera convertir.

Al cambiar de usuario no se pierde el usuario anterior, sino que el nuevo se sobrepone al anterior, hasta salir, apretando control-d o escribiendo exit.

3.3.2 su - Diferencia entre usar o no usar guión en el comando su

Compare esta secuencia con la anterior. Cuál es la diferencia?

Resulta que cuando NO se utiliza el guión en el comando su, lo único que se consigue es cambiar de usuario, pero se conserva el ambiente de trabajo (directorio actual, variables de ambiente, etc.)

Cuando se usa el guión, observará que el directorio de trabajo (con el comando pwd o print working directory) cambia a /home/juan, que es el directorio que le corresponde a juan.

Esto es importante si mira la siguiente secuencia:

26

¿Por qué falló el comado ifconfig si el usuario root puede usarlo sin problema?

Respuesta: el directorio /sbin que es donde reside el comando ifconfig NO está en la lista de directorios de root. Y no está porque los usuarios restringidos como ricardo NO tienen ese directorio en su PATH (camino de búsqueda).

La solución es agregar el guión al comando su, así:

27

Entonces no olvide agregar el guión si desea activar el ambiente completo que le corresponde al usuario, esto significa cambiar de directorio, de path y de otras variables de ambiente que se pueden mirar con el comando set.

Conclusión: el comando su es muy interesante, solo que es necesario conocer la clave de cada usuario en el que el usuario original se quiera convertir. Por ejemplo: para convertirse en root el usuario necesita conocer su clave.

3.4 Delegación de privilegios de superusuario

3.4.1 Alternativas para delegar funciones de administración Hay ocasiones en que se precisa que un usuario no privilegiado (como el usuario eperez) realice labores como super usuario, pero no se quiere que conozca la clave de root, como en el caso de una persona que ayude en la administración de un laboratorio y que deba realizar ciertas labores sin tener que conocer la clave de root.

Existen algunos mecanismos para ello:

1. Incluir a ese usuario en el grupo de root, con lo cual tiene todos los permisos de root, sin excepción

2. Cambiar a 0 el ID del usuario y bloquearle a root el acceso a root. Esta es la opción recomendada ya que se consigue doble finalidad: impedir el acceso a root y usar un usuario distinto para actividades de administración. Y mejor si ese usuario tiene nombre como $ri$car$do.Or$te$ga o algo así que no sea fácilmente adivinable.

3. Existe una tercera forma que tiene sus ventajas y desventajas (más son desventajas, pero ni modo, allí va): es el mecanismo sudo o Superuser Do. El problema de sudo es que la mayoría de distribuciones lo traen activo pero no lo han asegurado, así que una forma fácil de ganar privilegios de superusuario es poner sudo bash y viola, estás adentro, has encontrado un hueco en la seguridad y tienes todos los permisos.

3.4.2 El mecanismo sudo En estos casos esa persona podrá utilizar el mecanismo sudo, ya que es un comando que permite que usuarios autorizados ejecuten ciertas (o todas) tareas que pueda hacer el usuario root, sin la necesidad de saber la clave de éste. La clave que el sudo pedirá será la del usuario y no la de root.

El sudo también lleva un registro histórico de qué comandos ejecutó un usuario como root y a qué hora.

Para poder usar el comando sudo se debe editar el archivo donde se guardan los permisos de sudo, que se llama /etc/sudoers. Para editar el archivo sudoers se usará el comando visudo

visudo

28

Se abrió el programa vi con el archivo /etc/sudoers, así que deberás lidiar con el vi.

Podía haberse usado otro editor, pero tiene sus complicaciones ya que si miras el archivo /etc/sudores, verás que ningún usuario tiene permisos para ese archivo, así que habrá que primero usar chmod para dar permisos, editarlo y REGRESAR los permisos originales, ya que el comando sudo chequea (por cuestiones de seguridad) que el archivo sudoers tenga los permisos tal cual está diseñado.

Formato del archivo de sudoers

El archivo sudoers tiene el siguiente formato:

La estructura es muy simple (se ha marcado en colores cada parte):

<usernames|group> <server=[ALL]|IP>[(usuario que ejecutará)] <comando>

Hay algunas consideraciones que se deben seguir:

En la primera columna (usernames/groups) se pondrá el nombre de los usuarios a quienes se les permitirá usar el comando sudo. Para añadirlos, solamente hay que escribirlos tal y como aparecen en /etc/passwd. Si se va a incluir a más de un usuario, se lo puede hacer escribiendo los nombres separados por por coma, por ejemplo: eperez,btapia.

Cuando se quiera añadir grupos de usuarios se debe indicar su nombre anteponiéndole un %. Por ejemplo, el grupo users se representa como %users.

29

La segunda columna <server=[ALL]|IP> se usa para especificar desde qué servidor podrán utilizar el sudo los usuarios a los asignados. El comando sudo permite que se ejecute entre servidores. Normalmente sudo se usa desde el mismo servidor, por lo que siempre utilizaremos la palabra clave ALL en la segunda columna. Esta palabra clave puede ser usada en las tres últimas columnas. Significa todos o cualquiera, sean estos usuarios, servidores o comandos (según la columna donde se la ponga).

La tercera columna indicará en qué usuarios podemos convertirnos. Típicamente se especifica ALL para indicar que nos podemos convertir en cualquier usuario (root es el objetivo que normalmente nos interesa).

En la cuarta columna (comandos) se pueden especificar mútiples comandos, separándolos por coma, o todos los comandos, utilizando la palabra clave ALL.

Para especificar algunos comandos se debe indicar la ruta completa de acceso, por ejemplo: /bin/cat.

• Delante de los comandos a ejecutar se puede agregar la palabra: NOPASSWD: (es importante fijarse en el signo de : al final) de forma tal que cuando el usuario necesite utilizar el sudo, no se le pedirá ninguna clave.

o Ejemplo, se le dará al usuario eperez derecho a todos los comandos, sin necesidad de clave:

eperez ALL=(ALL) NOPASSWD: ALL

Dar acceso total a usuarios específicos:

Con visudo se pueden intentar los siguientes comandos. visudo requiere que el usuario sea root, por lo tanto se debe abrir dos consolas (dos shells), en una trabajaremos como root para dar el permiso y en la otra como el usuario no privilegiado para realizar las pruebas:

En la consola que estamos como root se editará el archivo sudoers (visudo) y asignaremos a nuestro usuario eperez todos los derechos:

eperez ALL=(ALL) ALL

El usuario eperez podrá ejecutar como superusuario cualquier comando (es el último ALL el que especifica cualquier comando).

Desde la consola del usuario eperez, se ejecutará: cat /etc/shadow

cat: /etc/shadow: Permission denied

Como se puede observar en el mensaje de error, el usuario eperez no puede ver el

archivo /etc/shadow (pues solo root tiene permiso para verlo).

Usando sudo se debe recordar que si se pidiera clave, sería la clave de usuario sudo cat /etc/shadow

root:$1$hXrruiLl$4p38ASaYPDEdQEnQuDVl70:13910:0:99999:7:::

bin:*:13910:0:99999:7:::

daemon:*:13910:0:99999:7:::

adm:*:13910:0:99999:7:::

lp:*:13910:0:99999:7:::

sync:*:13910:0:99999:7:::

30

Como se puede observar, al ejecutar el comando cat a través de sudo el usuario se ha convertido en root, es por eso se puede ver el archivo /etc/shadow que solo root puede ver.

Dar acceso a comandos específicos

Con visudo se puede editar los permisos del usuario eperez, le ponemos así: eperez ALL=(ALL) /bin/cat,/sbin/

El usuario eperez podrá ejecutar como super usuario el comando /bin/cat y/o cualquier comando que esté dentro de /sbin/.

Supervisar las acciones de los los usuarios a través de los logs de sudoers:

Se pueden mirar dentro de /var/log/secure las acciones que los usuarios han realizado a través de sudo. Por ejemplo las líneas finales del log eperez dicen: Feb 23 12:37:05 eperez sudo: eperez : TTY=pts/0 ; PWD=/home/eperez ; USER=root ; COMMAND=/bin/cat /etc/sudoers

Feb 23 12:51:24 eperez sudo: eperez : TTY=pts/0 ; PWD=/home/eperez ; USER=root ; COMMAND=/bin/cat /etc/shadow

Feb 23 13:00:05 eperez sudo: eperez : TTY=pts/0 ; PWD=/home/eperez ; USER=root ; COMMAND=/bin/su -

Feb 23 13:00:05 eperez su: pam_unix(su-l:session): session opened for user root by eperez(uid=0)

Como se puede analizar en los logs, el usuario eperez, el día 23 de febrero a las

12:37:05, ejecutó con sudo el comando /bin/cat /etc/sudoers

A las 12:51:24 ejectó /bin/cat /etc/shadow

A las 13:00:05 ejecutó con sudo el comando su -

Éste último comando es interesante, lo se hizo fue obtener el shell de root (con su -) pero sin conocer la clave de root sino mediante la del usuario específico. Así que hay que tener mucho cuidado con especificar ALL en la columna de los comandos, pues también se incluye el comando su.

3.5 Limitando el espacio (cuotas) de disco

3.5.1 Manejo de quotas Las cuotas son una de las características más interesantes y fundamentales de Linux. Mediante este sistema podemos manejar un correcto y adecuado uso del disco por parte de nuestros usuarios.

Una de las mayores utilidades de las cuotas (y no la única) es para controlar la cantidad de espacio en disco que ocupan los correos de los usuarios. También se pueden usar en caso de que estemos manejando Linux como servidor de archivos de windows (samba) para asignarle espacio a los directorios de usuario.

Las cuotas se manejan en base a particiones, por lo que debemos definir en qué particiones las activaremos. NO ES RECOMENDABLE ACTIVAR CUOTAS a la partición / porque todo el sistema se volverá lento, al comparar las cuotas por cada lectura al disco duro. Es mejor crear varias particiones y activar cuotas solamente a las particiones que realmente serán utilizadas por los usuarios.

Por ejemplo, para los usuarios que hacen POP3, podríamos activar las cuotas para la partición /var, pues es en /var/spool/mail donde se almacenan los mensajes de correo.

31

Otra definición importante de las cuotas es determinar qué espacio asignaremos a cada usuario, por ejemplo, siempre sugerimos al menos asignar 20mb de espacio en disco para cada usuario de correo que tengamos, por lo tanto si tenemos 500 usuarios, debemos preveer que podemos tener un máximo de 500*20=10000MB o lo que es lo mismo un disco de 10GB de tamaño. Por supuesto es un caso bien raro el que las cuotas de TODOS los usuarios se llenen a la vez, pero puede suceder.

Las cuotas se pueden manejar de dos formas en linux:

Cantidad de inodos por usuario

Cantidad de Bloques por usuario

La cantidad de inodos es la cantidad máxima de archivos (y carpetas) que podrá crear un usuario bajo su control, bajo su propiedad. Es muy útil porque hay usuarios que por error crean programas que comienzan a generar millones de pequeños archivos (posiblemente de 0bytes) que van consumiendo todos los inodos del sistema. No es un hecho intencionado, pero nos puede dar un buen trabajo determinar quién está consumiendo todos los inodos del sistema.

Ahora en estos momentos, pocos usuarios son los que acceden directamente al shell a ejecutar sus "propios" programas, por lo que poner control en los inodos no es algo muy ventajoso. Las cuotas siempre se manejan para controlar el espacio en disco que consume el buzón de correo de los usuarios.. y el buzón consta de un sólo inodo ya que generalmente se usa el formato mbox que consiste en un sólo archivo donde se almacenan secuencialmente todos los mensajes.

Es por esto que no haremos mucho énfasis en los inodos (aunque pueda interesar a alguien), pero sí en la segunda forma de controlar las cuotas por bloques, o espacio en disco.

Control de espacio en disco es la forma que todo el mundo comprende, sencillamente podemos decir que un usuario no puede consumir más de 5mb o 20mb en disco y listo, si intentara consumir más espacio en disco, el sistema no le dejará. Así de simple.

Las cuotas además tienen dos límites o techos:

soft quotas (cuotas suaves)

hard quotas (cuotas duras)

La hard quota es mucho más fácil de entender y es sencillamente las que todos usamos, este es un valor que cuando el usuario alcance, el sistema no le dejará escribir más en el disco.

La soft quota es una cuota que puede ser sobrepasada durante un determinado tiempo (llamado grace period o período de gracia y se mide en días), por ejemplo:

Un usuario tiene una soft quota de 20 megas y una hard quota de 40 megas:

El usuario puede usar en un determinado instante 25 megas, esto es, se ha pasado de la soft quota, el sistema activará instantáneamente un contador donde irá descontando el periodo de gracia que le da al usuario para respetar la soft quota.

Este periodo de gracia es por defecto 7 días, es decir, este usuario durante 7 días podrá excederse de 20 megas (pero nunca sobrepasar los 40 de la hard quota), si durante algún momento de estos 7 días , el usuario baja a menos de 20 megas, el sistema resetea el contador y no ha pasado nada. Si el usuario alcanza los 7 días sobrepasado de cuota, el sistema no le dejará escribir nada más hasta que no baje su uso de disco a menos de lo establecido en la soft quota.

Las softquotas es un sistema bonito e interesante, para manejar ciertos picos esporádicos que puedan suceder. Sin embargo, es muy difícil de explicarle a un usuario no conocedor, esto es, cómo decirle a un gerente o al contador de la empresa que sí pudo escribir la semana pasada, pero ahora tiene que bajar a 20

32

megas de los 35 que está usando porque la soft quota o la hard quota, etc, etc.. ellos no lo comprenderán muy bien y podemos buscarnos más problemas que soluciones.

Por lo tanto, sugerimos que la soft quota siempre sea igual o muy parecido a la hard quota, esto es, al alcanzarse un valor predeterminado sencillamente el sistema no dejará escribir al usuario y listo, no hay que explicarles más, ellos sí entienden de las cuotas duras (hard quotas).

3.5.2 Activando las cuotas Por favor no se limite a copiar estos ejemplos en su computador. Primero deberá leer el texto y hacer los cambios que sean necesarios para que funcionen en su sistema. Si se limita a copiar lo que está aquí, dejará su sistema inestable y no sería nada raro que deba reformatear o ejecutar Linux rescue.

Activar las cuotas es un proceso bastante simple, pero antes hablemos de un archivo muy importante en nuestro sistema llamado /etc/fstab

En términos generales esto es lo que se debe hacer. Los detalles vienen luego:

Instalar el soporte para cuotas: sudo yum install quota quotatool

Iniciar CENTOS en runlevel 1, modo de recuperación: init 1

Activar el soporte para cuotas en las particiones deseadas, agregando en el fichero /etc/fstab los parámetros usrquota y grpquota a las líneas que definen la configuración de las particiones /var y /home:

Mire su archivo fstab (no se limite a copiar esto, ya que su particionamiento seguramente será distinto):

........ /var ext3 defaults,usrquota,grpquota 1 2

........ /home ext3 defaults,usrquota,grpquota 1 2

Lo que se debe hacer es agregar las palabras “,usrquota,grpquota” luego de defaults. Observe que es usr y grp, es decir no corrija poniendo user y group, eso no es correcto.

Volver a montar las particiones para que surtan efecto los cambios:

mount -o remount /var

mount -o remount /home

Crear los archivos aquota.user, aquota.group, quota.user y quota.group, los cuales se utilizarán almacenar la información y estado de las cuotas en cada partición.

cd /var

touch aquota.user aquota.group quota.user quota.group

cd /home

touch aquota.user aquota.group quota.user quota.group

Chequear la configuración: quotacheck -avug

Activar las cuotas de disco recién configuradas ejecutando:

quotaon /var

quotaon /home

ReiniciaR a fin de aplicar cuota de disco a algunos usuarios.

33

fstab contiene todas las particiones que son montadas en nuestro sistema, de la forma:

partición punto montaje tipo de fs opciones del fs dump/check

por ejemplo hagamos: cat /etc/fstab y veremos varias lineas parecidas a esta:

LABEL=/var /var ext3 default 1 2

esto le pedirá a Linux que monte la partición llamada (etiquedata): "/var" en /var que tiene un formato ext3, que lo monte con las opciones por defecto (lectura, escritura: r/w) y que chequee (numero 2) en caso de caerse intempestivamente el sistema (dump, la penúltima columna, no se usa).

Recuerde que el fstab que mostramos aquí puede (y seguro será) diferente al suyo, así que no lo copie tal cual. Primero guarde una copia de su archivo fstab y realice los cambios aquí indicados.

Volvemos a sugerir que no active cuotas a la partición raíz /

Lo mejor es que por el momento utilice una máquina virtual donde pueda crear nuevos discos duros y asignar cuotas a cada nuevo disco duro o partición.

Para activar las cuotas, debemos poner dos opciones más al filesystem que debemos activar. Esto se hace agregando una opción que le indicará al kernel que active las cuotas de usuario y grupo al filesystem. Por ejemplo: LABEL=/var /var ext3 default,usrquota,grpquota 1 2

Entonces debemos reiniciar el sistema para que las cuotas queden activadas.

Al reiniciar el sistema este procederá a revisar el sistema y activar el archivo donde se guardan las cuotas.

Verificando las quotas

El comando para verificar las quotas de los usuarios es:

quota usuario nos indicaría algo así: Disk quotas for user eperez (uid 500): Filesystem blocks quota limit grace files quota limit grace /dev/hdd2 28 32000 32000 7 0 0

estamos usando 28 bloques (28kb) de un total de 32000 kb permitidos (32megas)

Por supuesto los usuarios que hayamos creado y no les hayamos asignado las cuotas nos indicarán que la cuota es ilimitada. Por ejemplo, el usuario root NUNCA debe tener cuotas, pues maneja diferentes archivos de sistema: [root@eperez ~]# quota root Disk quotas for user root (uid 0): none Otro comando para revisar las quotas de los usuarios es: repquota -a

El cual nos dará un reporte de las quotas de TODOS y cada uno de los usuarios del sistema, mostramos una breve página: *** Report for user quotas on device /dev/hda7 Block grace time: 7days; Inode grace time: 7days Block limits File limits

User used soft hard grace used soft hard grace

root -- 8485596 0 0 44422 0 0 SITE154-logs -- 3808 0 0 1 0 0 SITE227-logs -- 4904 0 0 721 0 0 acomercial2 -- 64 20480 21504 13 0 0 sistemas -- 9756 20480 21504 44 0 0

Por ejemplo el usuario sistemas tiene consumidas 9756KB (bloques) de los 20480 kb (bloques) permitidos en suave, 21504 bloques (duros). Tiene 44 archivos utilizados pero no tiene límites (0) suaves ni duros.

3.5.3 ¿Cómo hacemos para editar las cuotas? Cada nuevo usuario que creemos viene sin cuotas predefinidas (uso ilimitado), por lo tanto debemos definirle estas para que comiencen a funcionar.

El comando edquota nos permite manejar las cuotas de usuarios:

34

edquota -u eperez

Nos mostrará en el vi, un resumen de las cuotas, de ahi podemos cambiar el valor que aparece debajo de soft y debajo de hard, y poner un valor en KB, correspondiente a las cuotas, por ejemplo, pongamos:

20000 en cada uno de ellos, esto sería una cuota de 20megas al usuario.

Aprovechemos la oportunidad para comentar que los valores no tienen que quedar precisamente ajustados debajo de la cuota (suave o dura), una vez grabado el sistema ajustará las posiciones.

Al finalizar salvamos los cambios y listo, la cuota está preparada.

Podemos hacer un su - a este usuario (su - eperez, en mi caso) y tratar de copiar algunos archivos desde /usr ( cp -a /usr . ) y veremos que cuando se cumpla el espacio de cuota asignado por nosotros, esta fallará con un error descriptivo.

Ajustando las cuotas masivamente

Si tuviéramos muchos usuarios a los que quisiéramos editar las cuotas, podemos usar este pequeño script que por defecto cambiará las cuotas de todos los usuarios por las cuotas que tenga asignado el usuario eperez (cambiar por el usuario tipo, o plantilla de uds):

edquota -p eperez "awk -F: '$3 > 499 {print $1}' /etc/passwd" esto significa algo así:

edita las cuotas de todos los usuarios que existen en /etc/passwd, cuyos uid sea mayor a 499, y toma como plantilla las cuotas del usuario eperez. Por supuesto, primero tendremos que haber habilitado algún usuario con sus cuotas (eperez en mi caso) para tomar a ese usuario de base para replicar los valores en el resto de usuarios.

En el siguiente capítulo: Manejo de usuarios y permisos de Linux.

Fin de esta sección.