Como crio contas de usuário a partir do Terminal no Mac OS X 10.5?

86

Gostaria de poder criar novos usuários no Mac OS X 10.5 remotamente depois de fazer o ssh'ing na máquina. Como eu faço isso?

JR Lawhorne
fonte
Ainda não tenho reputação de responder, mas se você estiver procurando como fazer isso no single_usermodo (uma redefinição de segurança), será necessário reiniciar o sistema mantendo-o pressionado Command-S, obtendo acesso de gravação ao disco por detalhes na tela e, em seguida, o rm /var/db/.AppleSetupDoneque permitirá que você crie uma nova conta de administrador. Espero que isso ajude alguém
New Alexandria

Respostas:

80

Use o comando dscl. Este exemplo criaria o usuário "luser", assim:

dscl . -create /Users/luser
dscl . -create /Users/luser UserShell /bin/bash
dscl . -create /Users/luser RealName "Lucius Q. User"
dscl . -create /Users/luser UniqueID "1010"
dscl . -create /Users/luser PrimaryGroupID 80
dscl . -create /Users/luser NFSHomeDirectory /Users/luser

Você pode usar o passwd para alterar a senha do usuário ou usar:

dscl . -passwd /Users/luser password

Você precisará criar / Users / luser para o diretório inicial do usuário e alterar a propriedade para que o usuário possa acessá-lo e verifique se o UniqueID é de fato exclusivo.

Esta linha adicionará o usuário ao grupo do administrador:

dscl . -append /Groups/admin GroupMembership luser
mais palmer
fonte
7
Como garanto que o UID é único?
JR Lawhorne
3
Não há maneira automática; se você criar um script para isso, basta executar o comando "id ####" e garantir que ele retorne "Não existe esse usuário" ou algum tipo de invasão.
palmer
1
Lembre-se de usar o sudo se você não tiver permissões.
Raffi Khatchadourian
BTW, como isso é muito mais detalhado do que deveria ser, eu carreguei esses comandos na useraddsintaxe.
Xiong Chiamiov
1
Observe que PrimaryGroupID 80é possível admin, portanto, luserpode ser usado sudomesmo que você não o adicione ao grupo de administradores.
Ruslo
20

(Essa resposta deve ser considerada um adendo para preencher alguns espaços em branco no procedimento de palmer)

Para escolher um UniqueID não utilizado para seu novo usuário, você pode usar:

maxid=$(dscl . -list /Users UniqueID | awk 'BEGIN { max = 500; } { if ($2 > max) max = $2; } END { print max + 1; }')
newid=$((maxid+1))

... use a sequência de comandos dscl que palmer deu para criar a conta e, em seguida, crie o diretório inicial do novo usuário com:

cp -R /System/Library/User\ Template/English.lproj /Users/luser
chown -R luser:staff /Users/luser
if [[ "$(sw_vers -productVersion)" != 10.[0-5].* ]]; then
    # Set ACL on Drop Box in 10.6 and later
    chmod +a "user:luser allow list,add_file,search,delete,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,writesecurity,chown,file_inherit,directory_inherit" /Users/luser/Public/Drop\ Box
fi

(existe um comando createhomedir, mas não funcionou quando o testei.)

Gordon Davisson
fonte
1
Criei um script que preenche nosso Open Directory Master com novos usuários e depois chama sudo createhomedir -s(IIRC) nas réplicas / compartilhamentos de arquivos do Open Directory, e eles criam os diretórios pessoais felizes.
Clinton Blackmore
2
dscl -listé limitado a 256 resultados; portanto, se você tiver mais de 256 usuários, essa técnica falhará ao garantir um UID exclusivo.
smokris
Pequeno truque para despejar 2 tubos adicionais (use apenas awk): dscl. -list / Usuários UniqueID | awk '{if ($ 2> max) max = $ 2; } END {print max + 1; } '
Valtoni Boaventura
@ValtoniBoaventura Nice. Incorporei isso por resposta (com um padrão no caso de não haver contas regulares). Também adicionei uma etapa para definir o Drop Box ACL (que foi adicionado na 10.6).
Gordon Davisson
8

Se você tem um monte de usuários para criar, é possível criar um arquivo de texto estruturado e passá-lo dsimportpara fazer o trabalho.

O Guia de administração da linha de comando da Apple possui um capítulo inteiro sobre usuários e grupos.

Clinton Blackmore
fonte
Ímpar. A Apple parece ter feito com a distância v10.5 do documento que referido inicialmente, mas manteve v10.3 e menos abrangente versão do Snow Leopard
CHB
7

Outra maneira de escolher um ID de usuário exclusivo antes de criar uma conta é apenas examinar a lista e verificar se o que você deseja usar não está lá:

 sudo dscl . list /Users uid
 sudo dscl . list groups gid

Prático, se você precisar usar um determinado ID


fonte
dscl -listé limitado a 256 resultados; portanto, se você tiver mais de 256 usuários, essa técnica falhará ao garantir um UID exclusivo.
smokris
yup que é o caminho mais curto para adicionar esse usuário aqui e agora, apenas grepcom o idque você tinha em mente para usar para o novo usuário
yair
7

Eu aproveitei as diferentes respostas aqui para criar o que acho um bom script para criar contas de usuário. É certo que isso não foi projetado para executar um comando por vez no ssh; Ele é projetado para ser executado por script ao compilar uma imagem do OS X com base em pacotes (criada por Casper Imaging ou InstaDMG ).

#!/bin/bash
# This script creates a user account under Mac OS X
# (tested with 10.5 and 10.6; likely works with 10.4 but not earlier)
# Written by Clinton Blackmore, based on work at
# http://serverfault.com/questions/20702

# === Typically, this is all you need to edit ===

USERNAME=joeadmin
FULLNAME="Joe Admin"
PASSWORD="hard_to_hack"

# A list of (secondary) groups the user should belong to
# This makes the difference between admin and non-admin users.
# Leave only one uncommented
#SECONDARY_GROUPS=""  # for a non-admin user
SECONDARY_GROUPS="admin _lpadmin _appserveradm _appserverusr" # for an admin user

# ====

if [[ $UID -ne 0 ]]; then echo "Please run $0 as root." && exit 1; fi

# Find out the next available user ID
MAXID=$(dscl . -list /Users UniqueID | awk '{print $2}' | sort -ug | tail -1)
USERID=$((MAXID+1))

# Create the user account
dscl . -create /Users/$USERNAME
dscl . -create /Users/$USERNAME UserShell /bin/bash
dscl . -create /Users/$USERNAME RealName "$FULLNAME"
dscl . -create /Users/$USERNAME UniqueID "$USERID"
dscl . -create /Users/$USERNAME PrimaryGroupID 20
dscl . -create /Users/$USERNAME NFSHomeDirectory /Users/$USERNAME

dscl . -passwd /Users/$USERNAME $PASSWORD


# Add use to any specified groups
for GROUP in $SECONDARY_GROUPS ; do
    dseditgroup -o edit -t user -a $USERNAME $GROUP
done

# Create the home directory
createhomedir -c > /dev/null

echo "Created user #$USERID: $USERNAME ($FULLNAME)"

O script permite especificar a quais grupos um usuário deve pertencer. Parece-me que isso pode ser diferente dependendo da versão do OS X que você está executando. Eu obtenho resultados diferentes quando executo idcomo administrador no OS X 10.6 do que quando executo como administrador no OS X 10.5.

Clinton Blackmore
fonte
Em outra resposta, Elliott alerta que o comando 'createhomedir -c', no final, criará contas para todos os usuários no diretório ao qual você está vinculado. (A opção '-c', na página de manual, 'cria diretórios pessoais apenas para caminhos locais locais'.) Existe outra opção, '-u nome_do_usuário', que pode funcionar melhor.
Clinton Blackmore
Olá, estou usando o script acima. Portanto, ele adiciona meu novo usuário, mas quando o usuário se conecta ao seu calendário, ele diz que não tem as permissões! Pode me ajudar ?
@ Jimmy: Eu recomendo fazer uma nova pergunta sobre falha do servidor e vincular a esta resposta, em vez de apenas fazer uma pergunta nos comentários, que raramente serão vistos. Eu esperaria que as permissões estivessem corretas. O uso de 'chown' e 'chmod' pode ajudar se você puder identificar um arquivo que não possui as permissões corretas ... mas não sei qual seria.
Clinton Blackmore
dscl -listé limitado a 256 resultados; portanto, se você tiver mais de 256 usuários, essa técnica falhará ao garantir um UID exclusivo.
smokris
4

Eu comecei um pouco invólucro sobre dsclque leva useraddparâmetros 's - não é completo (nem acho que ele pode ser, como algumas coisas não são possíveis no OS X), mas eu usei-o para fazer alguma criação do usuário.

A estrutura existe para todos os parâmetros; portanto, se você quiser tirar proveito dos incríveis recursos sociais do GitHub, é fácil.

Xiong Chiamiov
fonte
A execução # gem install osx-useradd.gemspecno OS X 10.5 resulta em ERROR: While executing gem ... (Gem::RemoteSourceException)e a segunda linha é HTTP Response 301 fetching http://gems.rubyforge.org/yaml.