Aggiungi un utente al sistema * solo se non esiste *


47

Ho eseguito il useradd {user}comando per aggiungere utenti al mio sistema, anche se ho intenzione di eseguirlo in un ambiente automatizzato, e potrebbe finire per essere eseguito di nuovo, anche se l'utente esiste già.

C'è un modo in cui posso eseguirlo solo se l'utente non esiste già? L'utente non ha una cartella home.


adduserè generalmente preferito sui sistemi Debian / Ubuntu.
Faheem Mitha,

@FaheemMitha Negli script automatici, è probabilmente meglio usare il più coerente useradd.
The Guy with The Hat,

Risposte:


69

id -u somename restituisce un codice di uscita diverso da zero quando l'utente non esiste.

Puoi testarlo semplicemente ... ( &>/dev/nullsopprime il normale output / avviso)

id -u somename &>/dev/null || useradd somename 

1
In modo portatile: "id -u somename> / dev / null 2> & 1 || useradd somename"
Tristan

13

prova questo:

useradd {user} || echo "User already exists."

o anche questo:

useradd {user} || true

Ciò consente di salvare il controllo poiché non riesce in modo sicuro se l'utente esiste già.
CoverosGene,

8

A meno che tu non abbia solo una manciata di sistemi, stai facendo la domanda sbagliata. La risposta non è affatto eseguire useradd, ma lasciare questo lavoro a una soluzione di gestione della configurazione come burattino o cuoco. Ciò consentirà di centralizzare le definizioni utente e impedirà l'esecuzione di loop e l'utilizzo di ssh con utenti root per configurare i sistemi. Avrai sempre sistemi in uno stato di configurazione noto.

La documentazione per il burattino è disponibile su http://docs.puppetlabs.com

Ad esempio nel burattino:

user { "bob" : 
  password   => "$1$yv3n066X$Vpb05Ac/fHTicNdT9T5vz1", # generated with `openssl passwd -1`
  ensure     => present,                              # ensure => absent to remove
  managehome => true,
}

4
Puppet è un grande progetto, ma non puoi fare ipotesi su ciò che l'OP sta davvero chiedendo :)
rahmu

1
L'OP ha spiegato l'obiettivo in modo molto chiaro: automatizzato e in grado di essere eseguito nuovamente anche se l'utente esiste (idempotenza). Questi sono i casi d'uso esatti per uno strumento di gestione della configurazione. Quando qualcuno non è a conoscenza dell'esistenza di strumenti per risolvere questi problemi, tende a porre domande che implicano la risoluzione di un problema molto specifico e strettamente focalizzato quando esiste un concetto più ampio da comprendere.
Aaron Brown,

Sto già usando Chef.
Tarnfeld,

1
Chef aggiungerà utenti solo se l'utente non esiste. Ecco cos'è l'idempotenza, quindi non capisco la domanda (ormai 1,5 anni).
Aaron Brown,

4

useradd non aggiungerebbe di nuovo l'utente se esiste già, intende assicurarsi che il numero uid e il login uid siano univoci. Se stai pianificando di eseguire un batch, assicurati che gli uid utilizzati siano univoci; useradd si lamenterebbe delle voci problematiche ed è necessario acquisire gli errori / stderr per vedere quali account utente hanno avuto problemi ad accedere ai sistemi di account (/ etc / passwd, group, shadow).

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.