12 jul 2010

Seguridad en Ubuntu (II) - Usuarios y claves

Como ya vimos en el post anterior Seguridad en Ubuntu (I) - Introducción uno de los pilares básicos de la solidez de los sistemas GNU/Linux es su potente gestión de usuarios y de permisos.

En este artículo veremos como hacer un correcto uso de esta gestión, aumentando en gran medida la seguridad de nuestro sistema, tanto local como remota.

  • Tipos de cuentas de usuario
Existen varios tipos de cuentas de usuario que dan diferentes niveles de acceso para el uso y administración del sistema. Asegúrate de estar usando siempre la cuenta de usuario adecuada a tus necesidades, una cuenta con más permisos de los necesarios también implica más riesgos de los necesarios.

  1. Usuario con permisos administrativos
    Este es el usuario que se crea durante la instalación del sistema, tiene permiso para usar todas las aplicaciones instaladas, guardar o modificar contenidos en su carpeta personal y puede asumir temporalmente las funciones de administrador mediante la orden sudo.

    Este es el usuario indicado para el trabajo diario y la administración de sistemas de escritorio habituales.

  2. Usuario sin permisos administrativos
    Este es el tipo de usuarios que se crean desde el menú Sistema - Administración - Usuarios y grupos, tiene permiso para usar todas las aplicaciones y guardar o modificar informaciones en su carpeta personal. No podrá ejercer tareas administrativas ni usar el comando sudo.

    Creación de un usuario

    Si necesitas crear más usuarios para que otras personas usen tu sistema es conveniente el uso de este tipo de cuentas. Así pase lo que pase no podrán alterar la configuración del sistema, sólo sus opciones personales.

    En caso de que necesites dar permisos administrativos a estos usuarios puedes hacerlo desde el menú Sistema - Administración - Usuarios y grupos - Ajustes avanzados - Privilegios de usuario - Administrar el sistema

    Ajustes avanzados - Privilegios de usuario

  3. Usuario invitado
    Esta cuenta, presente en Ubuntu y en algunas otras distribuciones permite el acceso al sistema con un usuario sin privilegios, carece de contraseña y permite el uso de la mayoría de aplicaciones, pero no guardar o modificar datos ni por supuesto asumir tareas administrativas. (Podrá guardar datos pero éstos se perderán al cerrar la sesión).

    Este tipo de cuenta es muy útil en ordenadores de acceso público, demostraciones, o cualquier situación en la que quieras que alguien pueda usar el sistema sin alterar nada.

    Para acceder a esta cuenta debes hacerlo desde una sesión de usuario ya iniciada haciendo clic en el applet de control de sesión y selecciona Sesión de invitado. +info

    Acceso al usuario invitado


  4. Usuario root
    Este es el usuario administrativo tradicionalmente usado en todas las distribuciones GNU/Linux, sin embargo en Ubuntu se ha desactivado esta cuenta y en su lugar se usa el comando sudo. +info

    Las ventajas del uso de sudo frente a root son: minimizar la posibilidad de desastres por descuido al estar la cuenta administrativa activa durante menos tiempo, hacer más consciente al usuario de qué acciones entrañan peligro y cuales no o acostumbrarse a usar permisos administrativos sólo cuando son estrictamente necesarios, entre muchas otras razones.

    Algunos usuarios no acostumbrados al modo de trabajar de Ubuntu insisten en la activación de esta cuenta (poniendo en peligro la seguridad del sistema). Si este es tu caso la activación de la cuenta root se hace con la orden:
    sudo passwd root

    Esto asignará una contraseña al usuario root permitiendo su acceso al sistema y el uso del comando su. Una vez acabada la tarea administrativa en cuestión es recomendable volver a desactivar esta cuenta con la orden:
    sudo passwd -l root

  • Contraseñas
La contraseña es la llave que cierra la puerta de la privacidad de cada usuario. Por este motivo vale la pena dedicarle un poco de tiempo a la elección de la contraseña.

Criterios para elegir una contraseña:
  1. Deberá tener una longitud mínima de 6 caracteres
  2. Preferiblemente que contenga combinaciones de mayúsculas, minúsculas, símbolos y números
  3. No deberá contener ningún carácter fácilmente deducible por los datos "visibles" del usuario (es decir evita contraseñas del tipo usuario1)
  4. Preferiblemente usa contraseñas creadas aleatoriamente

Ejemplos de malas combinaciones usuario/contraseña: usuario/usuario1, root/toor, usuario/1234, usuario/aaaaaaaa, usuario/apellido
Ejemplos de buenas contraseñas: ffagh61w, Op9%ssas

Si tu contraseña no cumple estos requisitos puede ser fácilmente "rebentada" por programas de fuerza bruta. Para cambiar la contraseña y asignar una mejor usa el menú Sistema - Administración - Usuarios y grupos - Cambiar contraseña

Cambiar contraseña

Es muy tentador desactivar la contraseña del usuario para hacer más cómodo el acceso, esto sería equivalente a dejar siempre el coche abierto para no tener que abrirlo (y con las llaves puestas!). Intenta evitar las opciones No preguntar de nuevo la contraseña al iniciar sesión (del menú Usuarios y grupos) y Acceder como usuario automáticamente (del menú Pantalla de acceso)

Desactiva el acceso automático al sistema

  • Cambiar permisos y grupos
Todos de los sistemas de ficheros comunes en GNU/Linux soportan un completo sistema de permisos, que asigna a cada archivo/directorio: un propietario, un grupo y permisos de lectura (r) / escritura (w) / ejecución (x) independientes para el propietario, el grupo y el resto de usuarios.

Veamoslo más claro con un ejemplo, el comando ls -l nos mostrará todos estos datos:
ls -l
-rw-r----- 1 dani users 77951 2010-07-06 18:24 screenshot_001.png

En este ejemplo el archivo screenshot_001.png es propiedad del usuario dani, pertenece al grupo users y sus permisos son: lectura y escritura para el propietario (los primeros rw-), lectura para el resto de usuarios del grupo users (r--) y ningún tipo de acceso para el resto de usuarios del sistema (---). +info

En ocasiones podemos encontrarnos que no tenemos permisos para realizar una u otra acción sobre un archivo (por ejemplo no podemos ejecutar un archivo descargado, o el editor nos avisa de que no podemos guardar cambios sobre un archivo de texto). La solución NO es convertirse en root, la solución es establecer correctamente los permisos del archivo.

Para cambiar los permisos de un archivo usaremos el comando chmod (con sudo si el archivo no es de nuestra propiedad). A cada tipo de permiso se le asigna un numero: lectura=4, escritura=2, ejecución=1, estos permisos pueden sumarse y deben informarse para el propietario, grupo y resto de usuarios. Veamos algunos ejemplos:
chmod 777 archivo # asigna permiso lectura(4) + escritura(2) + ejecución(1) para el propietario, grupo y resto de usuarios
chmod 600 # asigna permiso lectura(4) + escritura(2) al propietario, grupo y resto de usuarios no tienen acceso
chmod 755 # todos los permisos para el propietario, lectura y ejecución para el resto

+info

Si estos comandos te parecen muy complicados siempre puedes usar el gestor de archivos para cambiar los permisos haciendo clic con el botón derecho sobre el archivo que quieres cambiar y eligiendo Propiedades - Permisos

Propiedades - Permisos

Otro error común es que el propietario o grupo del archivo no estén bien asignados (esto ocurre por ejemplo si usas algunos programas con root cuando no debes). De nuevo la solución NO es convertirse en root (más bien esto es el origen del problema), la solución es establecer correctamente el propietario y grupo del archivo.

Para esto usa el comando chown (con sudo si el archivo no es de tu propiedad). Su uso es bastante sencillo, con un ejemplo bastará:
sudo chown dani:dani archivo # asigna el propietario dani y el grupo dani al archivo
+info

  • Más información
  • Artículos relacionados

17 comentarios :

helq dijo...

Muy buena tu guía, y esperaré el próximo artículo.

Hay que aclarar que `chmod' no se puede usar en todos los casos, por lo general se cambian los permisos a los archivos que sean del usuario mismo. Por ningún motivo se deben cambiar los derechos de un archivo de `root' que se encuentre en un directorio distinto al `home', ya que algunos confiados podrían, digamos, cambiar los derechos de ´/usr/bin/sudo' y luego encontrarse en un grave apuro. Lo mismo sucede para `chown'.

En general no es recomendable cambiar los permisos de un archivo que sea de sistema, para esto es mejor abrir el archivo con `sudo', por ejemplo: para cambiar el tiempo que dura el grub en la pantalla basta con escribir `sudo nano grub.cfg' y buscar la linea `set timeout=10' y cabiar el `10' por otro como el `5', en vez de cambiarle los permisos o el usuario con `chmod' ó `chown'.

También hay que decir que, una vez que termine de ejecutar in proceso con `sudo' es mejor cerrar sesión de sudo (o como se diga) con `sudo -k', Nota: de forma predeterminada el sudo se cierra como a los cinco minutos de iniciarse, hací que no hay problema si no se cierra, pero es una medida preventiva. ¿Alguien sabe como reducir ese tiempo para prevenir problemas de seguridad?.

-Gracias a `verbose' me doy cuenta que `chmod' tiene un modo de más, pero no entiendo para qué sirve. Por ejemplo cuando uno escribe `chmod 644 -v mi_archivo' sale un aviso diciendo:
`el modo de «mi_archivo» permanece como 0644 (rw-r--r--)'
ó (depediendo el caso)
`el modo de «mi_archivo» cambia a 0644 (rw-r--r--)'.

El caso es que uno puede añadir un cuarto comando, el cual permite más opciones, por ejemplo si escribo: `chmod 5644 -v mi_archivo', sale un mensaje como este: `el modo de «mi_archivo» cambia a 5644 (rwSr--r-T)'.

Me pregunto entonces, ¿para qué sirve este nuevo modo?, ¿y cómo se utiliza?

- Otro punto, ¿qué es aquel numerito que aparece al lado de los permisos de usuario en todos archivos y carpetas al ejecutar `ls'?, ejemplo: digito ls -l en mi home y lo que resulta es:
-rw-r--r-- 1 helq helq 29453 2010-06-29 11:32 maxout.gnuplot_pipes
-rw-r--r-- 1 helq helq 6395733 2010-06-30 14:53 Metasploitable_07_2010_ES.pdf
drwxr-xr-x 8 helq helq 12288 2010-07-12 12:48 Música
drwxr-xr-x 4 helq helq 4096 2010-06-08 19:15 Papiroflexia
drwxr-xr-x 2 helq helq 4096 2010-06-15 14:32 Plantillas
drwxr-xr-x 2 helq helq 4096 2010-06-05 14:16 Público
-rw-r--r-- 1 helq helq 1894 2010-06-19 12:39 quimica

En un principio pensé que era la cantidad de archivos que contenía aquella carpeta, pero luego me di cuenta de que la capeta `Público' no contenía nada, y que en `Música' habían 91 archivos. Qué es entoces aquel numerito.

- Perdón por molestar pero soy muy inquieto. Veo que hay un grupo llamado `users', ¿debo crear todas las cuentas de usuario con ese grupo?, porque al parecer tú lo usas (`-rw-r----- 1 dani users 77951 2010-07-06 18:24 screenshot_001.png'). Existe algún tipo de inconveniente si a un usuario ya creado le cambio el grupo al que pertenece y luego borro el grupo anterior al que pertenecia, por ejemplo:

El usuario `maria' tiene por grupo a `carmen' pero luego se cambia al grupo `users' (perdón por omitir las tildes y mayúsculas, pero creo que los grupos sólo son en minúscula), se cambia el grupo de todos los archivos existentes en la caperta `maria' con la orden `sudo chown -Rv maria:users /home/maria'. El grupo `carmen' ya no tiene ningún usuario por lo que decide borrarse, ¿se debe hacer o no es necesario?, ¿que tiene de especial el grupo `users'?

Unknown dijo...

@helq: gracias por tu extenso comentario, a ver te respondo a algunas cosillas a ver si te sirve:

Hay que aclarar que `chmod' no se puede usar en todos los casos...
Poderse usar se puede, otra cosa es que sea recomendable, pero es como el comando rm, se puede usar siempre, epro lo que borres ya es cosa tuya.

¿Alguien sabe como reducir ese tiempo para prevenir problemas de seguridad?
Eso se hace editando el archivo de configuración de sudo con el comando:
$ sudo visudo
Localizas la linea Defaults y la dejas así:
Defaults env_reset,timestamp_timeout=0
(el 0 es el tiempo en minutos que el comando sudo conservará la contraseña)

me doy cuenta que `chmod' tiene un modo de más, pero no entiendo para qué sirve...
Ese es el denominado stikcy bit, sirve para añadir otros tipos de permisos no tan habituales al archivo como por ejemplo el permiso "setuid", aquí tienes información más detallada sobre los permisos especiales: http://es.wikipedia.org/wiki/Chmod#Permisos_adicionales

¿qué es aquel numerito que aparece al lado de los permisos de usuario en todos archivos y carpetas al ejecutar `ls'?
Es el numero de enlaces que apuntan a ese archivo

Existe algún tipo de inconveniente si a un usuario ya creado le cambio el grupo al que pertenece y luego borro el grupo anterior al que pertenecia
Como norma general ten presente que la gestión que hace ubuntu de permisos/usuarios/grupos ya es la correcta, por lo que en principio no hay que cambiar nada salvo que sea necesario por algo en concreto. Borrar el grupo de origen de un usuario puede hacerse pero no es recomendable, pues es difícil saber a ciencia cierta si todos los archivos que eran de usuarios de ese grupo han sido correctamente cambiados.

Espero haberte aclarado algunas dudas.

Un saludo

helq dijo...

Muchas gracias por tu respuesta fosco_, pero tengo una inquietud:
que significa que un archivo o carpeta tenga uno o varios enlaces, mejor, propiamente dicho: ¿que es un enlace?

Gracias de nuevo por tu pronta respuesta. Y perdón si la pregunta es muy boba.

Unknown dijo...

@helq: tus preguntas no molestan, no te preocupes. Los enlaces o links son caminos para llegar a un directorio o a un archivo por rutas alternativas.

Por ejemplo, si tenemos un archivo de configuración en /usr/lib/ia32lib/blablabla/aplicacion/archivo.cfg pero queremos tenerlo directamente en /etc (donde se guardan todas las configuraciones) podemos crear un enlace de esta forma:
$ ln -s /usr/lib/ia32lib/blablabla/aplicacion/archivo.cfg /etc/archivo.cfg

Este es un mecanismo muy usado en linux para poder tener un mismo archivo accesible a través de diferentes rutas sin necesidad de tener el archivo repetido.

Los enlaces se distinguen en la consola porque al hacer un ls -l lo primero que aparece es un l (de link)

Es algo parecido (aunque mucho más potente) a los Accesos directos de Windows.

Espero haberte aclarado tu duda

helq dijo...

Gracias fosco_ por resolver mi inquietud.

Una pregunta, ¿qué tiene de especial el grupo users?, ¿debo crear los nuevos usuarios con el grupo users?

Y gracias de nuevo.

Unknown dijo...

@helq: el grupo users no tiene nada de especial, no debes hacer nada con él. Por defecto en ubuntu al crear un usuario nuevo se crea también un grupo con su nombre. Es la manera más recomendada de trabajar.

Anónimo dijo...

Ok, alguien sabe como deshabilitar la cuenta de invitado??, o si la dejo en un ambiente donde quiero controlar lo que hacen los usuarios, a que riesgos me expongo.

Unknown dijo...

@Anónimo: riesgos pocos, pues el invitado no tiene permiso para cambiar nada y cualquier cosa que descargue o haga desaparecerá en cuanto se cierre la sesión.

Anónimo dijo...

que merda, porque publica cosas solo para ubuntu ??
vea que existe mas distro...
ubuntu es solo lo mas facil esta de moda..

Unknown dijo...

@Anónimo, publico cosas para Ubuntu porque es la distribución que uso y la que conozco mejor, si tú usas o prefieres otra distribución seguro que hay cientos de blogs para ella, y si no los hay eres libre de hacerlo tú mismo.

Un saludo y recuerda que la crítica, si no es constructiva, no sirve para nada.

Anónimo dijo...

Hola, tengo un ubuntu 1204 que quiero actualizar. No me lo permite porque no recuerdo la contraseña de mi usuario ya que hace tiempo le ordené entrar sin pedirla y la olvidé por completo. Puedo arrancar otra distro y acceder a la partición donde está ubuntu. Allí ¿podría borrar los archivos de contraseñas y lograr todavía el ingreso? En ese caso ¿cuáles son esos archivos?. He buscado las carpetas passwd y shadow en /mnt/sda7/etc/ como aconsejan en otros blogs y no las encuentro.. Alguna sugerencia?

Unknown dijo...

@Anonimo borrar los archivos de contraseñas no te servirá de nada, lo que sí puedes hacer es desde la ubuntu q sabes iniciar hacer un chroot de la q no sabes la contraseña, una vez hecho el chroot le asignas una nueva clave al usuario

Emilio Llinares dijo...

Muy interesante el post!!

Tengo una duda. ¿Supondría un riesgo para la seguridad del sistema utilizar root para ejecutar un script que haga copias de seguridad desde el cron? ¿porqué?

En este caso, es para copiar bases de datos de postgresql. El superusuario de postgresql, "postgres", podría hacer las copias. ¿Es más segura esta opción? Aunque antes de hacer las copias necesito parar un servicio y después reiniciarlo. Todos desde el cron. Esto, si no lo tengo mal entendido, si tendría que hacerlo root.

¿Podrías comentarme algo sobre esto?

Muchas gracias

Unknown dijo...

@Emilio por defecto las tareas ejecutadas por cron se hacen con permisos de root, si eso es seguro o no lo es debes decidirlo tú. Si te decantas por hacerlo con otro usuario bastaría con añadir el nombre del usuario antes de la ruta del ejecutable, algo así:

1 1 * * * usuario /home/usuario/script.sh

Emilio Llinares dijo...

Dani, entonces entiendo que el problema de seguridad, en este caso, es el daño que mi script, ejecutado como root, pudiera hacer. Si estoy seguro que no puede causar ningun daño al sistema podría escoger root sin problema y esto me facilitaría el proceso. Si algún error puede afectar al sistema, entonces mejor usar un usuario con menos "poder". ¿Es correcto el razonamiento?

Unknown dijo...

Correcto

Emilio Llinares dijo...

Mil gracias

Visitas