¿Qué pasos son necesarios para crear un nuevo usuario desde la línea de comandos?

Qué comandos (o secuencias de comandos) pueden crear una cuenta de usuario completamente funcional en Mountain Lion, ejecutándose solo desde la línea de comandos a través de terminal o ssh.

Parece que un par de respuestas existentes podrían funcionar, pero me preguntaba si había una secuencia de comandos breve o una herramienta para crear cuentas de usuario completamente funcionales en Mountain Lion.

Respuestas (4)

Aquí hay un script de shell que escribí en el trabajo para manejar esto como parte del proceso de NetInstall (creando una cuenta de administrador local automáticamente durante el proceso de creación de imágenes).

#!/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

Algunas notas para mencionar:

  • Tengo esto guardado como un archivo ejecutable ".sh".
  • Dado que se ejecuta durante NetInstall, se ejecuta como root y necesita ejecutarse como root para funcionar correctamente. También puede restar las dos primeras líneas, agregar un "sudo" al comienzo de cada línea subsiguiente y ejecutarlas manualmente como comandos individuales en la Terminal.
  • Modifique UniqueID de 501 a un número que sepa que es seguro en todos los sistemas (501 es tomado por la primera cuenta creada en una Mac, generalmente algo más alto como 550 probablemente sea seguro, dependiendo de cuántos usuarios tenga en su sistema) .
  • PrimaryGroupID de 80 crea un usuario administrador. Cambie a PrimaryGroupID de 20 para crear un usuario estándar.
  • He creado imágenes de más de 50 Mac de esta manera sin problemas. Utilizo esta cuenta para ejecutar comandos a través de SSH, enviar parches a través de ARD y realizar tareas de administración local.
Parece prometedor, ¡lo probaré pronto!
El problema que parece tener cuando trato de adaptar este script para crear usuarios regulares pasando variables al script es que todo, excepto la última línea, funciona bien. Es decir, dscl crea el usuario, y cuando uso dscl. list /users, el usuario aparece bien, pero chown no reconoce al usuario, y dado que no puedo cambiar los permisos del directorio de inicio correctamente, no permitirá que ese usuario inicie sesión. ¿Alguna idea?
Ojalá pudiera. Una de mis debilidades cuando se trata de secuencias de comandos de shell es que nunca aprendí muy bien el uso de variables, principalmente porque en realidad no he necesitado usarlas para nada en este punto de mi trabajo. Tal vez @bmike o alguien más pueda ofrecer un consejo.
@HackintoshCoat, ¿puedes publicar tu guión? En su comando, ha escrito "/usuarios" en minúsculas, cuando en realidad es "/Usuarios". Dudo que ese sea el problema con tu guión; pero, ojos nuevos que lo revisen podrían encontrar el problema con bastante rapidez. Tengo una secuencia de comandos similar que en realidad configura varios usuarios, por lo que el uso de variables en sí no es un problema.
En lugar de las dos últimas líneas ( cp -R ...; chown -R ...), puede usar el comando createhomedir -u administrator. createhomedirtambién tiene una página man.
En vez de . puede usar "/LDAPv3/127.0.0.1" como fuente de datos. Un ejemplo: dscl "/LDAPv3/127.0.0.1" -list /Users UniqueID. Me tomó un par de horas averiguarlo...

Para automatizar aún más esto, la siguiente línea se puede usar para obtener la siguiente identificación de usuario "disponible" si está ejecutando en una Mac que ya tiene usuarios configurados.

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

NextID=$((LastID + 1))

Entonces, la línea correspondiente en la respuesta anterior de bispymusic podría cambiarse:

 dscl . create /Users/administrator UniqueID $NextID

Tengo algunas actualizaciones sobre la respuesta anterior.

dscl / -append /Groups/admin GroupMembership newUserName

Este comando puede usarse para hacer que el usuario tenga acceso administrativo. Si no se proporciona este comando, el usuario se establecerá automáticamente como usuario estándar.

dscl . create /Users/newUserName PrimaryGroupID 80

Esto establece la identificación del grupo principal del usuario. 80 significa administrador y 20 significa personal . Y el ajuste a 20 no hará que el usuario sea estándar. A menos que no se mencione el primer comando.

Para aclarar, ¿cualquiera de estos comandos logrará lo mismo?
Prefiero el primer comando, agregándolo a /Groups/admin .

Aquí hay un script de shell que escribí para agregar nuevos usuarios en Max OS X usando la línea de comando. Funciona igual que si fuera Linux. Siéntase libre de editar uno para sus necesidades personales. Simplemente asígnele el nombre useradd.sh y configure los permisos correctos ( chmod 0700 useradd.shen mi caso). Gracias a bispymusic, Alex Leach, Kent por sus contribuciones.

OS X High Sierra probado

#!/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}'`"

puedes obtener el mismo de mi esencia

Podría ser NextID=$((`dscl . -list /Users UniqueID | awk '{print $2}' | sort -n | tail -1` + 1)), pero se ve mejor y más claro de la forma en que está ahora.