¿Iniciar sesión como usuario compartido es un mal hábito?

35

He trabajado en organizaciones en las que, en lugar de crear un nuevo usuario de Ubuntu por persona que quiera iniciar sesión en una máquina, los administradores de sistemas simplemente agregan la clave ssh de cada usuario a .ssh/authorized_keys, y todos ssha la máquina como ( por ejemplo ) ubuntu@hosto ec2-user@host. (Por cierto, también he visto esto practicado en Mac minis compartidos en un entorno de laboratorio). ¿Es esta práctica aceptada o un antipatrón?

Los hosts en cuestión se usan principalmente para las pruebas, pero también se toman medidas que generalmente requieren una configuración por usuario y se realiza un seguimiento como lo realiza un usuario específico, como la creación y la inserción de git commits, que actualmente se realizan utilizando un git genérico usuario.

user22a6db72d7249
fuente
23
Si bien muchas personas tienen problemas con las relaciones poliamorosas, otras las manejan bien, así que no creo que sea necesariamente un "mal hábito" compartir un ... oh, no importa, se refería a una cuenta de usuario .
HopelessN00b
Awww, alguien editó el título de clickbait .. :(
Burgi

Respuestas:

42

Sí, es un mal hábito. Se basa en la suposición básica de que nadie malicioso está (o estará) presente y que nadie comete errores. Tener una cuenta compartida hace que sea trivial que las cosas sucedan sin responsabilidad y sin ningún límite: un usuario que rompe algo lo rompe para todos.

Si la razón de este esquema de intercambio de UID es simplemente reducir el costo administrativo de crear nuevas cuentas y compartir la configuración, entonces quizás los administradores deberían invertir algo de tiempo en un sistema de automatización como Ansible , Chef , Puppet o Salt que hace cosas como crear usuarios cuentas en múltiples máquinas extremadamente simples.

thkala
fuente
44
Ni siquiera es malicia, ni tampoco es incompetencia. Cuando algo que hago no funciona, no puedo suponer que habría recordado todo lo que se ha hecho en esta cuenta.
djechlin
Principios de datos seguros: Integridad Confidencialidad Disponibilidad Responsabilidad. +1 por usar la palabra responsabilidad
DeveloperWeeks
7

Para empezar, esto no me sorprende, y trabajo en un entorno extremadamente seguro. Cada uno tiene su propio usuario y máquina y clave ssh, y para trabajar en un servidor ingresamos, como root u otro usuario, a través de un relé de registro si es necesario. Todo lo que hacemos se registra como hecho por el propietario de la clave ssh, por lo que la responsabilidad está bien.

¿Cuál sería la alternativa? Se deben hacer muchas cosas como un usuario determinado, sin mencionar root. Sudo? Eso está bien para ciertas tareas muy restringidas, pero no para administrar el sistema.

Sin embargo, no estoy seguro acerca de su último párrafo, ¿quiere decir que alguien podría empujar un git commit a un usuario genérico? Eso rompería la responsabilidad, y romper la responsabilidad es malo. Hacemos git desde la máquina donde iniciamos sesión y nos autenticamos en git con nuestra clave ssh ...

Autenticación, autorización y contabilidad (AAA) es la expresión clásica: está autenticado con su clave ssh, está autorizado a hacer cualquier cosa que el usuario genérico pueda hacer porque su clave está en las claves autorizadas, y necesita contabilidad para que lo que haga Puede ser revisado después del hecho.

Ley29
fuente
3
Entonces, ¿el usuario genérico tiene algún tipo de autenticación (¿clave ssh?) Que está autorizada para modificar el repositorio git? Eso realmente no es bueno. No solo porque rompe la responsabilidad de ese compromiso, sino también porque cualquier persona puede copiar esa clave y usarla desde otro lugar. Cuando tengo ese tipo de problema, copio el código o el diff a mi máquina local y lo confirmo desde allí.
Ley29
2
¿Por qué exactamente no es sudoaceptable para la administración general de una máquina?
Blacklight Shining
44
te ssh como root en "un entorno extremadamente seguro" oO?
xaa
@BlacklightShining Si tiene que poder hacer cualquier cosa (chown, archivos arbitrarios chmod, instalar servidores, montar sistemas de archivos, no hay nada que ganar al ingresar como usuario y hacer un sudo bash. En su lugar, use ssh utilizando un relé de registro y / o registrar todo en un servidor remoto con el propietario de la clave ssh que ingresó.
Ley 29
1
@xaa Sí, y no veo ningún problema con eso. Todo lo que escribo se registra en otras máquinas. "No trabajar como root" es una máxima totalmente inútil cuando la máquina es un servidor donde todo lo que posiblemente desee hacer necesita ser root.
Ley29
3

Claramente depende del caso de uso del sistema. Si es un sistema para probar de vez en cuando, está bien para mí. También tenemos tales sistemas. Si la empresa no tiene ningún tipo de gestión de identidad (LDAP, IPA), crear un nuevo usuario sin ningún control remoto en un sistema aleatorio es una gran carga.

Pero para el trabajo diario cuando el error de alguien hace que toda la empresa no pueda operar, no es una buena idea.

Jakuje
fuente
Exactamente, si no tiene o no puede tener un servicio de directorio, crear y administrar miles de cuentas no es práctico.
Jim B
Incluso si no puede usar LDAP, es probable que tenga acceso SSH (o Powershell en Windows). Todavía necesitará una forma de administrar el archivo autorizado_claves en sus hosts para todas esas cuentas (a menos que también esté compartiendo contraseñas) y un montón de otras configuraciones. Tengo que preguntarme por qué no estás utilizando algún tipo de gestión de configuración (por ejemplo, Puppet, Chef, Ansible) si tienes tantos usuarios o servidores. Elimina esa carga y, a cambio, le brinda control de procesos, responsabilidad y auditabilidad.
Martijn Heemels
3

Todas esas respuestas abordan la preocupación de la responsabilidad, que es un problema importante y real en sí mismo, pero el uso de una cuenta compartida también permite ataques no tan sutiles a otros usuarios:

Considere un atacante que crea un sshscript malicioso que registra la contraseña ingresada y la coloca PATHpara el usuario compartido (lo cual se hace fácilmente). Ahora la siguiente persona que inicia sesión en esa máquina con el usuario compartido y decidessh a otro lugar (esta vez con su cuenta personal, no compartida) puede tener una desagradable sorpresa.

Básicamente, usar una cuenta compartida en una computadora es como beber del baño de pies en la piscina pública.

ereOn
fuente
1

En general, compartir una cuenta es una mala idea por las siguientes razones:

  1. Cada configuración realizada para este usuario afecta a todos los que inician sesión. (Promt, alias, ...)
    1. Pierde la posibilidad de averiguar quién hizo qué (responsabilidad)
    2. Un error en la configuración de la cuenta (por ejemplo, eliminar accidentalmente el ssh kay) afecta a todos los que usan esa cuenta de usuario (en ese ejemplo, bloquear).

Y por supuesto seguro que hay aún más desventajas ... Pero no quiero profundizar más.

El punto es que podría estar enfrentando la necesidad de compartir una cuenta para administrar un servicio que se ejecuta bajo una cuenta de usuario determinada a la que todos los administradores deberían poder acceder.

En dicha configuración, tiene la posibilidad de compartir esta cuenta para iniciar sesión (por las razones anteriores, preferiría no hacerlo) o iniciar sesión individualmente y cambiar el usuario a la cuenta compartida (sugeriría eso).

Las herramientas de auditoría aún le permitirán rastrear quién ha ejecutado qué pero aún comparte la misma cuenta.

Gerhard
fuente