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.