domingo, enero 22, 2017

Crear usuarios en OS X desde la línea de comandos

Para añadir desde la línea de comandos un usuario en MacOS X es necesario usar el comando dscl - Directory Service command line utility -, cuya misión es interaccionar con el servicio de directorios de la máquina local o de una máquina remota.

Por ejemplo, para listar todos los usuarios que hay en la máquina se puede usar la siguiente orden que generará la salida que se muestra en el segundo bloque.

dscl . -list /Users
...
_amavisd
_appleevents
_appowner
_appserver
...

Si se quiere ver todos los atributos de los registros de usuario se puede ejecutar con las siguientes opciones y puede verse parte de la salida en el siguiente bloque:

dscl . -readall /Users
GeneratedUID: FFFFEEEE-DDDD-CCCC-BBBB-AAAA00000053
NFSHomeDirectory: /var/virusmails
Password: *
PrimaryGroupID: 83
RealName:
AMaViS Daemon
RecordName: _amavisd amavisd
RecordType: dsRecTypeStandard:Users
UniqueID: 83
UserShell: /usr/bin/false

Para añadir un usuario nuevo, será necesario crear un nuevo registro bajo /Users y añadir una serie de atributos que configuren la cuenta. Para proceder a esta creación y modificación de atributos, será necesario ejecutar el comando dscl desde una cuenta que tenga los privilegios adecuados. Si se quiere crear un usuario mldonkey, cuyo directorio $HOME sea /Users/mldonkey, con contraseña password1234, los pasos necesarios son:

# Crear el nuevo registro
sudo dscl . -create /Users/mldonkey
# Añadir el atributo que define el shell
sudo dscl . -create /Users/mldonkey UserShell /bin/bash
# Crear el atributo donde se guarda el nombre
sudo dscl . -create /Users/mldonkey RealName "Usuario par ejecutar mldonkey"
# Añadir el directorio $HOME
sudo dscl . -create /Users/mldonkey NFSHomeDirectory /Users/mldonkey

Ahora, nos falta dos atributos importantes: El UniqueID, el número que define el uid del usuario y el PrimaryGroupID , el número que identifica el grupo primario del usuario. Normalmente, usamos el grupo llamado staff, pero será necesario ver cual es su GroupID. Para ello con el siguiente comando nos devolverá el valor que se necesita:

dscl . -read /Groups/staff|grep PrimaryGroupID
PrimaryGroupID: 20

El un sistema de tipo Unix, el uid es único. Normalmente, OS X asigna los uid de usuarios normales a partir de 500, y este debe ser único. ¿Cómo se puede generar el siguiente libre?. Pues con esta orden:

dscl . -readall /Users|grep UniqueID |awk -v max=0 '{if($2>max){v=$2; max=$2}} END{print v+1 }'

Una vez que se tienen esos dos números, se añaden al registro los atributos, se establece la password, se crea el directorio raíz del usuario y se le ponen los permisos adecuados. Por ejemplo, en mi sistema el siguiente uid libre es el 507 y el PrimaryGroupID de staff es 20

# Añadir el uid
sudo dscl . -create /Users/mldonkey UniqueID 507
# Añadir el atributo con el grupo primario
sudo dscl . -create /Users/mldonkey PrimaryGroupID 20
# Establecer la password. Ni se te ocurra usar una como la de ejemplo
sudo dscl . -passwd /Users/mldonkey password1234
# Crear el directorio $HOME
sudo mkdir /Users/mldonkey
# Establecer permisos de usuario en el $HOME
sudo chown mldonkey /Users/mldonkey
# Establecer el grupo en el $HOME
sudo chgrp staff /Users/mldonkey
# Establecer los permisos
sudo chmod 755 /Users/mldonkey

Por último, decir que mejor hacer un script que se encargue de todo :)

No hay comentarios: