29 votos

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

Qué comandos (o script) pueden crear una cuenta de usuario totalmente funcional en Mountain Lion, que se ejecuta sólo desde la línea de comandos a través de la terminal o ssh.

Parece que un par de respuestas podría funcionar, pero me preguntaba si había un breve script o herramienta para crear cuentas de usuario totalmente funcionales en Mountain Lion?

37voto

bispymusic Puntos 3414

Aquí hay un shell script 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 imagen).

#!/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 puedes restar las dos primeras líneas, añadir un "sudo" al principio de cada línea posterior y ejecutarlas manualmente como comandos individuales en Terminal.
  • Modifica el UniqueID de 501 a un número que sepas que es seguro en todos los sistemas (501 es tomado por la primera cuenta creada en un Mac, generalmente algo más alto como 550 será probablemente seguro, dependiendo de cuántos usuarios tengas en tu sistema).
  • El PrimaryGroupID de 80 crea un usuario Admin. Cambia a PrimaryGroupID de 20 para crear un usuario Estándar.
  • He creado imágenes de más de 50 Macs de esta manera sin problemas. Utilizo esta cuenta para ejecutar comandos a través de SSH, para enviar parches a través de ARD y para hacer la administración local del escritorio.

0 votos

Parece prometedor, lo probaré pronto.

0 votos

El problema que parece que tengo cuando intento adaptar este script para crear usuarios normales 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 sin problemas, pero chown no reconoce el usuario, y como no puedo cambiar los permisos del directorio home correctamente, no deja que ese usuario entre. ¿Alguna idea?

0 votos

Ojalá pudiera. Una de mis debilidades cuando se trata de scripts de shell es que nunca aprendí el uso de las variables muy bien, sobre todo porque en realidad no he necesitado usarlas para nada en este punto de mi trabajo. Tal vez @bmike o alguien más podría ofrecer consejos.

14voto

Kent Puntos 3462

Para automatizar aún más esto, se puede utilizar la siguiente línea para obtener el siguiente ID de usuario "disponible" si se está ejecutando en un mac que ya tiene usuarios configurados.

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

NextID=$((LastID + 1))

Entonces, se podría cambiar la línea correspondiente en la respuesta de bispymusic más arriba:

 dscl . create /Users/administrator UniqueID $NextID

2voto

Vipin Johney Puntos 121

Tengo algunas actualizaciones de la respuesta anterior.

dscl / -append /Groups/admin GroupMembership newUserName

Este comando puede utilizarse para 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

Establece el ID del grupo principal del usuario. 80 significa admin y 20 significa personal . Y el ajuste a 20 no hará que el usuario sea estándar. A menos que el primer comando no se menciona.

0 votos

Para aclarar, cualquiera de estos comandos logrará lo mismo?

0 votos

Prefiero el primer comando, añadiendo a /Grupos/admin .

0voto

Igor Voltaic Puntos 76

Aquí hay un shell script que escribí para añadir 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. Sólo tienes que llamarlo useradd.sh y establecer los permisos correctos ( chmod 0700 useradd.sh en 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}'`"

se puede obtener el mismo de mi esencia

0 votos

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.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X