¿Cuál es la diferencia entre usuario y cuenta de servicio?

16

Me gustaría saber la diferencia entre usuario y cuenta de servicio.

Sé que, por ejemplo, Jenkinsinstalado en ubuntu no es un usuario, sino una cuenta de servicio .

  1. ¿Qué es el uso de la cuenta de servicio?
  2. Cuando los necesitamos?
  3. ¿Cómo puedo crear una cuenta de servicio?
Rudziankoŭ
fuente

Respuestas:

18

Las cuentas de usuario son utilizadas por usuarios reales, las cuentas de servicio son utilizadas por servicios del sistema tales como servidores web, agentes de transporte de correo, bases de datos, etc. Por convención, y solo por convención, las cuentas de servicio tienen ID de usuario en el rango bajo, por ejemplo, <1000 más o menos . A excepción del UID 0, las cuentas de servicio no tienen privilegios especiales. Las cuentas de servicio pueden, y generalmente lo hacen, poseer recursos específicos, incluso archivos especiales del dispositivo, pero no tienen privilegios de superusuario.

Las cuentas de servicio se pueden crear como cuentas de usuario normales (por ejemplo, utilizando useradd ). Sin embargo, las cuentas de servicio generalmente son creadas y configuradas por el administrador de paquetes al instalar el software de servicio. Por lo tanto, incluso como administrador, rara vez debería preocuparse directamente con la creación de cuentas de servicio.

Por una buena razón: a diferencia de las cuentas de usuario, las cuentas de servicio a menudo no tienen un shell de inicio de sesión "adecuado", es decir, tienen /usr/sbin/nologincomo shell de inicio de sesión (o, en los viejos tiempos /bin/false). Además, las cuentas de servicio generalmente están bloqueadas, es decir, no es posible iniciar sesión (para tradicional /etc/passwdy /etc/shadowesto se puede lograr estableciendo el hash de contraseña en valores arbitrarios como *o x). Esto es para endurecer las cuentas de servicio contra el abuso ( defensa en profundidad ).

Tener cuentas de servicio individuales para cada servicio tiene dos propósitos principales: es una medida de seguridad para reducir el impacto en caso de un incidente con un servicio ( compartimentación ), y simplifica la administración, ya que es más fácil rastrear qué recursos pertenecen a cada servicio . Vea esta o estas respuestas en preguntas relacionadas para obtener más detalles.

contramodo
fuente
4

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/shor /bin/basho /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 foorequierefoo 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/passwden 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 passwdentrada en /etc/nsswitch.confespecifica dónde encontrar información del usuario. Es común tener usuarios del sistema en los usuarios locales /etc/passwdy 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, adduservsadduser --system o useraddvs useradd -ren Linux.

Gilles 'SO- deja de ser malvado'
fuente
3
    1. una cuenta de servicio, también conocida como cuenta técnica, es una cuenta que está diseñada para ser utilizada únicamente por un servicio / aplicación, no por un usuario habitual.
    1. Los desarrolladores de aplicaciones y servicios desean que estas cuentas restrinjan los derechos y privilegios de los procesos asociados en lugar de ejecutar sus procesos como root. Los servicios iniciados por init, systemdo similares, que se ejecutan como root, se degradan rápidamente a la cuenta de servicio para limitar los riesgos. Dependiendo del sistema operativo utilizado, las cuentas de la aplicación pueden tener más privilegios que las cuentas normales, por ejemplo, el derecho a vincularse a un puerto TCP privilegiado o, por el contrario, reducir sus privilegios en comparación con un usuario normal, por ejemplo, negar los procesos de servicio a llamar fork/ exec. En tal caso, no es necesario que los servicios se degraden a la cuenta de servicio, pueden iniciarse con ella.
    1. No debería necesitar crear una cuenta sin una contraseña utilizable y con un shell que no funciona (por ejemplo /bin/false) y no podrá ser utilizada por un usuario normal, es decir, no habrá forma de iniciar sesión de forma local o remota (por ejemplo, a través ssh) usando el nombre de la cuenta. Como la mayoría de las limitaciones, usar la cuenta raíz o sudopermite superarla.
jlliagre
fuente
1

Una cuenta de servicio puede no tener la capacidad de utilizar un shell, por ejemplo. Se utiliza para ejecutar servicios (daemon) con alcance y privilegios restringidos. Mi opinión es que puede crearlo como un usuario habitual, solo teniendo cuidado con los derechos y la pertenencia al grupo. Sin embargo, la mayoría de las veces no lo hace porque los programas los crean automáticamente durante la instalación. Echa un vistazo/etc/passwd root:x:0:0:root:/root:/bin/bash

0 es el UID, caracteriza la jerarquía de la cuenta en el espacio del usuario, la raíz está por encima de todos, luego tiene la membresía :rootdel grupo en el directorio de inicio/root finalmente el shell utilizado por la cuenta /bin/bashpara 'iniciar sesión' en el sistema.

Puede usar /usr/sbin/nologinpara una cuenta para la que no desea privilegios de inicio de sesión.

Kuruwan
fuente