In che modo Linux identifica gli utenti?


9

Voglio dire, se due utenti hanno lo stesso nome, come fa il sistema a sapere che sono effettivamente utenti diversi quando impone i permessi sui file?

Questo dubbio mi è venuto in mente mentre stavo considerando di rinominare la mia casa /home/old-archprima di reinstallare il sistema (ho una /homesua partizione e non la formatto), in modo da poterne avere una nuova, incontaminata /home/arch. Mi chiedevo se il nuovo sistema mi avrebbe concesso i vecchi permessi sui miei file o se mi avrebbe riconosciuto come diverso arch.


12
La semplice risposta è "no", perché non dovresti avere più utenti con lo stesso nome utente.
Ignacio Vazquez-Abrams,

6
Gli UID, che sono distinti ma generalmente associati ai nomi degli utenti, sono il modo in cui questo tipo di cose viene tracciato. Vedi l'output di ls -n.
DopeGhoti,

5
"Invia" è un'operazione troppo nebulosa per rispondere alla domanda. Le autorizzazioni si applicano solo a un singolo sistema (di dimensioni arbitrarie).
Ignacio Vazquez-Abrams,

1
@ IgnacioVazquez-Abrams Mi è venuta in mente questa domanda quando stavo pensando di rinominare la mia casa /home/old-archprima di reinstallare il sistema (ho una /homesua partizione e non la formatto), in modo da poterne avere una nuova, incontaminata /home/arch. Mi chiedevo se avrei mantenuto le stesse autorizzazioni sui miei file o se il sistema mi avrebbe riconosciuto come diverso arch.
Arch Stanton,

1
Penso che il caso menzionato nel tuo commento sia interessante, su due utenti con lo stesso nome utente, ma su sistemi diversi installati sulla stessa macchina, che accedono agli stessi file su una partizione condivisa. Forse potresti aggiungerlo alla domanda?
Time4Tea,

Risposte:


10

In Unix, gli utenti sono identificati dal loro ID (uid), che deve essere unico (nell'ambito del sistema locale). Quindi, anche se fosse possibile creare 2 utenti diversi con lo stesso nome (adduser sul mio sistema si rifiuta di farlo, vedi questa domanda per ulteriori informazioni Possono account unix separati condividere un nome utente ma avere password separate? ), Dovrebbero avere diversi uid. Mentre potresti essere in grado di manipolare i file contenenti le informazioni dell'utente in modo che corrispondano ai tuoi criteri, ogni programma si basa sul presupposto che gli uid siano univoci sul sistema, quindi tali utenti sarebbero identici.

EDIT: l'altra risposta ha dimostrato un caso in cui hai 2 nomi utente diversi per lo stesso uid - per quanto riguarda il sistema, tuttavia, è come avere due nomi diversi per lo stesso utente, quindi costrutti come questo dovrebbero essere evitati se possibile , a meno che non si desideri creare un alias specifico per un utente nel sistema (consultare la domanda di alias utente unix su serverfault per ulteriori informazioni sugli aspetti tecnici).

Il sistema utilizza questi uid per applicare le autorizzazioni per i file. L'UID e il GID (ID gruppo) dell'utente a cui appartiene il file vengono scritti nei metadati del file. Se si trasporta il disco su un altro computer con un altro utente che condivide casualmente lo stesso uid, il file apparirà improvvisamente a questo utente su quel sistema. Sapendo che gli uid di solito non sono più di interi a 16 bit su un sistema unix, questo dimostra che gli uid non sono pensati per essere univoci a livello globale, ma unici nell'ambito del sistema locale.


22

Se imponi di esistere più utenti con lo stesso nome utente, allora ci saranno più voci /etc/{shadow,passwd}con lo stesso nome:

$ 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:::

Se si tenta di accedere come tale utente, si accederà come prima corrispondenza.

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

Non sarà possibile accedere come secondo utente con lo stesso nome.

Nota che Linux tiene traccia degli utenti in base al loro uid, non in base al loro nome utente.

Tuttavia, sarebbe possibile che due nomi utente diversi siano lo stesso ID utente. Considera una versione diversa di /etc/passwd:

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

Nota che per entrambi i nomi utente ae b, la terza colonna è 1001, ovvero l'ID utente / ID utente. Ora, se l'utente ao l'utente baccede (anche con password diverse), entrambi saranno "utente 1001" e mostreranno come utente adal punto di vista del sistema operativo. Anche qui, la prima voce corrispondente è quella restituita (nella maggior parte dei casi):

$ 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)

Entrambi ae bsono UID 1001e avranno accesso alle risorse disponibili per l'UID 1001.


perché non verifica la presenza di nomi utente duplicati quando ne crea uno nuovo?
phuclv,

9
Nota che penso che anche la maggior parte della linea di base useraddsi adatta se provi ad aggiungere un utente esistente, quindi forzare qui Andy significa praticamente modificare manualmente /etc/passwde /etc/shadowche è molto Non provare questo a casa.
Shadur,

"Non ci sarà modo di accedere come secondo utente con lo stesso nome." Non potresti ancora chiamare setuidcon il secondo UID? O addirittura sudo -u '#<uid>' bash?
jazzpi,

1
@jazzpi Questo potrebbe dipendere dalla propria definizione di "accesso". Tuttavia, potrei certamente vedere gestori di login grafici che permettono questa situazione ...
un CVn del

3

Stavo pensando di rinominare la mia casa /home/old-archprima di reinstallare il sistema. Mi chiedevo se il nuovo sistema mi avrebbe concesso i vecchi permessi sui miei file o se mi avrebbe riconosciuto come un arco diverso.

Se si dispone di un sistema a utente singolo e si esegue una reinstallazione con lo stesso o una distribuzione simile, è molto probabile che il proprio account utente abbia lo stesso ID utente e quindi sia lo stesso utente dal punto di vista del kernel. Ad esempio, per quanto ricordo, l'utente creato durante l'installazione è stato UID 1000 su sistemi Debian. Altri sistemi potrebbero usare un altro numero, ma è molto probabile che sia un numero intero piccolo che è lo stesso su ogni installazione.

Lo stesso vale anche per gli altri utenti (se ne hai), poiché gli UID sono generalmente allocati in sequenza. È probabile che il terzo utente creato abbia lo stesso UID del terzo utente creato su un altro sistema. Dovresti prima prendere delle misure per assicurarti che gli UID non vengano riutilizzati su entrambi i sistemi.

Per ragioni simili, qualsiasi cosa che utilizza NFS dovrà avere un database utente condiviso.

Ma in questo caso, dal momento che è il tuo sistema personale, puoi semplicemente accedere come root ed eseguire chown newuser. -R /home/olduseranche se l'UID dovesse essere diverso.

(I sistemi Windows sono diversi, generano quella stringa ID longish che è più casuale. Lì, se sposti un disco su un altro computer, i file saranno visti di proprietà di un utente sconosciuto e non avrai accesso senza usare i poteri di amministratore.

Inoltre, ho detto "probabilmente" molto in precedenza. Non si può dire se una certa distribuzione si comporti diversamente. Linux moderno supporta anche UID a 32 bit, quindi anche se non è lungo quanto i SID di Windows, c'è ancora un po 'di spazio da usare se si desidera avere UID randomizzati. Di solito, però, non è molto utile. L'amministratore di sistema dovrebbe sapere quali dischi si collegano al sistema e regolare di conseguenza le proprietà dei file o rendere inaccessibile il mountpoint ad altri utenti.)


1

Unix è un sistema molto vecchio, un'era in cui le capacità di archiviazione erano minuscole e tutto - compresi i file e gli utenti - erano identificati da numeri . I nomi arrivarono dopo , dopo che l'archiviazione era cresciuta un po '.

Una virtù di questo sistema è che i nomi sono solo etichette agganciate agli handle reali: gli ID numerici. Quindi puoi avere diversi nomi per un utente (modificando direttamente / etc / passwd), così come diversi nomi per un file (utile per archiviare il file una sola volta, ma vederlo in diverse posizioni).

I limiti sono il sistema per l'utente e la partizione per il file.

Lo dico solo per chiarire, per spiegare perché le cose sono ciò che sono .

Devo confessare di non aver mai provato il contrario - lo stesso nome con ID diversi - avevo sempre pensato che non fosse possibile. È? Non come un bug?


1
Quindi stai dicendo che altri file system come NTFS o CIFS usano nomi utente e non SIDS alfanumerici per archiviare filewerwerwers e permessi?
doneal24,

Non sono sicuro, ma credo che sia il caso, dato che SIDS alfanumerico non esisteva quando è stato creato Windows - Ricordo ancora il giorno in cui ho comprato Windows 286 , che è stato il primo successore grafico di MS-DOS ...
ypouplard il

1
@ DougO'Neal: i SID NT hanno due formati: una rappresentazione testuale e una forma binaria a 12 byte. AFAIK, NTFS usa quest'ultimo internamente, quindi usa ancora numeri per identificare gli utenti - solo numeri molto grandi. :)
cHao,

3
@ypouplard Quando è stato creato Windows, era un sistema operativo per utente singolo. Non c'era bisogno di impostare la gestione dei file poiché la persona seduta alla tastiera governava tutto.
doneal24,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.