¿Cómo creo cuentas de usuario desde la Terminal en Mac OS X 10.5?

86

Me gustaría poder crear nuevos usuarios en Mac OS X 10.5 de forma remota después de ingresar a la máquina. ¿Cómo hago esto?

JR Lawhorne
fuente
Todavía no tengo la reputación de responder, pero si está buscando cómo hacer esto desde el single_usermodo (un restablecimiento de seguridad), entonces deberá reiniciar presionando Command-S, obtener acceso de escritura al disco según los detalles en pantalla y luego, lo rm /var/db/.AppleSetupDoneque le permitirá crear una nueva cuenta de administrador. Espero que esto ayude a alguien
Nueva Alejandría

Respuestas:

80

Use el comando dscl. Este ejemplo crearía el usuario "luser", así:

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

Luego puede usar passwd para cambiar la contraseña del usuario, o usar:

dscl . -passwd /Users/luser password

Tendrá que crear / Users / luser para el directorio de inicio del usuario y cambiar la propiedad para que el usuario pueda acceder a él, y asegúrese de que UniqueID sea de hecho único.

Esta línea agregará al usuario al grupo del administrador:

dscl . -append /Groups/admin GroupMembership luser
palmero
fuente
77
¿Cómo me aseguro de que el UID sea único?
JR Lawhorne 05 de
3
No hay forma automática; Si escribe esto, puede hacer que ejecute el comando "id ####" y asegúrese de que devuelve "No existe ese usuario" o algún truco.
palmer
1
Recuerde usar sudo si no tiene permisos.
Raffi Khatchadourian
Por cierto, dado que esto es mucho más detallado de lo que debería ser, porté estos comandos a la useraddsintaxis.
Xiong Chiamiov
1
Tenga en cuenta que PrimaryGroupID 80es adminasí, luserpuede usarlo sudoincluso si no lo agrega al grupo de administradores.
ruslo
20

(Esta respuesta debe considerarse un apéndice para completar algunos espacios en blanco en el procedimiento de Palmer)

Para elegir un UniqueID no utilizado para su nuevo usuario, puede usar:

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

... luego use la secuencia de comandos dscl que palmer le dio para crear la cuenta, y luego cree el directorio de inicio del nuevo usuario con:

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

(hay un comando createhomedir, pero no funcionó cuando lo probé).

Gordon Davisson
fuente
1
Creé un script que llena nuestro Open Directory Master con nuevos usuarios, y luego llama sudo createhomedir -s(IIRC) en Open Directory Replicas / Fileshares, y felizmente crean los directorios de inicio.
Clinton Blackmore
2
dscl -listestá limitado a 256 resultados, por lo que si tiene más de 256 usuarios, esta técnica no garantizará un UID único.
smokris
Pequeño truco para desalojar 2 tuberías adicionales (use solo awk): dscl. -list / Users UniqueID | awk '{if ($ 2> max) max = $ 2; } FIN {print max + 1; } '
Valtoni Boaventura
@ValtoniBoaventura Nice. Lo incorporé por respuesta (con un valor predeterminado en caso de que no haya cuentas regulares). También agregué un paso para configurar la ACL de Drop Box (que se agregó en 10.6).
Gordon Davisson
8

Si tiene que crear un grupo de usuarios, es posible crear un archivo de texto estructurado y pasarlo dsimportpara hacer el trabajo.

La Guía de administración de línea de comandos de Apple tiene un capítulo completo sobre usuarios y grupos.

Clinton Blackmore
fuente
Impar. Apple parece haber eliminado la versión 10.5 del documento al que se refirió inicialmente, pero mantuvo la versión 10.3
chb
7

Otra forma de elegir una identificación de usuario única antes de crear una cuenta es simplemente revisar la lista y verificar que la que desea usar no esté allí:

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

Útil si necesita usar una determinada identificación


fuente
dscl -listestá limitado a 256 resultados, por lo que si tiene más de 256 usuarios, esta técnica no garantizará un UID único.
smokris
Sí, esa es la ruta más corta para agregar ese usuario aquí en este momento, solo grepcon lo idque tenía en mente usar para el nuevo usuario
yair
7

Aproveché las diferentes respuestas aquí para llegar a lo que creo que es un buen script para crear cuentas de usuario. Es cierto que esto no está diseñado para ejecutar un comando a la vez desde ssh; está más diseñado para ser un script ejecutado cuando se compila una imagen de OS X basada en un paquete (como lo creó Casper Imaging o 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)"

El script le permite especificar a qué grupos debe pertenecer un usuario. Me parece que esto puede diferir dependiendo de la versión de OS X que esté ejecutando. Obtengo resultados diferentes cuando ejecuto idcomo administrador en OS X 10.6 que cuando ejecuto como administrador en OS X 10.5.

Clinton Blackmore
fuente
En otra respuesta, Elliott advierte que el comando 'createhomedir -c', hacia el final, creará cuentas para todos los usuarios en el directorio al que está obligado. (La opción '-c', en la página de manual, 'crea directorios de inicio solo para rutas de inicio locales'). Hay otra opción, '-u nombre de usuario', que puede funcionar mejor.
Clinton Blackmore
hola estoy usando el script anterior. Por lo tanto, agrega mi nuevo usuario, pero cuando el usuario se conecta a su calendario, dice que no tiene los permisos. Me puedes ayudar ?
@jimmy: recomendaría hacer una nueva pregunta sobre serverfault y vincular a esta respuesta en lugar de simplemente hacer una pregunta en los comentarios, que rara vez se verá. Esperaría que los permisos sean correctos. El uso de 'chown' y 'chmod' puede ayudar si puede identificar un archivo que no tiene los permisos correctos ... pero no sé cuál sería.
Clinton Blackmore
dscl -listestá limitado a 256 resultados, por lo que si tiene más de 256 usuarios, esta técnica no garantizará un UID único.
smokris
4

Comencé un pequeño resumen sobre los parámetros de las dscltomas useradd: no está completo (ni creo que pueda serlo, ya que algunas cosas no son posibles en OS X), pero lo usé para crear algunos usuarios.

El marco está disponible para todos los parámetros, por lo que si desea aprovechar las increíbles funciones sociales de GitHub, es fácil de hacer.

Xiong Chiamiov
fuente
La ejecución # gem install osx-useradd.gemspecen OS X 10.5 da como resultado ERROR: While executing gem ... (Gem::RemoteSourceException)y la segunda línea es HTTP Response 301 fetching http://gems.rubyforge.org/yaml.