Información blog

Linux, tutoriales, noticias, sistemas, redes y seguridad informática, entre otras cosas.

lunes, 8 de febrero de 2016

/etc/passwd de Linux ¿Qué podemos hacer con él?

Uno de los ficheros que lleva existiendo en Linux durante años (y que probablemente seguirá existiendo) es el fichero passwd alojado en /etc/. Dicho fichero almacena las directrices de los usuarios con accesibilidad al sistema, además de ciertos criterios relacionados con éstos como la ubicación de su carpeta personal o lo que pueden ejecutar. Obviamente también determina quien tiene acceso al sistema y quien no, con lo que se podría decir que este fichero tiene un papel muy importante a nivel de seguridad. Aún cuando passwd es vital para mantener la integridad de nuestro sistema, este fichero debe de ser capaz de ser leído por cualquier usuario presente en el sistema, si bien obviamente nadie, más aparte de root, tiene que tener la posibilidad de editar nada en éste. Afortunadamente posee dichos permisos establecidos por defecto, con lo que afortunadamente no es necesario modificar nada en ese aspecto; simplemente tendríamos que concentrarnos en el contenido del fichero.

Portada_passwd

Para entender este fichero es necesario tener claros una serie de conceptos previamente, ya que todas las líneas que componen éste están cortadas por el mismo patrón. Para ello pongo a continuación una línea a modo de ejemplo con el fin de ser los más claro posible:

ivan:x:1000:1000:ivan:/home/ivan:/bin/bash

Tomando como base este ejemplo podríamos dictaminar la siguiente composición:

  • ivan: Nombre de usuario usado para el login.
  • x: Contraseña; ésta pone x debido a que se encuentra almacenada (y cifrada) en el fichero /etc/shadow.
  • 1000: User ID del usuario, comúnmente denominado UID.
  • 1000: Group ID del usuario, comúnmente denominado GID.
  • ivan: Nombre del usuario; es importante diferenciar el nombre descriptivo (que sería éste) con respecto al nombre de usuario para login.
  • /home/ivan: Esta sería la carpeta en la que nos posicionaríamos al hacer login desde cualquier terminal(por defecto suele ser la carpeta home); si no nos gustase podríamos poner cualquier otra sin problemas.
  • /bin/bash: Aquello que el usuario ejecutará el usuario el loguearse.

Esto significa que hay determinados aspectos en éstas líneas que son muy delicados e importantes, con lo que tenemos que ser especialmente cuidadosos con ellos. Esto puede parecer se de poca importancia, pero una mala configuración en estos puede resultar fatal... 

Entre estos valores se encontraría el group ID; este identificador por defecto está asignado para ser el mismo id que el user ID, pero en ocasiones podemos desear cambiar dicho id para que pertenezca a otro grupo; generalmente para obtener mayores privilegios. Aquí debemos de ser especialmente cuidadosos y NUNCA asignar el GID 0; pues estaríamos haciendo que el usuario perteneciese al grupo root, concediéndole acceso TOTAL al sistema.

Otro aspecto de gran importancia sería el establecimiento del directorio en el que deseamos que el usuario se posicione al loguearse. Aquí lo ideal sería que el usuario se posicionase en su carpeta en su carpeta home, pues allí estarían almacenados sus directorios personales, descargas, etc... pero a veces podemos querer usuarios especiales que comiencen en una posición especial, como podría ser /etc/ o /proc. Gracias a los permisos establecidos en los directorios, no ocurriría ninguna catástrofe en caso de posicionar al usuario en un directorio "delicado", pero es más conveniente dejar a cada usuario en su directorio por defecto con el fin de evitar cualquier posible uso incorrecto por parte de éste.

Por último estaría el apartado del programa o shell a ejecutar... Esta parte es especialmente delicada, ya que puede ejecutar múltiples cosas. Generalmente los usuarios que se loguean en el sistema ejecutarán una shell; es decir, un interprete de comandos que dependiendo de cual sea tendrá la posibilidad de ejecutar ciertas acciones; las shells más usadas serían:

  • /bin/sh: La shell más básica de todas. Tiene un interprete de comandos bastante simple.
  • /bin/dash: Es una opción un poco más potente que sh, pero aún así no tiene toda la potencia que uno desearía para acciones muy avanzadas.
  • /bin/bash: La shell más usada en la actualidad, pues es la más potente de todas y la más recomendable para cualquier acción a realizar en la terminal o para cualquier script.
  • /bin/rbash: También conocido como restricted bash; se trata de una shell de bash, pero con numerosas restricciones orientadas a salvaguardar la integridad del sistema; Algunas de estas restricciones serían:
    • No puede ejecutar el comando cd; es decir, no se puede cambiar de directorio.
    • Hacer referencia a ficheros que contengan el argumento / o -
    • Realizar redirecciones de cualquier tipo, ya sea de un canal o de un fichero.
    • Establecer, leer o cambiar variables de entorno.
  • /bin/nologin: Evita que el usuario se pueda loguear, lo cual es realmente útil con ciertos usuarios tales como sshd o mail; pues son usuarios internos cuyo único fin es ejecutar ciertos programas. 
  • /bin/false: Simplemente deja que se loguee el usuario pero no ejecuta nada. Es una opción válida para usuarios que queramos que no puedan hacer nada, pero no es tan segura como /bin/nologin.

Aparte de estas shells que, indudablemente son muy útiles, podemos hacer que se ejecute algo más limitado, pero que puede ajustarse mejor a nuestras necesidades, que sería la ejecución de un script automáticamente tras hacer login, en vez de la ejecución de la shell.  Por ejemplo, podríamos crear una sesión enjaulada que únicamente pudiese apagar o reiniciar el equipo. Dicho procedimiento en concreto, ya se explicó en este blog; concretamente en este artículo. Obviamente dicho script es solo un ejemplo; también pueden hacerse otros scripts que ejecuten todo tipo de acciones: desde iniciar un demonio a ejecutar una actualización del sistema; todo es cuestión de imaginación.

Espero que os haya resultado útil.

Saludos.

No hay comentarios :

Publicar un comentario