Inizialmente, gli utenti dovevano corrispondere a un essere umano che utilizzava il sistema, da cui il nome. Ogni processo viene eseguito come un determinato utente e ogni file è di proprietà di un determinato utente. Un utente speciale, chiamato root, viene utilizzato per cose che non appartengono a un particolare utente umano, vale a dire il sistema operativo stesso. Poiché root corrisponde al sistema operativo stesso, ha tutti i privilegi.
Presto le persone hanno scoperto che era conveniente creare più utenti di sistema, senza ampi privilegi. Ciò consente di isolare i vari servizi in esecuzione su una macchina, in modo che non calpestino le dita degli altri. Un account di servizio (o "account di sistema", questi due termini sono sinonimi) è uno che corrisponde a un servizio in esecuzione sul sistema, piuttosto che a qualcuno che utilizza il sistema. Generalmente si dispone di un account di servizio per ogni attività in esecuzione sul sistema che ha il proprio set di privilegi (ad es. I propri file, le proprie porte di rete, ecc.).
Non esiste una definizione formale di account umano / di sistema / servizio. Al kernel non importa (oltre a garantire molti privilegi all'utente con UID 0). Alla maggior parte dei comandi di amministrazione non importa neanche. Alcune differenze tipiche sono:
- Un utente umano ha un nome reale come "John Doe", mentre un utente di sistema ha un nome descrittivo come "demone nasale" o nessuno.
- Un utente umano ha una vera shell di login (ad es.
/bin/sh
Oppure /bin/bash
oppure /bin/csh
. Alcuni utenti di sistema hanno una shell (quasi sempre /bin/sh
), altri no, a seconda di come devono essere utilizzati (ad es. su foo
Richiede foo
di avere una shell).
- Un utente umano ha spesso una password, ma non è sempre così, ad esempio un utente solo remoto potrebbe avere solo una chiave SSH. Si noti che sui moderni unices, la password non è presente
/etc/passwd
ma in alcuni altri file come /etc/shadow
.
- La home directory di un utente umano si trova di solito in
/home
(o in qualche posizione specifica del sito), mentre la home directory di un utente di sistema non è in genere sotto /home
e potrebbe non esistere (ma ci sono eccezioni).
- La maggior parte dei siti designa una gamma di ID utente per gli utenti del sistema e una gamma disgiunta per gli utenti umani. La prenotazione di 100–65533 o 500–65533 o 1000–65533 è tipica e la maggior parte delle distribuzioni sono impostate per iniziare a allocare gli ID utente reali da 500 o 1000.
Sui siti in cui gli account sono condivisi su più macchine, in genere esiste un server centrale che contiene elenchi di utenti, accessibili tramite NIS o LDAP . La passwd
voce in /etc/nsswitch.conf
specifica dove trovare le informazioni dell'utente. È comune avere utenti di sistema negli utenti locali /etc/passwd
e reali dal database a livello di rete, ma a volte ci sono utenti di sistema nel database a livello di rete (per applicare UID coerenti, che facilita la replica di server e dati), e talvolta ci sono utenti umani nel file locale (per consentire loro di accedere anche quando la rete è hosing).
Un account accessibile dall'uomo travestito da utente di sistema in genere non avrebbe un nome reale, ma avrebbe una shell di accesso e una password impostata o una chiave SSH, pur avendo un ID utente nell'intervallo di sistema. In effetti, sarebbe un travestimento migliore utilizzare un account di sistema reale la cui rimozione causerebbe l'interruzione di alcuni servizi. Ma non puoi avere regole rigide per rilevare potenziali attacchi: per definizione, gli attaccanti non seguono le regole.
Gli account di servizio e gli account umani sono gestiti dagli stessi comandi e registrati negli stessi file. I comandi di creazione dell'account possono avere opzioni per impostare valori predefiniti ragionevoli per utenti umani o di servizio, ad esempio per selezionare un ID utente nell'intervallo corretto e richiedere una password per un essere umano e disabilitare l'autenticazione password per un servizio. Ad esempio, adduser
vs adduser --system
o useradd
vs useradd -r
su Linux.