Adicione um usuário ao sistema * somente se ele não existir *

47

Estou executando o useradd {user}comando para adicionar usuários ao meu sistema, embora planeje executá-lo em um ambiente automatizado, e ele pode acabar sendo executado novamente, mesmo que o usuário já exista.

Existe uma maneira de executar isso apenas se o usuário ainda não existir? O usuário não tem uma pasta pessoal.

Tarnfeld
fonte
adduseré geralmente preferido nos sistemas Debian / Ubuntu.
Faheem Mitha
@FaheemMitha Em scripts automatizados, provavelmente é melhor usar o mais consistente useradd.
O cara com o chapéu

Respostas:

69

id -u somename retorna um código de saída diferente de zero quando o usuário não existe.

Você pode testá-lo de maneira simples ... ( &>/dev/nullapenas suprime a saída / aviso normal)

id -u somename &>/dev/null || useradd somename 
Peter.O
fonte
1
De uma maneira portátil: "id -u somename> / dev / null 2> & 1 || useradd somename"
Tristan
13

tente isto:

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

ou até isso:

useradd {user} || true
sebaszw
fonte
Isso salva a verificação, pois falha com segurança se o usuário já existir.
precisa saber é o seguinte
8

A menos que você tenha apenas alguns sistemas, você está fazendo a pergunta errada. A resposta não é executar o useradd, mas deixar esse trabalho para uma solução de gerenciamento de configuração, como fantoche ou chef. Isso permitirá que suas definições de usuário sejam centralizadas e impedirá que você execute loops e use ssh com usuários raiz para configurar seus sistemas. Você sempre terá sistemas em um estado de configuração conhecido.

A documentação para fantoches está disponível em http://docs.puppetlabs.com

Como um exemplo no fantoche:

user { "bob" : 
  password   => "$1$yv3n066X$Vpb05Ac/fHTicNdT9T5vz1", # generated with `openssl passwd -1`
  ensure     => present,                              # ensure => absent to remove
  managehome => true,
}
Aaron Brown
fonte
4
Puppet é um projeto grande, mas você não pode fazer suposições sobre o que o OP é realmente pedindo :)
rahmu
1
O OP explicou o objetivo com muita clareza - automatizado e capaz de ser executado novamente, mesmo que o usuário exista (idempotência). Esses são os casos de uso exatos para uma ferramenta de gerenciamento de configuração. Quando alguém não está ciente de que já existem ferramentas para resolver esses problemas, elas tendem a fazer perguntas que envolvem a solução de um problema muito específico e com foco restrito quando há um conceito maior a ser compreendido.
Aaron Brown
Eu já estou usando o Chef.
tarnfeld
1
O Chef só adicionará usuários se o usuário não existir. Isso é o que é idempotência, então eu não entendo a pergunta (daqui a 1,5 anos).
Aaron Brown
4

O useradd não adicionaria o usuário novamente, se ele já existir, pretende garantir que o número e o login do uid sejam únicos. Se você planeja executar um lote, verifique se os uids que estão sendo usados ​​são exclusivos; O useradd reclamaria das entradas problemáticas e você precisará capturar os erros / stderr para ver quais contas de usuário tiveram problemas para entrar nos sistemas de contas (/ etc / passwd, group, shadow).

Nikhil Mulley
fonte