Curso de Linux / Usuarios, grupos y propiedad de archivos: UID y GID

Linux asigna a los usuarios un UID (ID de usuario) y a los grupos un GID (ID de grupo), y registra el usuario propietario y el grupo propietario en los archivos. Una cuenta puede tener un grupo principal y grupos adicionales. Al verificar la cuenta actual y la propiedad de los archivos, use id, groups, getent, ls -l. Este curso se centra en leer con precisión la información mostrada, sin cambiar la propiedad.

La verificación de cuentas y grupos es una etapa preparatoria de Leer propietario y permisos. Después de cambiar el grupo, comprenda por qué se necesita una nueva sesión de inicio y luego juzgue los problemas de permisos.

Significado del UID y del GID

El nombre de cuenta que ve una persona, como learner, y el UID numérico que usa el sistema tienen una relación de correspondencia. Los grupos también tienen un nombre y un GID numérico. El grupo principal de un usuario es el grupo representativo especificado en la información de la cuenta, y los grupos adicionales son los grupos a los que se ha unido por separado. Para determinar los permisos reales, se usan juntos el propietario, el grupo y los bits de permiso del archivo. Solo pertenecer a un grupo no permite leer o modificar todos los archivos del grupo.

root es generalmente la cuenta de administrador con UID 0. No asuma que los UID y GID de las cuentas normales comienzan necesariamente desde 1000. Los valores varían según la política del sistema y la creación de cuentas.

Verificar los usuarios y grupos de la sesión actual

Los siguientes comandos se ejecutan como usuario normal y no modifican la cuenta. Sin argumentos, id muestra los identificadores de usuario y grupo y los grupos suplementarios; cuando los identificadores reales y efectivos difieren, muestra también los efectivos. En GNU id, id -un e id -gn devuelven los nombres del usuario y del grupo efectivos, y id -nG lista los grupos de la sesión. En un inicio de sesión normal el grupo efectivo suele coincidir con el principal de la cuenta, pero no deben confundirse en todos los contextos.

id
id -un
id -gn
id -nG
groups

Por ejemplo, el resultado de id podría mostrarse como uid=1000(learner) gid=1000(learner) groups=1000(learner),10(wheel). Este es un ejemplo explicativo y los nombres, números y grupos reales varían según el sistema. gid=... es el grupo principal y groups=... es la lista de grupos aplicada a la sesión actual.

groups también permite verificar de manera simple los nombres de los grupos de la sesión actual. Si el administrador acaba de cambiar la pertenencia a un grupo, la lista de grupos de una sesión de inicio que ya está abierta podría no cambiar de inmediato. Asegúrese de diferenciar entre la configuración en la base de datos de usuarios y los grupos aplicados al proceso actual.

Consultar datos de cuentas con getent

getent consulta la base de datos de cuentas y grupos que utiliza el Name Service Switch (NSS) del sistema. Dependiendo del entorno, los resultados pueden incluir no solo archivos locales sino también servicios de directorio externos, por lo que refleja mejor el método real de consulta de nombres que leer directamente solo /etc/passwd. El siguiente ejemplo consulta en las bases de datos el usuario y el grupo efectivos que identifican esos comandos.

getent passwd "$(id -un)"
getent group "$(id -gn)"

Una línea de getent passwd generalmente separa con dos puntos el nombre, el marcador de posición de la contraseña, UID, GID predeterminado, descripción, directorio principal y el shell de inicio de sesión. Esto no significa que la contraseña en sí se muestre en texto plano en esa línea. getent group muestra el nombre del grupo y el GID, entre otros. No se puede conocer a todos los usuarios que usan un grupo predeterminado solo con ver la lista de miembros del grupo, por lo que es mejor confirmar los grupos reales de los usuarios con id.

En un entorno de instalación mínima, getent puede no estar presente. En ese caso, verifique las herramientas de consulta que proporciona la biblioteca de C (libc) o la distribución instalada. No modifique directamente /etc/passwd o /etc/group para cambiar la información de la cuenta.

Lectura de usuario propietario y grupo de archivos

Cree un archivo de práctica para verificar la propiedad. Si ~/linux-course-16-practice ya existe, elija otro nombre, y si mkdir falla, no ejecute el siguiente comando. Ejecutar touch en un archivo existente puede cambiar la fecha y hora.

mkdir ~/linux-course-16-practice
cd ~/linux-course-16-practice
pwd
touch own.txt
ls -l own.txt

En la salida de ls -l, los dos nombres que aparecen después de los permisos y el número de enlaces son generalmente el usuario propietario y el grupo propietario. Un archivo nuevo normalmente es propiedad del usuario actual, pero la elección del grupo puede verse afectada por la configuración del directorio padre y el comportamiento del sistema de archivos, así que no asuma automáticamente que es el mismo que el grupo predeterminado. El tamaño y la hora también pueden variar según el entorno.

Puede extraer y comparar nombres y IDs numéricos en una sola línea con GNU stat. %U/%G son el nombre del usuario y del grupo propietario, y %u/%g es el ID numérico correspondiente.

stat -c '%U | %G | %u | %g | %n' own.txt

Por ejemplo, puede aparecer como learner | learner | 1000 | 1000 | own.txt, pero es necesario verificar los valores reales. La propiedad registra 'quién posee' y los permisos determinan 'qué se puede hacer', siendo información separada. Cambiar el propietario del archivo con chown afecta al sistema y a los datos, por lo que no se realiza en esta práctica de consulta de la propiedad.

Tres distinciones que se confunden fácilmente

  • Nombre de usuario y UID: el nombre se usa para mostrar y consultar; el sistema de archivos también usa el ID numérico.
  • Grupo principal y grupos adicionales: distingue un grupo principal de la cuenta y varios grupos de la sesión actual.
  • Datos de la cuenta y sesión actual: incluso si se cambia la base de datos, la lista de grupos de las sesiones ya abiertas puede no cambiar.

Cuando se encuentre un problema de permisos, primero verifique el usuario y grupo de la sesión actual con id, y luego verifique la propiedad del archivo de destino con ls -l o stat. Después de observar cómo se relacionan ambos resultados, investigue la configuración de permisos para poder acotar la causa.

Documentación oficial

El manual de GNU Coreutils describe id·groups·ls·stat, y el manual de getent(1) y el manual de nsswitch.conf(5) explican las rutas de consulta de la información de cuentas.