Crear una cuenta de usuario

El núcleo de Linux en sí trata a los usuario como meros números. Cada usuario es identificado por un único numero entero, el uid (identificación de usuario) esto debido a que un numero es mas fácil y rápido de procesarlo que un nombre para un sistema. Una base de datos o tabla asociada a dichos UIds y GIds, por fuera del núcleo asigna un nombre textual, un único nombre de usuario para cada id. La base de datos que también contiene información adicional.

Para crear un usuario, necesita agregar información sobre el usuario a la base de datos (ver arriba) y crear un directorio "inicio" (directorio principal del usuario) para él. También puede ser necesario educar al usuario, y configurar un ambiente conveniente para él.

La mayoría de las distribuciones de Linux cuentan con programas para crear cuentas. Existen muchos de estos programas disponibles [32]. Contamos con dos comandos alternativos que son adduser y useradd, así también como con herramientas gráficas [33]. Cualquiera sea el programa, resulta muy poco el trabajo manual por hacer. Aun cuando los detalles son muchos e intrincados, estos programas hace parecer todo trivial. Como sea, en la sección “Crear un usuario a mano” se describe cómo hacerlo a mano.

/etc/passwd y otros archivos informativos/de información /etc/shadow

La base de datos básica de usuarios en un sistema Unix es un archivo de texto /etc/passwd (llamado el archivo de contraseñas), que lista todos los nombres de usuarios validos y su información asociada. El archivo tiene una línea por usuario, y es dividido en siete colon-delimited campos.

  • nombre de usuario

  • contraseña, de modo encriptado

  • Identificación (Id) de numero de usuario

  • Identificación (Id) de numero de grupo

  • Nombre completo u otra información descriptiva de la cuenta

  • Directorio Inicio (directorio principal del usuario)

  • Interprete de comandos (programa a ejecutar al ingresar al sistema)

El formato esta explicado con mas detalles en la pagina de manual del comando passwd.

Cualquier usuario del sistema puede leer el archivo de contraseñas, para por ejemplo conocer el nombre de otro usuario del mismo. Esto significa que la contraseña (el segundo campo) esta también disponible para todos. El archivo de contraseñas encripta las contraseñas, así que en teoría no hay problema, pero dicho encriptado puede ser quebrado, sobre todo si dicha contraseña es "débil" [34]. Por lo tanto no es buena idea tener las contraseñas en el archivo de contraseñas.

Muchos sistemas GNU/Linux tienen contraseñas "sombra".Esto es una alternativa en la manera de almacenar las contraseñas: las claves encriptadas se guardan en un archivo separado /etc/shadow que solo puede ser leído por el administrador del sistema. Así el archivo /etc/passwd solo contiene un marcador especial en ese segundo campo. Cualquier programa que necesite verificar un usuario o uid, pueden también acceder al archivo shadow/sombra. Significa también que programas normales que solo usan otros campos del archivo de contraseñas, no pueden acceder a las contraseñas. Paralelamente también existe /etc/gshadow para cierta información según grupos [35]

Elegir números de identificación de usuario y grupo

En la mayoría de los sistemas, no importa cuales son los números de usuario y grupo, pero si usa un sistema de archivos de red [36], necesitará que sean los mismo números de identificación de usuario (uid) y grupo (gid) en todos los sistemas. Esto es porque el sistema de archivos de red también identifica al usuarios (nombre de usuario) con su ++respectivo++ numero de identificación de usuario (uid).

Si esta usando un sistema de archivos de red NFS [37], tiene que inventar un mecanismo para sincronizar la información de cada cuenta. Una alternativa es el sistema NIS [38](ver Guía de Administración de Redes con Linux, Capítulo 13)

Como sea, trate de evitar re-usar números de identificación de usuario (UIds) y nombres de usuario exactamente iguales entre si entre sistemas, porque el nuevo dueño de ese numero de identificación de usuario o nombre de usuario puede tener (o tendrá seguro?) acceso a los archivos o correos-e del anterior dueño.

Ambiente inicial: /etc/skel [39]

Cuando el directorio Inicio para un nuevo usuario es creado es inicializado por medio del directorio /etc/skel. El administrado del sistema puede crear archivos dentro de /etc/skel que proveerán un amable entorno predeterminado para los usuarios. Por ejemplo, el puede crear un /etc/skel/.profile que configura las variable de entorno de algún editor mas amigable para los usuarios nuevos.

Como sea, usualmente lo mejor es conservar dicho directorio lo mas pequeño que sea posible, ya que en el futuro será imposible actualizar los archivos de los usuarios. Por ejemplo, si cambia el nombre de un editor a uno mas amigable, todos los usuarios tendrán que editar su archivo .profile. El administrador del sistema podría tratar de hacer esto automáticamente con un script [40], pero casi con seguridad resultará que se corrompa el archivo de alguno. Siempre que sea posible, es mejor poner lo que sea configuración global dentro de archivos globales, como es /etc/profile. De esta manera es posible actualizarlo sin corromper la configuración de ningún usuario.

Crear un usuario a mano

Para crear una nueva cuenta a mano, sigue estos pasos:

  • Editar /etc/passwd con vipw y agregar una nueva linea por cada nueva cuenta. Teniendo cuidado con la sintaxis. No lo edite directamente con un editor! Use vipw que bloquea el archivo, así otros comandos no tratarán de actualizarlo al mismo tiempo. Debería hacer que el campo de la contraseña sea `*', de esta forma es imposible ingresar al sistema.

  • Similarmente, edite /etc/group con vigr, si necesita crear también un grupo.

  • Cree el directorio Inicio del usuario con el comando mkdir.

  • Copie los archivos de /etc/skel al nuevo directorio creado [41]

  • Corrija la pertenencia del dueño y permisos con los comandos chown y chmod (Ver paginas de manual de los respectivos comandos). La opción -R es muy útil. Los permisos correctos varían un poco de un sitio a otro, pero generalmente los siguientes comandos harán lo correcto:

    cd /home/nuevo-nombre-de-usuario
    chown -R nombre-de-usuario.group .  
    chmod -R go=u,go-w .  chmod go= .
    

  • Asigne una contraseña con el comando passwd

Después de asignar la contraseña del usuario en el ultimo paso, la cuenta funcionara. No debería configurar esto hasta que todo lo demás este hecho, de otra manera el usuario puede inadvertidamente ingresar al sistema mientras copias los archivos de configuración de su entorno de trabajo.

A veces es necesario crear cuentas "falsas" [42] que no son usadas por personas. Por ejemplo, para configurar un servidor FTP [43] anónimo (así cualquiera podrá acceder a los archivos por él, sin tener que conseguir una cuenta de usuario en el sistema primero) podría crear una cuenta llamada "ftp". En esos casos, usualmente no es necesario asignar una contraseña (el ultimo paso de arriba). Verdaderamente, es mejor no hacerlo, para que nadie puede usar la cuenta, a menos que primero sea root/cuenta administrador, y así convertirse en cualquier usuario.



[32] En Internet puede comenzar buscando en: http://sourceforge.com y http://freshmeat.com

[33] GUI: Grafic User Interface. En KDE dispone de Kuser. En Gnome ?XXX?

[34] Estadísticamente, según el estudio de los métodos para romper claves encriptadas, se ha establecido que aumenta significativamente la seguridad una suma de características: tener mas de 6 caracteres, combinar letras mayúsculas y minúsculas, a la vez que intercalar también números.

[35] Si, esto significa que en el archivo de contraseña contiene toda la información sobre un usuario excepto su contraseña. Una maravilla del desarrollo.

[36] NFS: Network file System

[37] NFS: Network file System

[38] NIS: Network Information Service

[39] Apocope de la palabra inglesa skeleton, que en castellano significa esqueleto, asiendo referencia al función de estructura.

[40] Lenguaje de programación cuyo código no necesita ser compilado para ser ejecutado, por lo general conjunto de instrucciones a ejecutar por el interprete de comandos (Shell). Se llamar también script a un programa o fragmento de código escrito en algún lenguaje de scripts, interpretados por ejemplo por Perl (Mundo Unix y en general para todas las demás plataformas) Visual Basic Script (Microsoft Windows) JavaScript (Todas las plataformas). Ver también "Expresiones regulares".

[41] cp /etc/skel/* /ruta (donde ruta será por convención /home/"nombre de usuario"

[42] ¿Usuarios Surrealistas?

[43] FTP: File transfer Protocol.