¿Cómo identifica Linux a los usuarios?

9

Quiero decir, si dos usuarios tienen el mismo nombre, ¿cómo sabe el sistema que en realidad son usuarios diferentes cuando impone permisos de archivo?

Se me ocurrió esta duda cuando estaba considerando cambiar el nombre de mi casa /home/old-archantes de reinstalar el sistema (tengo /homeen su propia partición y no la formateo), para poder tener una nueva, impecable /home/arch. Me preguntaba si el nuevo sistema me daría los viejos permisos en mis archivos o si me reconocería como diferente arch.

Arch Stanton
fuente
12
La respuesta simple es "no lo hace", porque se supone que no debes tener varios usuarios con el mismo nombre de usuario.
Ignacio Vazquez-Abrams
66
Los UID, que son distintos pero generalmente asociados con los nombres de usuario, son la forma de rastrear este tipo de cosas. Ver la salida de ls -n.
DopeGhoti
55
"Enviar" es una operación demasiado nebulosa para responder la pregunta. Los permisos solo se aplican a un único sistema (de tamaño arbitrario).
Ignacio Vazquez-Abrams
1
@ IgnacioVazquez-Abrams Esta pregunta realmente se me ocurrió cuando estaba considerando cambiar el nombre de mi casa /home/old-archantes de reinstalar el sistema (tengo /homeen su propia partición y no la formateo), para poder tener una nueva, impecable /home/arch. Me preguntaba si retendría los mismos permisos en mis archivos o si el sistema me reconocería como diferente arch.
Arch Stanton
1
Creo que el caso que menciona en su comentario es interesante, sobre dos usuarios con el mismo nombre de usuario, pero en diferentes sistemas instalados en la misma máquina, accediendo a los mismos archivos en una partición compartida. ¿Quizás podrías agregarlo a la pregunta?
Time4Tea

Respuestas:

10

En Unix, los usuarios se identifican por su ID (uid), que debe ser única (en el ámbito del sistema local). Entonces, incluso si fuera posible crear 2 usuarios diferentes con el mismo nombre (adduser en mi sistema se niega a hacer esto, vea esta pregunta para obtener más información ¿Pueden las cuentas de Unix separadas compartir un nombre de usuario pero tienen contraseñas separadas? ), Tendrían que obtener diferentes uids. Si bien es posible que pueda manipular archivos que contienen la información del usuario para que coincida con sus criterios, cada programa se basa en el supuesto de que los uids son únicos en el sistema, por lo que dichos usuarios serían idénticos.

EDITAR: La otra respuesta demostró un caso en el que tiene 2 nombres de usuario diferentes para el mismo uid; sin embargo, en lo que respecta al sistema, esto es como tener dos nombres diferentes para el mismo usuario, por lo que se deben evitar construcciones como esta si es posible , a menos que desee específicamente crear un alias para un usuario en el sistema (consulte la pregunta sobre alias de usuario de Unix en serverfault para obtener más información sobre los aspectos técnicos).

El sistema usa estos uid para imponer permisos de archivo. El uid y el gid (id. De grupo) del usuario al que pertenece el archivo se escriben en los metadatos del archivo. Si lleva el disco a otra computadora con un usuario diferente que comparte aleatoriamente el mismo uid, el archivo pertenecerá repentinamente a este usuario en ese sistema. Sabiendo que los uids generalmente no son más de enteros de 16 bits en un sistema unix, esto muestra que los uids no están destinados a ser globalmente únicos, solo únicos en el alcance del sistema local.

Lollen Jumplan
fuente
22

Si obliga a que existan múltiples usuarios con el mismo nombre de usuario, habrá múltiples entradas /etc/{shadow,passwd}con el mismo nombre:

$ cat /etc/passwd
...
a:x:1001:1002::/home/a:/bin/bash
a:x:1002:1003::/home/b:/bin/bash

# cat /etc/shadow
a:...:17702:0:99999:7:::
a:...:17702:0:99999:7:::

Si intenta iniciar sesión como ese usuario, iniciará sesión como la primera coincidencia.

$ ssh a@<host>
Password:
$ id
uid=1001(a) gid=1002(a) groups=1002(a)
$ pwd
/home/a

No habrá forma de iniciar sesión como el segundo usuario con el mismo nombre.

Tenga en cuenta que Linux rastrea a los usuarios por su uid, no por su nombre de usuario.

Sin embargo, sería posible que dos nombres de usuario diferentes fueran la misma ID de usuario. Considere una versión diferente de /etc/passwd:

$ cat /etc/passwd
...
a:x:1001:1002::/home/a:/bin/bash
b:x:1001:1002::/home/b:/bin/bash

Tenga en cuenta que para ambos nombres de usuario ay b, la tercera columna es 1001, esa es la identificación de usuario / usuario. Ahora, si el usuario ao el usuario binician sesión (incluso con diferentes contraseñas), ambos serán "usuario 1001" y se mostrarán como usuarios adesde la perspectiva del sistema operativo. Aquí también, la primera entrada coincidente es la que se devuelve (en la mayoría de los casos):

$ ssh a@host
Password: <a's password>
$ id
uid=1001(a) gid=1002(a) groups=1002(a)

$ ssh b@host
Password: <b's password>
$ id
uid=1001(a) gid=1002(a) groups=1002(a)

Ambos ay bson uid 1001y tendrán acceso a los recursos disponibles para uid 1001.

Andy Dalton
fuente
¿Por qué no verifica los nombres de usuario duplicados al crear uno nuevo?
phuclv
99
Tenga en cuenta que creo que incluso la mayoría de la línea de base useraddarrojará un ajuste si intenta agregar un usuario existente, por lo que por 'forzar' aquí Andy prácticamente significa 'editar manualmente /etc/passwdy /etc/shadowque es muy importante No intente esto en el territorio local.
Shadur
"No habrá forma de iniciar sesión como el segundo usuario con el mismo nombre". ¿No podrías seguir llamando setuidcon el segundo UID? O incluso sudo -u '#<uid>' bash?
jazzpi
1
@jazzpi Eso podría depender de la propia definición de "iniciar sesión". Sin embargo, no me resultaba difícil ver a los gerentes de inicio gráfico que permite esta situación ...
una CVn
3

Estaba considerando cambiar el nombre de mi casa /home/old-archantes de reinstalar el sistema. Me preguntaba si el nuevo sistema me daría los viejos permisos de mis archivos o si me reconocería como un arco diferente.

Si tiene un sistema de usuario único y realiza una reinstalación con la misma distribución o una distribución similar, es muy probable que su cuenta de usuario tenga la misma identificación de usuario y, por lo tanto, sea el mismo usuario desde la perspectiva del núcleo. Por ejemplo, el usuario creado durante la instalación ha sido UID 1000 en sistemas Debian hasta donde puedo recordar. Otros sistemas pueden usar algún otro número, pero es muy probable que sea un número entero pequeño que sea el mismo en cada instalación.

Lo mismo se aplica a otros usuarios también (si tiene alguno) ya que los UID generalmente se asignan secuencialmente. Es probable que el tercer usuario creado tenga el mismo UID que el tercer usuario creado en otro sistema. Debería tomar medidas de antemano para asegurarse de que los UID no se reutilicen en ambos sistemas.

Por razones similares, cualquier cosa que use NFS deberá tener una base de datos de usuario compartida.

Pero en este caso, dado que es su sistema personal, puede iniciar sesión como root y ejecutarlo chown newuser. -R /home/olduserincluso si el UID fuera diferente.

(Los sistemas Windows son diferentes, generan esa cadena de identificación más larga que es más aleatoria. Allí, si mueve un disco a otra máquina, los archivos serán vistos como propiedad de un usuario desconocido, y no tendrá acceso sin usar poderes de administrador.

Además, dije "probable" mucho en lo anterior. No se sabe si alguna distribución se comporta de manera diferente. Linux moderno también admite UID de 32 bits, por lo que si bien no es tan largo como los SID de Windows, todavía hay algo de espacio para usar si se quiere tener, por ejemplo, UID aleatorios. Por lo general, no hay mucho uso para eso, sin embargo. Se supone que el administrador del sistema debe saber qué discos conectan al sistema y ajustar la propiedad de los archivos en consecuencia, o hacer que el punto de montaje sea inaccesible para otros usuarios).

ilkkachu
fuente
1

Unix es un sistema muy antiguo, una era donde las capacidades de almacenamiento eran muy pequeñas, y todo, así como los archivos como usuarios, se identificaban por números . Los nombres llegaron más tarde , después de que el almacenamiento había crecido un poco.

Una virtud de este sistema es que los nombres son solo etiquetas enganchadas a los identificadores reales: las ID numéricas. Por lo tanto, puede tener varios nombres para un usuario (en edición / etc / passwd directamente), así como varios nombres para un archivo (útil para almacenar el archivo solo una vez, pero verlo en varias ubicaciones).

Los límites son el sistema para el usuario y la partición para el archivo.

Lo digo solo para aclarar, para explicar por qué las cosas son lo que son .

Debo confesar que nunca he intentado lo contrario, un mismo nombre con diferentes ID, siempre pensé que no era posible. ¿Lo es? No como un error?

ypouplard
fuente
1
Entonces, ¿está diciendo que otros sistemas de archivos como NTFS o CIFS usan nombres de usuario y no SIDS alfanuméricos para almacenar las propiedades y los permisos de los archivos?
doneal24
No estoy seguro, pero creo que es así, ya que el SIDS alfanumérico no existía cuando se creó Windows - Todavía recuerdo el día que compré Windows 286 , que fue el primer sucesor gráfico de MS-DOS ...
ypouplard
1
@ DougO'Neal: los SID de NT tienen dos formatos: una representación textual y una forma binaria de 12 bytes. AFAIK, NTFS usa este último internamente, por lo que todavía usa números para identificar a los usuarios, solo números muy grandes. :)
cHao
3
@ypouplard Cuando se creó Windows, era un sistema operativo de usuario único. No tenía ninguna necesidad de establecer la propiedad del archivo, ya que la persona sentada en el teclado gobernaba todo.
doneal24