¿Cómo puedo crear un nuevo usuario a través de la terminal macOS 10.14?

Estoy tratando de escribir un script para agregar un usuario a una computadora. Estas no serán cuentas de administrador y deberían ser cuentas de personal. Ejecuté el siguiente script y puedo iniciar sesión en la cuenta, pero no puedo acceder a ningún archivo, crear ningún archivo ni guardar ningún archivo en la computadora.

En última instancia, me gustaría ejecutar esto para eliminar 5 cuentas de usuario y toda su información y luego crear 5 cuentas nuevas (esto es en un salón de clases donde tengo 36 computadoras), pero estoy luchando para crear un solo usuario correctamente con el siguiente script.

Cualquier ayuda sería muy apreciada.

#!/bin/bash

USERNAME=per1
FULLNAME="Period 1"
PASSWORD="test"
SECONDARY_GROUPS="staff" 

# ====

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)"
¿Dónde/cómo exactamente el script no hace lo que quieres que haga?
Esto está creando un usuario, pero creo que hay un problema con la creación del directorio de inicio. Tal vez un problema de permisos. Por ejemplo, no puedo ver ninguna carpeta en el buscador.
Recibo este error al iniciar sesión en la cuenta creada: la carpeta "Escritorio" no se puede abrir porque no tiene permiso para ver su contenido.
Bueno, sin mirar todo en detalle: ¿Cómo espera createhomedirsaber para qué usuario debe crear un directorio de inicio?
¡Gracias! Agregué el usuario y el script funciona ahora.
Un par de recomendaciones adicionales para el script: no es necesario que lo agregue staffcomo un grupo secundario, ya que ya se está configurando como el grupo principal de los usuarios (el personal es el grupo n.º 20). Además, recomiendo usar minúsculas o mayúsculas y minúsculas para las variables de entorno y de shell, ya que hay un montón de variables en mayúsculas (como $PATH, $USER, $UID, etc.) que tienen significados especiales, y si accidentalmente reutiliza una de ellas para algo de lo contrario, puede causar problemas.

Respuestas (2)

#!/bin/bash

USERNAME=per1
FULLNAME="Period 1"
PASSWORD="test"
SECONDARY_GROUPS="staff" 

# ====

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 -u $USERNAME > /dev/null

echo "Created user #$USERID: $USERNAME ($FULLNAME)"
La diferencia entre el script original y este aquí es la adición de -u $USERNAMEal createhomedircomando.

La respuesta de John Vincent es muy útil ya que puede crear el usuario para usted a través de un script ...

También querrá considerar la creación de estado de token seguro para el nuevo usuario si planea activar FileVault para el usuario.

Más información importante sobre SecureToken: https://derflounder.wordpress.com/2018/01/20/secure-token-and-filevault-on-apple-file-system/

Puede agregar el token seguro usando lo siguiente con la raíz:

sysadminctl -adminUser root -adminPassword <rootPassword> -secureTokenOn <user> -password <userPassword>

Puede verificar el estado del token seguro de esta manera:

sysadminctl -secureTokenStatus username_goes_here