Originalmente, los usuarios estaban destinados a corresponder a un humano que usa el sistema, de ahí el nombre. Cada proceso se ejecuta como un usuario en particular, y cada archivo es propiedad de un usuario en particular. Un usuario especial, llamado root, se usa para cosas que no pertenecen a ningún usuario humano en particular, es decir, el sistema operativo en sí. Como la raíz corresponde al sistema operativo en sí, tiene todos los privilegios.
Pronto la gente descubrió que era conveniente crear múltiples usuarios del sistema, sin grandes privilegios. Esto permite aislar los diversos servicios que se ejecutan en una máquina, para que no pisen los dedos de los demás. Una cuenta de servicio (o "cuenta del sistema", estos dos términos son sinónimos) es una que corresponde a un servicio que se ejecuta en el sistema, en lugar de a alguien que lo utiliza. Por lo general, tiene una cuenta de servicio para cada tarea que se ejecuta en el sistema que tiene su propio conjunto de privilegios (por ejemplo, sus propios archivos, sus propios puertos de red, etc.).
No existe una definición formal de cuenta de servicio / sistema humano vs. Al núcleo no le importa (aparte de otorgar muchos privilegios al usuario con UID 0). A la mayoría de los comandos de administración tampoco les importa. Algunas diferencias típicas son:
- Un usuario humano tiene un nombre real como "John Doe", mientras que un usuario del sistema tiene un nombre descriptivo como "Demonio nasal" o ninguno.
- Un usuario humano tiene un shell de inicio de sesión real (por ejemplo,
/bin/sh
or /bin/bash
o /bin/csh
. Algunos usuarios del sistema tienen un shell (casi siempre /bin/sh
), otros no, dependiendo de cómo deben ser utilizados (por ejemplo, su foo
requierefoo
tener un shell).
- Un usuario humano a menudo tiene una contraseña, pero ese no es siempre el caso, por ejemplo, un usuario remoto solo puede tener una clave SSH. Tenga en cuenta que en los dispositivos modernos, la contraseña no está
/etc/passwd
en algún otro archivo, como/etc/shadow
.
- El directorio de inicio de un usuario humano generalmente está debajo
/home
(o alguna ubicación específica del sitio), mientras que el directorio de inicio de un usuario del sistema generalmente no está debajo/home
y podría no existir (pero hay excepciones).
- La mayoría de los sitios designan un rango de ID de usuario para usuarios del sistema y un rango disjunto para usuarios humanos. Es típico reservar 100–65533 o 500–65533 o 1000–65533, y la mayoría de las distribuciones se configuran para comenzar a asignar ID de usuario reales entre 500 o 1000.
En los sitios donde las cuentas se comparten en varias máquinas, generalmente hay un servidor central que contiene listas de usuarios, accesibles a través de NIS o LDAP . La passwd
entrada en /etc/nsswitch.conf
especifica dónde encontrar información del usuario. Es común tener usuarios del sistema en los usuarios locales /etc/passwd
y reales de la base de datos de toda la red, pero a veces hay usuarios del sistema en la base de datos de toda la red (para aplicar UID consistentes, lo que facilita la replicación de datos y servidores), y a veces hay usuarios humanos en el archivo local (para permitirles iniciar sesión incluso cuando la red está alojada).
Una cuenta accesible para humanos disfrazada de usuario del sistema no suele tener un nombre real, sino un shell de inicio de sesión y una contraseña configurada o una clave SSH, mientras tiene una identificación de usuario en el rango del sistema. De hecho, sería un mejor disfraz usar una cuenta real del sistema cuya eliminación causaría que algún servicio dejara de funcionar. Pero no puede tener reglas estrictas para detectar posibles ataques: por definición, los atacantes no siguen las reglas.
Las cuentas de servicio y las cuentas humanas se administran con los mismos comandos y se registran en los mismos archivos. Los comandos de creación de cuentas pueden tener opciones para establecer valores predeterminados razonables para usuarios humanos frente a usuarios de servicios, por ejemplo, elegir una ID de usuario en el rango adecuado y solicitar una contraseña para un humano y desactivar la autenticación de contraseña para un servicio. Por ejemplo, adduser
vsadduser --system
o useradd
vs useradd -r
en Linux.