Información sobre el usuario

1277668016_UserInfoTodos los programas Linux, a excepción de init, los inician otros programas o usuarios. Más adelante estudiaremos con mayor detenimiento la ejecución de programas o procesos. Normalmente, los usuarios activan los programas desde una shell que responde a sus comandos. Ya sabemos que un programa puede determinar enormemente su entorno examinando las variables de entorno y leyendo el reloj del sistema. Un programa también puede encontrar información sobre la persona que lo está usando.

Cuando un usuario se registra en un sistema Linux, debe tener un nombre de usuario y una contraseña. Una vez que se han validado los datos, al usuario se le presenta una shell. Internamente, el usuario tiene un identificador de usuario único conocido como UID. Cada programa que ejecuta Linux lo hace en nombre de un usuario y tiene un UID asociado.super tux

Puede configurar los programas para que se ejecuten como si otro usuario los hubiese iniciado. Cuando un programa dispone de permisos UID, se ejecutará como si lo hubiera iniciado el propietario dela archivo ejecutable. Cuando se ejecuta el comando su, el programa funciona como si hubiese sido iniciado por el superusuario.

Después valida el acceso del usuario, modifica el UID por el de la cuenta central, y ejecuta la shell de registro de la cuenta. Esto también permite que se pueda ejecutar un programa como si un usuario diferente lo hubiera iniciado y lo suelen usar los administradores  de sistema para realizar tareas de mantenimiento.

Ya que el UID es la clave de la identidad del usuario, empezaremos por ahí.

El UID tiene su propio tipo, uid_t, definido en sys/types.h. Suele ser un entero pequeño. Algunos los predefine el sistema, otros son creados por el administrador de sistema cuando el sistema reconoce a un nuevo usuario . Normalmente, los usuarios suelen tener valores UID superiores a 100.

informacion_getuid1La función getuid envía el UID con el que está asociado el programa. Suele ser el UID del usuario que inició el programa.

informacion_getuid2La función getlogin envía el nombre de registro asociado al usuario actual.

informacion_listado5El archivo del sistema /etc/passw contiene una base de datos que se encarga de las cuentas de usuario. Está compuesto por líneas, una para el usuario, que contiene el nombre del usuario, la contraseña encriptada, el identificador del usuario (UID), el identificador del grupo (GID), el nombre completo, el directorio principal, y la shell predeterminada. Por ejemplo:

informacion_UIDSi escribe un programa que determine el UID del usuario que inició dicho programa, podría ampliarlo para examinar el archivo de contraseña en busca del nombre de registro del usuario y del nombre completo. No se recomienda su uso porque los sistemas UNIX más modernos han dejado de usar los archivos sencillos de contraseña y ahora se usan sistemas de seguridad mucho mejores. La mayoría de sistemas, incluido Linux, permiten usar los archivos de contraseña sombreada que no contiene ningún tipo de información de contraseña encriptada (suele estar en etc/shadow, un archivo que, normalmente, no puede ser leído por los usuarios). Es por ello que se han definido varias funciones para proporcionar una interfaz de programación estándar y efectiva para esta información de usuario:

informacion_getpwuid1La estructura de la base de datos de la contraseña, passwd, definida en pwd.h incluye los siguientes miembros:

informacion_miembros_passwdAlgunos sistemas UNIX usan un nombre diferente para el campo del nombre completo del usuario, en algunos sistemas, es pw_gecos, como en Linux, y en otros, es pw_comment. Lo cual nos lleva a decir que no podemos recomendar su uso.

Tanto la función getpwuid como getpwnam envían un indicador a la estructura passwd que se corresponde con un usuario. El usuario es identificado por UID para getpwuid y por el nombre de registro para getpwnam. Ambas envían un indicador nulo y establecen errno si se produce un error.

Información de usuario

Veamos el programa de ejemplo user.c, que extrae la información de usuario de la base de datos de contraseña:

informacion_listadoPresenta la siguiente salida, que puede ser ligeramente diferente dependiendo de las versiones de LinuxUNIX:

informacion_programaEste programa llama a getuid para obtener el UID del usuario actual.

informacion_listado2Este UID se usa en getpwuid para obtener información detallada sobre el archivo de contraseña.

informacion_listado3A modo de alternativa le mostramos cómo puede proporcionar el nombre de usuario root a getpwnam para obtener información sobre el usuario.

informacion_listado4Para escanear toda la información del archivo de contraseña, puede usar la función getpwent. Lo cual incluye entradas de archivos sucesivas:

informacion_getpwentLa función getpwent retorna la información de cada usuario uno a uno. Cuando no queda ninguno, envía un indicador nulo.

informacion_getpwent2Puede usar la función endpwent para acabar de procesar las entradas escaneadas.

informacion_getpwent3La función setpwent restablece la posición del archivo de contraseña al principio, para que se pueda iniciar un nuevo escaneo con la siguiente llamada a getpwent.

informacion_getpwent_4Estas funciones trabajan de un modo muy similar a las funciones de escaneo del directorio opendir, readdir y closedir.

Los identificadores de grupo y de usuario (efectivo y real) se pueden obtener a través de otras funciones menos usadas:

informacion_geteuidSolamente el superusuario puede llamar a setuid y a setgid.

atras

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s