Agregar un usuario es uno de los ejercicios más fundamentales en cualquier sistema informático; este artículo se centra en cómo hacerlo en un sistema Linux.
Antes de comenzar, quiero mencionar tres fundamentos a tener en cuenta. En primer lugar, como con la mayoría de los sistemas operativos, los usuarios de Linux necesitan una cuenta para poder iniciar sesión. Este artículo cubre específicamente las cuentas locales, no las cuentas de red como LDAP. En segundo lugar, las cuentas tienen un nombre (llamado nombre de usuario) y un número (llamado ID de usuario). En tercer lugar, los usuarios normalmente se colocan en un grupo. Los grupos también tienen un nombre y un ID de grupo.
Como era de esperar, Linux incluye una utilidad de línea de comandos para agregar usuarios; se llama useradd. También puede encontrar el comando adduser. Muchas distribuciones han añadido este enlace simbólico al comando useradd como cuestión de conveniencia.
$ file `which adduser`
/usr/sbin/adduser: symbolic link to useradd
echemos un vistazo a useradd.
Nota: Los valores predeterminados descritos en este artículo reflejan los de Red Hat Enterprise Linux 8.0. Puede encontrar diferencias sutiles en estos archivos y ciertos valores predeterminados en otras distribuciones de Linux u otros sistemas operativos Unix como FreeBSD o Solaris.
Comportamiento predeterminado
El uso básico de useradd es bastante simple: Se puede agregar un usuario simplemente proporcionando su nombre de usuario.
$ sudo useradd sonny
En este ejemplo, el comando useradd crea una cuenta denominada sonny. También se crea un grupo con el mismo nombre, y sonny se coloca en él para ser utilizado como el grupo principal. Hay otros parámetros, como el idioma y el shell, que se aplican de acuerdo con los valores predeterminados y los valores establecidos en los archivos de configuración /etc/default/useradd y /etc/login.defs. Por lo general, esto es suficiente para un solo sistema personal o un entorno empresarial pequeño de un solo servidor.
Mientras que los dos archivos anteriores gobiernan el comportamiento de useradd, la información del usuario se almacena en otros archivos que se encuentran en el directorio /etc, al que me referiré a lo largo de este artículo.
Archivo | Descripción | Campos (marcados en negrita por useradd) |
---|---|---|
passwd | Almacena los detalles de la cuenta de usuario | nombre de usuario:no utilizado:uid:gid:comentario:inicio:shell |
sombra | Almacena los detalles de seguridad de la cuenta de usuario | nombre de usuario:contraseña:lastchange:mínimo:máximo:advertir:inactivo:caducar:no utilizado |
grupo | Almacena detalles del grupo | nombre del grupo:no utilizado:gid:miembros |
Comportamiento personalizable
La línea de comandos permite personalizar los momentos en que un administrador necesita un control más preciso, como especificar el número de ID de un usuario.
Números de ID de usuario y de grupo
De forma predeterminada, useradd intenta usar el mismo número para el ID de usuario (UID) y el ID de grupo primario (GID), pero no hay garantías. Aunque no es necesario que el UID y el GID coincidan, es más fácil para los administradores administrarlos cuando lo hacen.
Solo tengo que explicar el escenario. Supongamos que añado otra cuenta, esta vez para Timmy. La comparación de los dos usuarios, sonny y timmy, muestra que tanto los usuarios como sus respectivos grupos primarios se crearon mediante el comando getent.
$ getent passwd sonny timmy
sonny:x:1001:1002:Sonny:/home/sonny:/bin/bash
timmy:x:1002:1003::/home/timmy:/bin/bash
$ getent group sonny timmy
sonny:x:1002:
timmy:x:1003:
Desafortunadamente, ni el UID de los usuarios ni el GID primario coinciden. Esto se debe a que el comportamiento predeterminado es asignar el siguiente UID disponible al usuario e intentar asignar el mismo número al grupo principal. Sin embargo, si ese número ya se utiliza, el siguiente GID disponible se asigna al grupo. Para explicar lo que sucedió, hipotetizo que ya existe un grupo con el IDG 1001 e introduzco un comando para confirmar.
$ getent group 1001
book:x:1001:alan
El libro de grupo con el ID 1001 ha hecho que los GID estén desactivados por uno. Este es un ejemplo en el que un administrador del sistema necesitaría tomar más control del proceso de creación de usuarios. Para resolver este problema, primero debo determinar el siguiente ID de usuario y grupo disponible que coincidirá. Los comandos getent group y getent passwd serán útiles para determinar el siguiente número disponible. Este número se puede pasar con el argumento-u.
$ sudo useradd -u 1004 bobby
$ getent passwd bobby; getent group bobby
bobby:x:1004:1004::/home/bobby:/bin/bash
bobby:x:1004:
Otra buena razón para especificar el ID es para los usuarios que accederán a archivos en un sistema remoto mediante el Sistema de Archivos de Red (NFS). NFS es más fácil de administrar cuando todos los sistemas cliente y servidor tienen el mismo ID configurado para un usuario determinado. Cubro esto con un poco más de detalle en mi artículo sobre el uso de autofs para montar recursos compartidos NFS.
Más personalización
Sin embargo, muy a menudo, se deben especificar otros parámetros de la cuenta para un usuario. Estos son breves ejemplos de las personalizaciones más comunes que puede necesitar usar.
Comentario
La opción comentario es un campo de texto plano para proporcionar una breve descripción u otra información utilizando el argumento-c.
$ sudo useradd -c "Bailey is cool" bailey
$ getent passwd bailey
bailey:x:1011:1011:Bailey is cool:/home/bailey:/bin/bash
Grupos
A un usuario se le puede asignar un grupo primario y varios grupos secundarios. El argumento-g especifica el nombre o GID del grupo primario. Si no se especifica, useradd crea un grupo primario con el mismo nombre del usuario (como se demostró anteriormente). El argumento-G (mayúsculas) se usa para pasar una lista separada por comas de los grupos en los que se colocará el usuario; estos se conocen como grupos secundarios.
$ sudo useradd -G tgroup,fgroup,libvirt milly
$ id milly
uid=1012(milly) gid=1012(milly) groups=1012(milly),981(libvirt),4000(fgroup),3000(tgroup)
directorio Home
El comportamiento predeterminado de useradd es crear el directorio de inicio del usuario en /home. Sin embargo, diferentes aspectos del directorio personal se pueden sobrescribir con los siguientes argumentos. -b establece otro directorio donde se pueden colocar las casas de usuario. Por ejemplo, /home2 en lugar del /home predeterminado.
$ sudo useradd -b /home2 vicky
$ getent passwd vicky
vicky:x:1013:1013::/home2/vicky:/bin/bash
La opción-d le permite especificar un directorio personal con un nombre diferente al del usuario.
$ sudo useradd -d /home/ben jerry
$ getent passwd jerry
jerry:x:1014:1014::/home/ben:/bin/bash
El directorio esqueleto
El-k indica al nuevo directorio de inicio del usuario que se rellene con los archivos del directorio/etc / skel. Estos suelen ser archivos de configuración de shell, pero pueden ser cualquier cosa que un administrador del sistema quiera poner a disposición de todos los usuarios nuevos.
Shell
El argumento-s se puede usar para especificar el shell. El valor predeterminado se usa si no se especifica nada más. Por ejemplo, a continuación, shell bash se define en el archivo de configuración predeterminado, pero Wally ha solicitado zsh.
$ grep SHELL /etc/default/useradd
SHELL=/bin/bash
$ sudo useradd -s /usr/bin/zsh wally
$ getent passwd wally
wally:x:1004:1004::/home/wally:/usr/bin/zsh
Seguridad
La seguridad es una parte esencial de la administración de usuarios, por lo que hay varias opciones disponibles con el comando useradd. A una cuenta de usuario se le puede dar una fecha de caducidad, en el formulario AAAA-MM-DD, utilizando el argumento-e.
$ sudo useradd -e 20191231 sammy
$ sudo getent shadow sammy
sammy:!!:18171:0:99999:7::20191231:
Una cuenta también se puede desactivar automáticamente si la contraseña caduca. El argumento-f establecerá el número de días después de que caduque la contraseña antes de que se deshabilite la cuenta. Cero es inmediato.
$ sudo useradd -f 30 willy
$ sudo getent shadow willy
willy:!!:18171:0:99999:7:30::
Un ejemplo del mundo real
En la práctica, se pueden usar varios de estos argumentos al crear una nueva cuenta de usuario. Por ejemplo, si necesito crear una cuenta para Perry, podría usar el siguiente comando:
$ sudo useradd -u 1020 -c "Perry Example" \
-G tgroup -b /home2 \
-s /usr/bin/zsh \
-e 20201201 -f 5 perry
Consulte las secciones anteriores para comprender cada opción. Verifique los resultados con:
$ getent passwd perry; getent group perry; getent shadow perry; id perry
perry:x:1020:1020:Perry Example:/home2/perry:/usr/bin/zsh
perry:x:1020:
perry:!!:18171:0:99999:7:5:20201201:
uid=1020(perry) gid=1020(perry) groups=1020(perry),3000(tgroup)
Un consejo final
El comando useradd es «imprescindible» para cualquier administrador de Unix (no solo de Linux). Es importante entender todas sus opciones, ya que la creación de usuarios es algo que desea hacer bien la primera vez. Esto significa tener una convención de nomenclatura bien pensada que incluya un rango de UID/GID dedicado reservado para sus usuarios en toda su empresa, no solo en un solo sistema, especialmente cuando trabaja en una organización en crecimiento.