¿Qué es un equivalente del comando adduser en Mac OS X?
20
Quiero poder crear nuevos usuarios desde la línea de comandos cuando inicie sesión como administrador. Específicamente, estoy buscando un equivalente del addusercomando en Linux.
Hay un buen script disponible en http://wiki.freegeek.org/index.php/Mac_OSX_adduser_script.
Sin embargo, tiene varios errores tipográficos y, a veces, no es lo suficientemente flexible, así que aquí está mi versión modificada con algunas mejoras:
#!/bin/bash
# =========================
# Add User OS X Interactive Command Line
# =========================
getHiddenUserUid()
{
local __UIDS=$(dscl . -list /Users UniqueID | awk '{print $2}' | sort -ugr)
#echo $__UIDS
local __NewUID
for __NewUID in $__UIDS
do
if [[ $__NewUID -lt 499 ]] ; then
break;
fi
done
echo $((__NewUID+1))
}
getInteractiveUserUid()
{
# Find out the next available user ID
local __MAXID=$(dscl . -list /Users UniqueID | awk '{print $2}' | sort -ug | tail -1)
echo $((__MAXID+1))
}
if [ $UID -ne 0 ] ; then echo "Please run $0 as root." && exit 1; fi
read -p "Enter your desired user name: " USERNAME
read -p "Enter a full name for this user: " FULLNAME
read -s -p "Enter a password for this user: " PASSWORD
echo
read -s -p "Validate a password: " PASSWORD_VALIDATE
echo
if [[ $PASSWORD != $PASSWORD_VALIDATE ]] ; then
echo "Passwords do not match!"
exit 1;
fi
# ====
# A list of (secondary) groups the user should belong to
# This makes the difference between admin and non-admin users.
read -p "Is this an administrative user? [y/n] (n): " GROUP_ADD
GROUP_ADD=${GROUP_ADD:-n}
if [ "$GROUP_ADD" = n ] ; then
SECONDARY_GROUPS="staff" # for a non-admin user
elif [ "$GROUP_ADD" = y ] ; then
SECONDARY_GROUPS="admin _lpadmin _appserveradm _appserverusr" # for an admin user
else
echo "You did not make a valid selection!"
exit 1;
fi
# ====
# Create a UID that is not currently in use
read -p "Should this user have interactive access? [y/n] (y): " IS_INTERACTIVE
IS_INTERACTIVE=${IS_INTERACTIVE:-y}
if [ "$IS_INTERACTIVE" = y ] ; then
USERID=$(getInteractiveUserUid)
elif [ "$IS_INTERACTIVE" = n ] ; then
USERID=$(getHiddenUserUid)
else
echo "You did not make a valid selection!"
exit 1;
fi
echo "Going to create user as:"
echo "User name: " $USERNAME
echo "Full name: " $FULLNAME
echo "Secondary groups: " $SECONDARY_GROUPS
echo "UniqueID: " $USERID
read -p "Is this information correct? [y/n] (y): " IS_INFO_CORRECT
IS_INFO_CORRECT=${IS_INFO_CORRECT:-y}
if [ "$IS_INFO_CORRECT" = y ] ; then
echo "Configuring Open Directory..."
elif [ "$IS_INFO_CORRECT" = n ] ; then
echo "User creation cancelled!"
exit 1;
else
echo "You did not make a valid selection!"
exit 1;
fi
# Create the user account by running dscl (normally you would have to do each of these commands one
# by one in an obnoxious and time consuming way.
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 user to any specified groups
echo "Adding user to specified groups..."
for GROUP in $SECONDARY_GROUPS ; do
dseditgroup -o edit -t user -a $USERNAME $GROUP
done
# Create the home directory
echo "Creating home directory..."
createhomedir -c 2>&1 | grep -v "shell-init"
echo "Created user #$USERID: $USERNAME ($FULLNAME)"
Al menos el 10.12 / Sierra esto podría ser problemático. Cuando lo probé, estaba creando directorios para cada usuario en la red. Específicamente, usar 'createhomedir' sin especificar '-u nombre de usuario' probablemente sea desaconsejado.
Jan Kyu Peblik
17
Creo que estás buscando el comando dscl. Niutil suena como NetInfo, que está en desuso en OS X a favor de Open Directory, también conocido como LDAP.
Dscl, o línea de comando de servicios de directorio, se puede usar para editar Open Directory para un almacén de datos de usuario local o remoto. Se puede hacer con comandos sudo pero es más fácil de usar como root.
Aquí hay un tutorial corto y muy inadecuado: en la terminal, sudo -s para cambiar su usuario a root. Para crear una cuenta de usuario funcional llamada dscl2, debe hacer lo siguiente:
El UUID es típicamente alrededor de 501 o mayor. 501 es el UID predeterminado para la primera cuenta creada. Los UID inferiores a 500 no aparecen en el panel Cuentas de forma predeterminada. Elija el número que desee, pero asegúrese de que sea único en el sistema local. No sobrescriba un UID existente o tendrá grandes problemas.
Dscl también tiene un modo interactivo que funciona un poco diferente. Ingrese solo "dscl" en el indicador para ingresar al modo interactivo.
Si está en modo interactivo, escriba ls para enumerar qué directorios están disponibles. Debería ver BSD, LDAP y Local. Navegas por los directorios con cd. Vea a su amigo la página del manual para más información.
Sé que nos advirtió que esto era inadecuado, pero sería genial ver el conjunto completo de pasos necesarios para crear una cuenta, incluso después de que dscl haya terminado. Por ejemplo, ¿se necesita crear una carpeta / Users / dscl2? ¿Cómo aplicar las ACL?
Nathan Garabedian
1
Esta respuesta es correcta, pero el script en la respuesta @ anton-matosov es excelente. Ejecuta los mismos comandos.
Creo que estás buscando el comando dscl. Niutil suena como NetInfo, que está en desuso en OS X a favor de Open Directory, también conocido como LDAP.
Dscl, o línea de comando de servicios de directorio, se puede usar para editar Open Directory para un almacén de datos de usuario local o remoto. Se puede hacer con comandos sudo pero es más fácil de usar como root.
Aquí hay un tutorial corto y muy inadecuado: en la terminal, sudo -s para cambiar su usuario a root. Para crear una cuenta de usuario funcional llamada dscl2, debe hacer lo siguiente:
El UUID es típicamente alrededor de 501 o mayor. 501 es el UID predeterminado para la primera cuenta creada. Los UID inferiores a 500 no aparecen en el panel Cuentas de forma predeterminada. Elija el número que desee, pero asegúrese de que sea único en el sistema local. No sobrescriba un UID existente o tendrá grandes problemas.
Dscl también tiene un modo interactivo que funciona un poco diferente. Ingrese solo "dscl" en el indicador para ingresar al modo interactivo.
Si está en modo interactivo, escriba ls para enumerar qué directorios están disponibles. Debería ver BSD, LDAP y Local. Navegas por los directorios con cd. Vea a su amigo la página del manual para más información.
fuente