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

27

Qué comandos (o script) 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ía funcionar, pero me preguntaba si había una secuencia de comandos corta o una herramienta para crear cuentas de usuario completamente funcionales en Mountain Lion.

bmike
fuente

Respuestas:

33

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".
  • Como 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 posterior 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 se toma con 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 fotografiado más de 50 Macs de esta manera sin problemas. Utilizo esta cuenta para ejecutar comandos a través de SSH, eliminar parches a través de ARD y hacer la administración local de escritorio.
bispymusic
fuente
Parece prometedor, ¡lo probará pronto!
bmike
El problema que parece tener cuando intento adaptar este script para crear usuarios regulares al pasar 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 se muestra muy 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 scripts de shell es que nunca aprendí muy bien el uso de variables, principalmente porque no he necesitado usarlas para nada en este momento de mi trabajo. Tal vez @bmike u otra persona puedan ofrecer consejos.
bispymusic
@HackintoshCoat, ¿puedes publicar tu script? En su comando, ha escrito "/ users" en minúsculas, cuando en realidad es "/ Users". Dudo que ese sea el problema con tu script; pero, ojos nuevos que lo comprueben podrían encontrar el problema con bastante rapidez. Tengo un script similar que en realidad configura múltiples usuarios, por lo que el uso de variables en sí no es un problema.
Kent
2
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 de manual.
Alex Leach
14

Para automatizar aún más esto, la siguiente línea se puede utilizar 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
Kent
fuente
2

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 primario del usuario. 80 significa administrador y 20 significa personal . Y la configuración a 20 no hará que el usuario sea estándar. A menos que no se mencione el primer comando.

Vipin Johney
fuente
Para aclarar, ¿alguno de estos comandos logrará lo mismo?
MaxGabriel
Prefiero el primer comando, que se agrega a / Groups / admin .
Vipin Johney
0

Aquí hay un script de shell que escribí para agregar nuevos usuarios en Max OS X usando la línea de comandos. Funciona igual que si fuera Linux. Siéntase libre de editar uno para sus necesidades personales. Simplemente nómbrelo 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

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