Quais etapas são necessárias para criar um novo usuário a partir da linha de comando?

27

Quais comandos (ou scripts) podem criar uma conta de usuário totalmente funcional no Mountain Lion, executando apenas a partir da linha de comando via terminal ou ssh.

Parece que um par de respostas existente pode funcionar, mas me perguntei se havia um script ou ferramenta curta para criar contas de usuário totalmente funcionais no Mountain Lion?

bmike
fonte

Respostas:

33

Aqui está um script de shell que escrevi no trabalho para lidar com isso como parte do processo NetInstall (criando uma conta de administrador local automaticamente durante o processo de criação de imagens).

#!/bin/sh
. /etc/rc.common
dscl . create /Users/administrator
dscl . create /Users/administrator RealName "Administrator Account"
dscl . create /Users/administrator hint "Password Hint"
dscl . create /Users/administrator picture "/Path/To/Picture.png"
dscl . passwd /Users/administrator thisistheaccountpassword
dscl . create /Users/administrator UniqueID 501
dscl . create /Users/administrator PrimaryGroupID 80
dscl . create /Users/administrator UserShell /bin/bash
dscl . create /Users/administrator NFSHomeDirectory /Users/administrator
cp -R /System/Library/User\ Template/English.lproj /Users/administrator
chown -R administrator:staff /Users/administrator

Algumas notas para mencionar:

  • Eu tenho isso salvo como um arquivo ".sh" executável.
  • Como é executado durante o NetInstall, ele é executado como root e precisa ser executado como root para funcionar corretamente. Você também pode subtrair as duas primeiras linhas, adicionar um "sudo" ao início de cada linha subseqüente e executá-las manualmente como comandos individuais no Terminal.
  • Modifique o UniqueID de 501 para um número que você sabe que é seguro em todos os sistemas (501 é obtido pela primeira conta criada em um Mac, geralmente algo maior como 550 provavelmente estará seguro, dependendo de quantos usuários você tiver no sistema) .
  • PrimaryGroupID de 80 cria um usuário Admin. Mude para PrimaryGroupID de 20 para criar um usuário padrão.
  • Imaginei mais de 50 Macs dessa maneira, sem problemas. Uso essa conta para executar comandos via SSH, enviar correções via ARD e administrar localmente a mesa.
bispymusic
fonte
Parece promissor - testará em breve!
Bmike
O problema que parece ter quando tento adaptar esse script para criar usuários regulares, passando variáveis ​​ao script, é que tudo, exceto a última linha, funciona muito bem. Ou seja, o dscl cria o usuário e quando eu uso o dscl. lista / usuários, o usuário aparece muito bem, mas o chown não reconhece o usuário e, como não consigo alterar corretamente as permissões do diretório inicial, ele não permite que o usuário efetue login. Alguma idéia?
Eu queria poder. Uma das minhas fraquezas no que diz respeito ao script de shell é que nunca aprendi muito bem o uso de variáveis, principalmente porque na verdade não precisei usá-las para nada neste momento do meu trabalho. Talvez @bmike ou outra pessoa possa oferecer conselhos.
22413 bispymusic
@HackintoshCoat você pode postar seu script? No seu comando, você digitou minúsculas "/ users", quando na verdade é "/ Users". Duvido que esse seja o problema do seu script; mas, novos olhos verificando se pode encontrar o problema rapidamente. Eu tenho um script semelhante que realmente configura vários usuários, portanto, o uso de variáveis ​​em si não é um problema.
Kent
2
Em vez das duas últimas linhas ( cp -R ...; chown -R ...), você pode usar o comando createhomedir -u administrator. createhomedirtem uma página de manual também.
Alex Leach
14

Para automatizar ainda mais isso, a seguinte linha pode ser usada para obter o próximo ID de usuário "disponível" se você estiver executando em um Mac que já tenha usuários configurados.

LastID=`dscl . -list /Users UniqueID | awk '{print $2}' | sort -n | tail -1`

NextID=$((LastID + 1))

Então, a linha correspondente na resposta do bispymusic acima pode ser alterada:

 dscl . create /Users/administrator UniqueID $NextID
Kent
fonte
2

Tenho algumas atualizações na resposta acima.

dscl / -append /Groups/admin GroupMembership newUserName

Este comando pode ser usado para fazer com que o usuário tenha acesso administrativo. Se este comando não for fornecido, o usuário será automaticamente definido como usuário padrão.

dscl . create /Users/newUserName PrimaryGroupID 80

Isso define o ID do grupo principal do usuário. 80 significa administrador e 20 significa equipe . E definir 20 não tornará o usuário padrão. A menos que o primeiro comando não seja mencionado.

Vipin Johney
fonte
Para esclarecer, um desses comandos realizará a mesma coisa?
precisa saber é o seguinte
Eu prefiro o primeiro comando, anexando a / Groups / admin .
Vipin Johney
0

Aqui está um script de shell que escrevi para adicionar novos usuários no Max OS X usando a linha de comando. Funciona da mesma forma como se fosse Linux. Sinta-se livre para editar um para suas necessidades pessoais. Apenas nomeie como useradd.sh e defina as permissões corretas ( chmod 0700 useradd.shno meu caso). Obrigado ao bispymusic, Alex Leach, Kent, por suas contribuições.

OS X High Sierra testado

#!/bin/sh

if [[ `id -u` != 0 ]]; then
    echo "Must be root to run script"
    exit
fi

read -p "Enter user name and press [ENTER]: " UserName

if [[ $UserName == `dscl . -list /Users UniqueID | awk '{print $1}' | grep -w $UserName` ]]; then
    echo "User already exists!"
    exit 0
fi

read -p "Enter real name and press [ENTER]: " RealName
read -p "Enter PrimaryGroupID (80 - admin, 20 - user) and press [ENTER]: " PrimaryGroupID
LastID=`dscl . -list /Users UniqueID | awk '{print $2}' | sort -n | tail -1`
NextID=$((LastID + 1))

. /etc/rc.common
dscl . create /Users/$UserName
dscl . create /Users/$UserName RealName $RealName

read -p "Enter password hint and press [ENTER]: " PasswordHint
dscl . create /Users/$UserName hint $PasswordHint
PasswordHint=0

echo " "
read -s -p "Enter Account Password and press [ENTER]: " AccountPassword
echo " "
read -s -p "Enter Account Password again and press [ENTER]: " AccountPasswordRepeat
if [[ $AccountPassword == $AccountPasswordRepeat ]]; then
  dscl . passwd /Users/$UserName $AccountPassword
  AccountPassword=0
else
  echo "Passwords do not match!"
  exit 1
fi
echo " "
dscl . create /Users/$UserName UniqueID $NextID
dscl . create /Users/$UserName PrimaryGroupID $PrimaryGroupID
dscl . create /Users/$UserName UserShell /bin/bash
dscl . create /Users/$UserName NFSHomeDirectory /Users/$UserName
createhomedir -u $UserName -c

echo " "
echo "New user `dscl . -list /Users UniqueID | awk '{print $1}' | grep -w $UserName` has been created with unique ID `dscl . -list /Users UniqueID | grep -w $UserName | awk '{print $2}'`"

você pode obter o mesmo da minha essência

Igor Voltaic
fonte
Poderia ser, NextID=$((`dscl . -list /Users UniqueID | awk '{print $2}' | sort -n | tail -1` + 1))mas parece melhor e mais claro do jeito que está agora.
Igor Voltaic