Dodaj użytkownika do systemu * tylko jeśli nie istnieje *

47

Byłem uruchamiając useradd {user}polecenie, aby dodać użytkowników do mojego systemu, choć mam zamiar to działa w zautomatyzowanym środowisku, a to może skończyć się ich uruchomić ponownie, mimo że użytkownik już istnieje.

Czy istnieje sposób, w jaki mogę to uruchomić, tylko jeśli użytkownik jeszcze nie istnieje? Użytkownik nie ma folderu domowego.

Tarnfeld
źródło
adduserjest ogólnie preferowany w systemach Debian / Ubuntu.
Faheem Mitha
@FaheemMitha W skryptach automatycznych prawdopodobnie lepiej używać bardziej spójnych useradd.
Facet z

Odpowiedzi:

69

id -u somename zwraca niezerowy kod wyjścia, gdy użytkownik nie istnieje.

Możesz to przetestować po prostu ... ( &>/dev/nullpo prostu tłumi normalne wyjście / ostrzeżenie)

id -u somename &>/dev/null || useradd somename 
Peter.O
źródło
1
W przenośny sposób: „id -u somename> / dev / null 2> & 1 || useradd somename”
Tristan
13

Spróbuj tego:

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

a nawet to:

useradd {user} || true
sebaszw
źródło
Zapisuje to czek, ponieważ nie powiedzie się bezpiecznie, jeśli użytkownik już istnieje.
CoverosGene
8

Chyba że masz tylko niewielką garść systemów, zadajesz złe pytanie. Odpowiedź nie polega na tym, aby w ogóle uruchamiać użytkownika, ale zamiast tego pozostaw tę pracę rozwiązaniu do zarządzania konfiguracją, takim jak marionetka lub szef kuchni. Umożliwi to scentralizowanie definicji użytkownika i zapobiegnie uruchamianiu pętli i używaniu ssh z użytkownikami root do konfigurowania systemów. Zawsze będziesz mieć systemy w znanym stanie konfiguracji.

Dokumentacja marionetki jest dostępna na stronie http://docs.puppetlabs.com

Jako przykład w marionetce:

user { "bob" : 
  password   => "$1$yv3n066X$Vpb05Ac/fHTicNdT9T5vz1", # generated with `openssl passwd -1`
  ensure     => present,                              # ensure => absent to remove
  managehome => true,
}
Aaron Brown
źródło
4
Puppet to świetny projekt, ale nie można zakładać, o co tak naprawdę prosi OP :)
rahmu 24'12
1
OP wyjaśnił cel bardzo jasno - zautomatyzowany i może być uruchomiony ponownie, nawet jeśli użytkownik istnieje (idempotencja). Są to dokładne przypadki użycia narzędzia do zarządzania konfiguracją. Kiedy ktoś nie zdaje sobie sprawy z tego, że istnieją już narzędzia do rozwiązania tych problemów, zwykle zadaje pytania dotyczące rozwiązania bardzo konkretnego, wąsko skoncentrowanego problemu, gdy istnieje większa koncepcja do zrozumienia.
Aaron Brown
Już używam szefa kuchni.
tarnfeld
1
Szef kuchni doda użytkowników tylko wtedy, gdy użytkownik nie istnieje. Taka jest idempotencja, więc nie rozumiem pytania (teraz 1,5 roku).
Aaron Brown,
4

useradd nie dodałby użytkownika ponownie, jeśli już istnieje, chce się upewnić, że numer UID i login UID są unikalne. Jeśli planujesz uruchomić partię, upewnij się, że używane płyny są unikalne; useradd narzekałby na problematyczne wpisy i musisz przechwycić błędy / stderr, aby zobaczyć, które konta użytkowników miały problemy z dostępem do systemów kont (/ etc / passwd, group, shadow).

Nikhil Mulley
źródło