Introducción
Preparar Docker para una pequeña empresa con varios usuarios significa decidir con claridad quién puede utilizar las aplicaciones, quién puede administrar los proyectos y quién puede controlar realmente el motor Docker y el servidor. Estas tres capacidades no son equivalentes. Una persona que usa una aplicación web desplegada en un contenedor no necesita acceso al host; quien modifica un archivo Compose puede necesitar acceso al proyecto; y quien controla el daemon de Docker dispone de un nivel de privilegio muy elevado sobre la máquina.
El problema aparece cuando una plataforma que inicialmente administraba una sola persona empieza a compartirse. Se crea una cuenta común para “Docker”, varias personas utilizan las mismas credenciales, los proyectos quedan dentro del directorio personal de un administrador, cualquiera que necesita ejecutar docker ps termina añadido al grupo docker y los cambios dejan de tener un autor claro. La plataforma puede seguir funcionando, pero pierde trazabilidad y aumenta el riesgo de errores.
Una empresa pequeña no necesita implantar una infraestructura corporativa de identidad para resolver este problema. Puede aplicar unas pocas reglas consistentes: cuentas nominales, privilegios administrativos limitados, proyectos situados fuera de directorios personales, permisos previsibles, accesos revocables, procedimientos comunes y una fuente de verdad que no dependa de la cuenta de una persona concreta.
Este artículo explica cómo organizar la administración compartida de Docker desde una perspectiva práctica. El objetivo es permitir que varias personas puedan trabajar con la plataforma sin convertir el acceso a Docker en un permiso general e indiscriminado sobre el servidor.
La arquitectura general se desarrolla en cómo diseñar una plataforma Docker para una pequeña empresa. Aquí el foco es específico: cómo organizar personas, cuentas, permisos y responsabilidades alrededor de una plataforma Docker compartida.
Índice
- Distinguir tres tipos de usuario
- Aplicar mínimo privilegio desde el principio
- Utilizar cuentas nominales en el servidor
- Evitar cuentas administrativas compartidas
- Entender qué implica pertenecer al grupo docker
- Separar acceso Linux y administración Docker
- Organizar el acceso remoto por SSH
- Mantener proyectos fuera de directorios personales
- Diseñar permisos previsibles sobre los proyectos
- Controlar quién puede modificar Docker Compose
- Evitar que compartir administración implique compartir todos los secretos
- Tratar el socket Docker como un recurso privilegiado
- No usar un panel web como única capa de control
- Definir responsabilidades operativas
- Registrar cambios y mantener trazabilidad
- Organizar actualizaciones cuando hay varios administradores
- Separar producción y pruebas
- Usar un inventario común
- Documentar para que la plataforma no dependa de una persona
- Procedimiento para incorporar un nuevo administrador
- Procedimiento para retirar accesos
- Preparar acceso de emergencia
- Errores frecuentes
- Modelo sencillo para una pequeña empresa
- Procedimiento paso a paso
- Lista de comprobación
- Preguntas frecuentes
- Conclusión
Distinguir tres tipos de usuario
El primer paso consiste en no utilizar la palabra “usuario” para situaciones completamente diferentes.
Usuario de una aplicación
Utiliza un servicio desplegado con Docker mediante una interfaz web, una API u otro mecanismo propio de la aplicación. Normalmente no necesita cuenta en el servidor ni acceso a Docker.
Operador o mantenedor de un proyecto
Puede necesitar consultar documentación, revisar configuración, comprobar logs o participar en un procedimiento de despliegue. Sus permisos deberían limitarse a lo que necesita para esa responsabilidad.
Administrador de Docker y del host
Puede crear, detener, recrear y modificar contenedores, redes y volúmenes. Dependiendo del mecanismo de acceso, esta capacidad puede proporcionar un control muy elevado sobre el servidor.
Separar estas funciones evita conceder privilegios administrativos a una persona simplemente porque necesita utilizar o revisar una aplicación.
Aplicar mínimo privilegio desde el principio
El criterio general debería ser que cada persona reciba únicamente el acceso necesario para realizar su trabajo.
Esto significa evitar decisiones como:
- dar acceso al grupo
dockera todo usuario técnico; - compartir una cuenta de administrador;
- entregar todas las credenciales de todos los proyectos;
- permitir edición indiscriminada de cualquier archivo Compose;
- dar acceso al host a quienes solo utilizan aplicaciones.
El mínimo privilegio no busca dificultar el trabajo. Busca hacer visible qué capacidad necesita cada función y limitar el impacto de un error o una cuenta comprometida.
Utilizar cuentas nominales en el servidor
Cuando varias personas administran un servidor, las cuentas nominales ayudan a conservar trazabilidad. Cada administrador debería acceder con su propia identidad siempre que resulte práctico.
Esto permite:
- revocar a una persona sin cambiar la cuenta de todos;
- identificar sesiones y acciones;
- mantener claves SSH separadas;
- aplicar permisos diferentes;
- evitar compartir contraseñas administrativas.
La identidad debe sobrevivir al cambio de personas
Los proyectos no deberían depender del directorio personal de quien los desplegó. La persona administra la plataforma; no debe convertirse en parte estructural de ella.
Evitar cuentas administrativas compartidas
Una cuenta como dockeradmin utilizada por varias personas parece sencilla, pero elimina buena parte de la trazabilidad.
Con una cuenta compartida resulta más difícil responder:
- quién cambió una configuración;
- quién añadió una clave;
- quién ejecutó un despliegue;
- qué acceso debe revocarse cuando alguien deja de administrar.
Las cuentas de servicio son otra cosa
Puede existir una identidad técnica utilizada por un proceso automatizado. Eso no significa que varias personas deban iniciar sesión interactivamente con esa cuenta.
Entender qué implica pertenecer al grupo docker
Una de las decisiones más importantes en una plataforma multiusuario consiste en controlar quién puede comunicarse con el daemon de Docker.
En muchos sistemas, añadir una cuenta al grupo docker permite ejecutar comandos Docker sin anteponer sudo. Esa comodidad no debe confundirse con un permiso menor.
El acceso administrativo a Docker implica un nivel muy elevado de control sobre el host. Un usuario capaz de crear contenedores y realizar montajes sensibles puede acceder a recursos del servidor que normalmente estarían protegidos.
El grupo docker debe ser pequeño
Conviene que sus miembros sean:
- pocos;
- identificados;
- necesarios;
- revisados periódicamente.
La plataforma general ya debe considerar el acceso al daemon como una responsabilidad administrativa, no como una comodidad para cualquier usuario técnico.
Separar acceso Linux y administración Docker
Tener una cuenta Linux no significa necesitar control de Docker. Del mismo modo, una persona que administra determinados servicios no necesita necesariamente privilegios generales sobre todo el servidor.
Conviene distinguir:
- acceso al host;
- capacidad de elevar privilegios;
- capacidad de controlar Docker;
- permisos sobre archivos de proyectos;
- acceso a secretos.
Estas capacidades deben asignarse deliberadamente y no aparecer juntas por accidente.
Evitar privilegios “por si acaso”
Un permiso administrativo añadido para resolver una incidencia puntual debería revisarse después. Los accesos temporales tienen tendencia a convertirse en permanentes si no existe un procedimiento de retirada.
Organizar el acceso remoto por SSH
Si la administración se realiza por SSH, cada persona autorizada debería poder identificarse de forma independiente.
Una gestión ordenada implica:
- cuentas separadas;
- claves individuales;
- retirada de claves antiguas;
- documentación de quién mantiene acceso;
- evitar reutilizar una misma clave privada entre varias personas.
La baja debe ser sencilla
Si eliminar el acceso de una persona obliga a cambiar las credenciales utilizadas por todos, el diseño de acceso es demasiado compartido.
Mantener proyectos fuera de directorios personales
Una plataforma administrada por varias personas no debería depender de rutas como:
/home/ana/docker/app
/home/carlos/proyecto
/root/compose/servicio
Una ubicación común facilita continuidad:
/srv/docker/
├── proxy/
├── aplicacion-a/
├── aplicacion-b/
└── monitorizacion/
La elección exacta de la ruta puede variar. Lo importante es que la estructura pertenezca al sistema y no al ciclo de vida de una cuenta personal.
La organización física de los proyectos se desarrolla en cómo organizar correctamente los proyectos Docker.
Diseñar permisos previsibles sobre los proyectos
Los directorios de proyectos necesitan propietarios y permisos coherentes. Si cada persona corrige permisos manualmente cuando aparece un error, el sistema terminará acumulando excepciones.
Conviene decidir:
- quién puede leer configuración;
- quién puede modificar archivos Compose;
- quién puede ejecutar scripts;
- qué archivos contienen información sensible;
- qué datos no deben ser editados directamente.
No utilizar permisos excesivos como solución rápida
Dar escritura global a un directorio puede ocultar un problema de propiedad, pero introduce otro mayor. La configuración de permisos debe expresar quién administra realmente el recurso.
Controlar quién puede modificar Docker Compose
Un archivo Compose puede cambiar imágenes, redes, montajes, puertos, variables y privilegios. Modificarlo es una acción administrativa importante.
Por ello conviene diferenciar:
- quién puede consultar la definición;
- quién puede proponer cambios;
- quién puede aplicarlos en producción;
- cómo queda registrada la versión desplegada.
Evitar ediciones anónimas sobre producción
La definición activa debería estar controlada y ser recuperable. Varias copias editables en distintos directorios hacen difícil saber qué versión es la real.
Evitar que compartir administración implique compartir todos los secretos
Una persona puede necesitar mantener un proyecto sin tener acceso a todas las credenciales de la plataforma.
Conviene separar:
- credenciales de bases de datos;
- tokens de APIs;
- claves privadas;
- credenciales de registros;
- cuentas administrativas de aplicaciones.
Documentar la referencia, no el valor
La documentación puede indicar qué secreto necesita un servicio, dónde se custodia y cómo se rota sin reproducir el valor sensible.
Revisar al retirar un usuario
Si una persona ha tenido acceso directo a una credencial compartida, su baja puede requerir rotarla. Por eso conviene reducir el número de secretos compartidos desde el principio.
Tratar el socket Docker como un recurso privilegiado
El socket de Docker permite comunicarse con el daemon. Montarlo dentro de un contenedor o conceder acceso a una herramienta administrativa puede proporcionar una capacidad muy elevada sobre el host.
Antes de exponerlo a un contenedor conviene preguntar:
- ¿la aplicación realmente necesita controlar Docker?
- ¿puede cumplir su función sin acceso al socket?
- ¿quién puede utilizar esa aplicación?
- ¿qué ocurriría si esa aplicación se compromete?
Un panel cómodo no justifica por sí solo conceder control general del motor.
No usar un panel web como única capa de control
Una interfaz gráfica puede facilitar la operación a varias personas, pero no debería convertirse en la única fuente de verdad.
Si el panel deja de funcionar, debe seguir siendo posible conocer:
- proyectos;
- contenedores;
- imágenes;
- redes;
- volúmenes;
- configuración desplegada.
Las herramientas estándar y la documentación deben permitir reconstruir la plataforma sin depender de una interfaz concreta.
Definir responsabilidades operativas
Con varias personas administrando, conviene asignar responsabilidades explícitas.
Una tabla sencilla puede distinguir:
| Actividad | Responsabilidad |
|---|---|
| Revisar estado diario | Operación |
| Actualizar imágenes | Administrador autorizado |
| Modificar Compose | Mantenedor del proyecto |
| Gestionar backups | Responsable de continuidad |
| Crear usuarios administrativos | Administrador del host |
| Rotar secretos | Responsable autorizado |
En una empresa pequeña una misma persona puede asumir varias funciones. La utilidad está en definirlas, no en crear puestos artificiales.
Registrar cambios y mantener trazabilidad
Cuando varias personas pueden modificar una plataforma, los cambios deben dejar contexto.
Conviene registrar al menos:
- qué cambió;
- cuándo;
- por qué;
- qué proyecto se vio afectado;
- cómo volver atrás cuando proceda.
El servidor no debería depender de conversaciones informales para explicar su estado actual.
La trazabilidad del host puede ampliarse en cómo registrar cambios realizados en un servidor Linux.
Organizar actualizaciones cuando hay varios administradores
Una actualización necesita coordinación mínima para evitar que dos personas modifiquen simultáneamente el mismo servicio.
Un procedimiento sencillo puede incluir:
- identificar la versión actual;
- registrar quién realiza el cambio;
- comprobar backup cuando sea necesario;
- aplicar la nueva versión;
- validar el servicio;
- actualizar inventario y documentación.
La mecánica específica se desarrolla en cómo actualizar servicios Docker minimizando interrupciones.
Separar producción y pruebas
Una plataforma multiusuario aumenta el riesgo de que una prueba termine afectando a producción si ambos entornos comparten recursos sin una frontera clara.
Conviene separar como mínimo:
- datos;
- credenciales;
- puertos;
- proyectos;
- redes cuando sea necesario;
- procedimientos de despliegue.
No probar con privilegios de producción por comodidad
La persona que experimenta con una imagen o configuración nueva no debería necesitar acceso a todos los datos reales para comprobar si el contenedor funciona.
Usar un inventario común
Cuando varias personas administran Docker, todas deberían partir del mismo mapa operativo.
El inventario debe identificar:
- proyecto;
- servicio;
- imagen;
- estado;
- redes;
- volúmenes;
- criticidad;
- dependencias;
- responsable.
El método completo se desarrolla en cómo inventariar todos los contenedores de una empresa.
Documentar para que la plataforma no dependa de una persona
Una plataforma compartida es más madura cuando otra persona autorizada puede comprenderla y recuperarla sin reconstruir decisiones a partir de la memoria del administrador anterior.
La documentación debería permitir saber:
- dónde están los proyectos;
- cómo se despliegan;
- qué datos conservan;
- qué redes utilizan;
- qué secretos necesitan;
- cómo se actualizan;
- cómo se recuperan.
Este enfoque se desarrolla en cómo documentar una infraestructura basada en Docker.
Procedimiento para incorporar un nuevo administrador
El alta de una persona debería seguir una secuencia conocida.
- Definir función. Qué tareas va a realizar.
- Crear identidad nominal. Evitar reutilizar cuentas de otra persona.
- Configurar acceso remoto. Añadir únicamente sus credenciales.
- Asignar permisos. Solo los necesarios para su responsabilidad.
- Dar acceso a documentación e inventario.
- Entregar referencias a secretos estrictamente necesarios.
- Explicar procedimiento de cambios y emergencias.
- Registrar el alta.
El objetivo es que el acceso sea repetible y no una colección de excepciones improvisadas.
Procedimiento para retirar accesos
La baja es tan importante como el alta.
Conviene revisar:
- cuenta Linux;
- claves SSH;
- pertenencia a grupos administrativos;
- acceso a repositorios;
- acceso a documentación;
- credenciales compartidas conocidas;
- tokens personales;
- tareas o scripts asociados a la cuenta.
No eliminar la cuenta antes de revisar dependencias
Un proyecto situado dentro de un directorio personal o una tarea programada ejecutada por esa cuenta puede dejar de funcionar. Esa dependencia debe detectarse y corregirse.
Preparar acceso de emergencia
Una plataforma no debería quedar inaccesible porque la única persona administradora no está disponible.
La continuidad puede apoyarse en:
- más de una persona autorizada cuando sea necesario;
- documentación recuperable;
- inventario actualizado;
- credenciales de emergencia protegidas;
- procedimientos de recuperación;
- backups fuera del host.
El acceso de emergencia no debe convertirse en una cuenta compartida de uso cotidiano.
Errores frecuentes
Añadir a todos los técnicos al grupo docker
El acceso al daemon concede una capacidad administrativa muy elevada y debe limitarse.
Compartir una sola cuenta SSH
Elimina trazabilidad y complica la revocación individual.
Guardar proyectos en /home de una persona
Vincula la infraestructura al ciclo de vida de esa cuenta.
Compartir todas las credenciales con todos
Administrar un proyecto no implica necesitar acceso a los secretos de todos los demás.
Montar el socket Docker en cualquier panel
La comodidad operativa no elimina el nivel de privilegio asociado.
Usar el panel gráfico como única documentación
Si falla, la plataforma sigue necesitando una fuente de verdad.
No registrar cambios
Con varias personas, las modificaciones sin contexto se convierten rápidamente en deuda operativa.
No tener procedimiento de baja
Las cuentas y claves antiguas permanecen indefinidamente.
Confundir usuarios de aplicaciones con administradores
La mayoría de los usuarios finales no necesita ninguna cuenta en el servidor Docker.
Dar permisos amplios para resolver un problema puntual
La excepción temporal suele quedarse si no se revisa expresamente.
Modelo sencillo para una pequeña empresa
Un modelo práctico puede estructurarse en cuatro niveles.
| Nivel | Acceso | Ejemplo de función |
|---|---|---|
| Usuario de aplicación | Solo aplicación | Utilizar el servicio |
| Operador | Documentación y comprobaciones necesarias | Revisar estado y procedimientos |
| Mantenedor | Proyecto y cambios autorizados | Actualizar una aplicación |
| Administrador | Docker y host según necesidad | Gestionar infraestructura |
En una organización muy pequeña una misma persona puede ocupar varios niveles. La clasificación sigue siendo útil porque aclara qué privilegios derivan de cada responsabilidad.
Procedimiento paso a paso
- Identifica quién utiliza aplicaciones y quién administra infraestructura.
- Elimina la dependencia de cuentas compartidas. Utiliza identidades nominales cuando corresponda.
- Revisa miembros del grupo docker. Mantén únicamente quienes necesitan realmente ese nivel de control.
- Revisa sudo y otros privilegios. No los concedas por simple conveniencia.
- Organiza SSH. Claves individuales y revocables.
- Mueve proyectos fuera de directorios personales.
- Define propietarios y permisos coherentes.
- Controla quién modifica Compose y configuración.
- Separa secretos por necesidad.
- Revisa cualquier acceso al socket Docker.
- Define responsabilidades operativas.
- Registra cambios.
- Mantén inventario y documentación comunes.
- Define altas y bajas.
- Prepara una vía de emergencia.
- Revisa permisos periódicamente.
Lista de comprobación
| Área | Comprobación |
|---|---|
| Identidades | Los administradores utilizan cuentas identificables |
| Cuentas compartidas | No se usan para administración cotidiana |
| Docker | El acceso al daemon está limitado |
| Grupo docker | Solo contiene usuarios necesarios |
| Sudo | Los privilegios generales están justificados |
| SSH | Las claves son individuales y revocables |
| Proyectos | No dependen de directorios personales |
| Permisos | Propietarios y grupos siguen una convención |
| Compose | La definición activa tiene control de cambios |
| Secretos | Cada persona accede solo a los necesarios |
| Socket | No se expone sin una justificación clara |
| Paneles | No son la única fuente de verdad |
| Responsabilidades | Se sabe quién mantiene cada ámbito |
| Cambios | Las modificaciones importantes dejan trazabilidad |
| Pruebas | No comparten datos y permisos de producción sin necesidad |
| Inventario | Existe una referencia común y actualizada |
| Documentación | Otra persona autorizada puede comprender la plataforma |
| Altas | Existe un procedimiento de incorporación |
| Bajas | Se revocan cuentas, claves y accesos |
| Emergencia | La continuidad no depende de una sola persona |
Preguntas frecuentes
¿Todos los usuarios de una aplicación Docker necesitan cuenta en el servidor?
No. Los usuarios de una aplicación normalmente acceden mediante la propia aplicación. Solo quienes necesitan administrar el host o los proyectos requieren acceso al servidor.
¿Pertenecer al grupo docker es un permiso administrativo importante?
Sí. El acceso al daemon de Docker proporciona una capacidad muy elevada sobre el host, por lo que los miembros del grupo deben ser pocos, identificados y revisados.
¿Es buena idea compartir una cuenta llamada dockeradmin?
No para uso interactivo cotidiano. Las cuentas compartidas dificultan saber quién realizó un cambio y complican la revocación individual de accesos.
¿Cada administrador necesita sudo?
No necesariamente. Los privilegios deben responder a las tareas reales. Tener acceso al servidor no implica necesitar control administrativo general.
¿Puedo guardar los proyectos en el home del administrador principal?
Funciona técnicamente, pero crea una dependencia innecesaria de esa cuenta. Para una plataforma compartida es preferible una ubicación común del sistema.
¿Un panel web facilita la administración multiusuario?
Puede facilitar ciertas operaciones, pero no debería ser la única fuente de verdad ni justificar por sí solo acceso indiscriminado al socket Docker.
¿Todos los administradores deben conocer todas las contraseñas?
No. Cada persona debería acceder únicamente a los secretos necesarios para sus responsabilidades. La documentación puede registrar dónde se custodian sin reproducir sus valores.
¿Qué debo hacer cuando un administrador deja de participar?
Revisar cuenta Linux, claves SSH, grupos administrativos, repositorios, documentación, tokens y secretos compartidos que pudiera conocer. También conviene comprobar que ningún servicio dependa de su cuenta personal.
¿Cómo evito que dos personas cambien el mismo servicio al mismo tiempo?
Utiliza una definición oficial, control de cambios y un procedimiento sencillo de actualización que identifique quién aplica cada modificación y cuándo.
¿La administración compartida exige una herramienta compleja de identidad?
No necesariamente en una plataforma pequeña. Cuentas nominales, permisos claros, claves individuales, documentación y procedimientos de alta y baja pueden resolver gran parte del problema.
¿Debe existir más de un administrador?
Depende de la criticidad y del contexto, pero la continuidad no debería depender de conocimiento que solo existe en la memoria de una persona. Documentación, inventario y acceso de emergencia ayudan a reducir esa dependencia.
Conclusión
Preparar Docker para una pequeña empresa con varios usuarios exige separar claramente uso de aplicaciones, mantenimiento de proyectos y administración del motor Docker. No todas las personas necesitan una cuenta en el servidor y, entre quienes sí la necesitan, no todas requieren el mismo nivel de privilegio.
Las cuentas nominales, las claves individuales, los proyectos situados fuera de directorios personales y los permisos previsibles crean una base mucho más mantenible que una cuenta compartida utilizada por todos. El grupo docker y el socket del daemon deben tratarse como recursos administrativos de alto privilegio, no como simples mecanismos de comodidad.
La administración compartida funciona cuando cada acceso puede explicarse, cada cambio puede atribuirse y cada permiso puede revocarse sin desorganizar la plataforma.
El inventario y la documentación completan el modelo: permiten que otra persona autorizada comprenda qué servicios existen, cómo se despliegan, qué datos necesitan y cómo se recuperan. Así la continuidad deja de depender de una única cuenta o de la memoria de un único administrador.
Una pequeña empresa no necesita burocracia para conseguirlo. Necesita pocas reglas estables, acceso administrativo limitado, responsabilidades visibles y procedimientos sencillos de alta, cambio y baja. Con esas bases, Docker puede seguir siendo una plataforma flexible incluso cuando deja de estar administrada por una sola persona.
