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.
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]
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.
/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.
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.