Skip to content

Instantly share code, notes, and snippets.

@madkoding
Last active January 2, 2026 14:34
Show Gist options
  • Select an option

  • Save madkoding/f97d9dc826589d95d6c48cc6ac8f33aa to your computer and use it in GitHub Desktop.

Select an option

Save madkoding/f97d9dc826589d95d6c48cc6ac8f33aa to your computer and use it in GitHub Desktop.
Cómo Crear un Entorno de Trabajo Completamente Aislado en Linux

Cómo Crear un Entorno de Trabajo Completamente Aislado en Linux

Una guía paso a paso para separar tus proyectos de trabajo de tu vida personal, sin mezclar credenciales, tokens ni archivos.

🤔 El Problema

¿Te ha pasado esto?

  • ✉️ Hiciste un commit con tu email personal en un proyecto de trabajo
  • 🔑 Usaste el token de GitHub de trabajo en un proyecto personal
  • 📁 Teams o Slack pueden ver todos tus archivos personales
  • 🔄 Constantemente cambias credenciales de git manualmente
  • 😰 Miedo de compartir pantalla y que vean carpetas personales

La solución: Un entorno de trabajo completamente aislado donde:

  • Git usa credenciales de trabajo automáticamente
  • Variables de entorno (tokens, API keys) se cargan automáticamente
  • Aplicaciones como Teams/Slack solo ven archivos de trabajo
  • Todo esto sin tocar tu configuración personal

🎯 Lo que Vamos a Lograr

┌─────────────────────────────────────┐
│  ~/proyectos/                       │
│  ├── mi-blog/                       │
│  ├── juego-personal/                │
│  └── experimentos/                  │
│                                     │
│  📧 Git: [email protected]               │
│  🔑 Tokens: personales              │
│  🚫 Teams/Slack: NO tienen acceso  │
└─────────────────────────────────────┘

┌─────────────────────────────────────┐
│  ~/trabajo/                         │
│  ├── proyecto-empresa-1/            │
│  ├── proyecto-empresa-2/            │
│  └── documentos-trabajo/            │
│                                     │
│  📧 Git: [email protected]             │
│  🔑 Tokens: de trabajo              │
│  ✅ Teams/Slack: solo ven esto     │
└─────────────────────────────────────┘

📚 Tabla de Contenidos

  1. Configurar Git Condicional
  2. Variables de Entorno Automáticas con direnv
  3. Aislar Aplicaciones con Flatpak
  4. Verificación y Uso Diario

1. Git Condicional: Credenciales Automáticas

¿Qué es?

Git puede usar diferentes configuraciones según el directorio donde estés trabajando.

Paso a Paso

1.1 Crear el directorio de trabajo:

mkdir ~/trabajo

1.2 Crear archivo de configuración de trabajo:

nano ~/trabajo/.gitconfig-trabajo

Contenido:

[user]
    name = Tu Nombre
    email = [email protected]

# Opcional: credenciales separadas
[credential]
    helper = store --file ~/.git-credentials-trabajo

1.3 Configurar Git global para usar conditional includes:

nano ~/.gitconfig

Añade al final:

# Tu configuración personal (ya existente)
[user]
    name = Tu Nombre Personal
    email = [email protected]

# Configuración condicional para trabajo
[includeIf "gitdir:~/trabajo/"]
    path = ~/trabajo/.gitconfig-trabajo

✅ Verificar que funciona:

# En tu directorio personal
cd ~/proyectos
git config user.email
# Output: [email protected]

# En tu directorio de trabajo
cd ~/trabajo
git config user.email
# Output: [email protected]

🎓 ¿Por qué funciona?

Git detecta automáticamente cuando estás en un subdirectorio de ~/trabajo y carga la configuración específica. Al salir, vuelve a tu configuración personal.


2. Variables de Entorno Automáticas

¿Qué es direnv?

Una herramienta que carga/descarga variables de entorno automáticamente al entrar/salir de un directorio.

Perfecto para:

  • Tokens de GitHub, GitLab, AWS
  • API Keys
  • Configuraciones específicas de proyectos

Paso a Paso

2.1 Instalar direnv:

# Arch Linux
sudo pacman -S direnv

# Ubuntu/Debian
sudo apt install direnv

# macOS
brew install direnv

2.2 Configurar tu shell:

Para zsh (añade a ~/.zshrc):

echo 'eval "$(direnv hook zsh)"' >> ~/.zshrc
source ~/.zshrc

Para bash (añade a ~/.bashrc):

echo 'eval "$(direnv hook bash)"' >> ~/.bashrc
source ~/.bashrc

2.3 Crear archivo de variables de trabajo:

nano ~/trabajo/.envrc

Contenido de ejemplo:

# Tokens de trabajo
export GITHUB_TOKEN="ghp_tu_token_de_trabajo"
export AWS_ACCESS_KEY_ID="tu_access_key"
export AWS_SECRET_ACCESS_KEY="tu_secret_key"
export NPM_TOKEN="npm_tu_token"

# Configuraciones
export ENVIRONMENT="production"
export API_URL="https://api.empresa.com"

echo "✓ Entorno de trabajo cargado"

2.4 Autorizar el directorio (solo la primera vez):

cd ~/trabajo
direnv allow

✅ Verificar que funciona:

# Fuera del directorio trabajo
cd ~
echo $GITHUB_TOKEN
# Output: (vacío o tu token personal)

# Dentro del directorio trabajo
cd ~/trabajo
# Output: ✓ Entorno de trabajo cargado
echo $GITHUB_TOKEN
# Output: ghp_tu_token_de_trabajo

# Al salir
cd ~
echo $GITHUB_TOKEN
# Output: (vacío otra vez)

🔒 Seguridad:

IMPORTANTE: Añade .envrc a .gitignore para no commitear secretos:

# Crear .gitignore en ~/trabajo
echo ".envrc" >> ~/trabajo/.gitignore
echo ".env" >> ~/trabajo/.gitignore
echo "*.key" >> ~/trabajo/.gitignore

🎓 ¿Por qué es mejor que exportar manualmente?

  • 🤖 Automático - no necesitas recordar cargar variables
  • 🧹 Se limpia solo - al salir del directorio, las variables desaparecen
  • 🔐 Seguro - las variables solo existen cuando las necesitas

3. Aislar Aplicaciones de Trabajo

El Problema

Aplicaciones como Teams, Slack o Discord tienen acceso a TODOS tus archivos por defecto. Esto significa:

  • Pueden indexar y buscar en tu carpeta personal
  • Podrías compartir accidentalmente archivos personales
  • No hay separación clara entre trabajo y personal

La Solución: Flatpak con Permisos Restringidos

Flatpak ejecuta aplicaciones en un sandbox (contenedor) donde puedes controlar exactamente qué pueden ver.

Paso a Paso

3.1 Instalar Flatpak:

# Arch Linux
sudo pacman -S flatpak
sudo flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo

# Ubuntu 22.04+
sudo apt install flatpak
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo

# Fedora (ya viene instalado)
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo

Reinicia tu sesión para que Flatpak funcione correctamente.

3.2 Instalar Flatseal (gestor de permisos con interfaz gráfica):

flatpak install flathub com.github.tchx84.Flatseal

3.3 Instalar aplicaciones de trabajo:

# Microsoft Teams
flatpak install flathub com.microsoft.Teams

# Slack
flatpak install flathub com.slack.Slack

# Discord (si usas para trabajo)
flatpak install flathub com.discordapp.Discord

# Zoom
flatpak install flathub us.zoom.Zoom

3.4 Configurar permisos (CRUCIAL):

Para cada aplicación, ejecuta estos comandos:

# Ejemplo con Teams
flatpak override --user com.microsoft.Teams --nofilesystem=home
flatpak override --user com.microsoft.Teams --filesystem=~/trabajo

# Ejemplo con Slack
flatpak override --user com.slack.Slack --nofilesystem=home
flatpak override --user com.slack.Slack --filesystem=~/trabajo

Explicación:

  • --nofilesystem=home → Bloquea acceso a tu carpeta personal completa
  • --filesystem=~/trabajo → Da acceso SOLO a la carpeta trabajo

✅ Verificar permisos:

Opción 1: Terminal

flatpak override --user --show com.microsoft.Teams

Deberías ver algo como:

[Context]
filesystems=!home;~/trabajo

Opción 2: Interfaz gráfica (Flatseal)

flatpak run com.github.tchx84.Flatseal
  1. Selecciona la aplicación (Teams, Slack, etc.)
  2. Ve a la pestaña "Filesystem"
  3. Verifica:
    • ❌ "All user files" desactivado
    • ~/trabajo en la lista de accesos permitidos

🚀 Usar las Aplicaciones:

Desde el menú de aplicaciones: Busca "Teams", "Slack", etc. y ábrelas normalmente.

Desde terminal:

flatpak run com.microsoft.Teams
flatpak run com.slack.Slack

🎓 ¿Qué pasa ahora?

  • ✅ Teams/Slack solo ven archivos en ~/trabajo
  • ❌ No pueden acceder a ~/proyectos, ~/Documentos, ~/Descargas
  • 🔒 Cuando compartes archivos, solo puedes elegir de ~/trabajo
  • 🛡️ Tus proyectos personales están completamente protegidos

📋 Script Helper para Nuevas Apps

Crea un script para facilitar la instalación de más apps:

nano ~/instalar-app-trabajo.sh

Contenido:

#!/bin/bash
# Instala una app Flatpak con acceso solo a ~/trabajo

if [ -z "$1" ]; then
    echo "Uso: $0 <app-id>"
    echo "Ejemplo: $0 com.discordapp.Discord"
    exit 1
fi

APP_ID=$1

echo "📦 Instalando $APP_ID..."
flatpak install flathub "$APP_ID"

echo "🔒 Configurando permisos..."
flatpak override --user "$APP_ID" --nofilesystem=home
flatpak override --user "$APP_ID" --filesystem=~/trabajo

echo "✅ Listo! Ejecuta con: flatpak run $APP_ID"

Dar permisos:

chmod +x ~/instalar-app-trabajo.sh

Usar:

./instalar-app-trabajo.sh com.discordapp.Discord

4. Verificación y Uso Diario

Script de Verificación Completo

Crea un script para verificar toda tu configuración:

nano ~/trabajo/verificar-todo.sh

Contenido:

#!/bin/bash

echo "🔍 Verificando configuración de trabajo..."
echo ""

# Verificar Git
echo "📧 Git en ~/trabajo:"
cd ~/trabajo
git config user.email
echo ""

echo "📧 Git en ~:"
cd ~
git config user.email
echo ""

# Verificar direnv
echo "🔧 direnv:"
if command -v direnv &> /dev/null; then
    echo "✓ direnv instalado"
else
    echo "❌ direnv no instalado"
fi
echo ""

# Verificar Flatpak
echo "📦 Aplicaciones Flatpak aisladas:"
flatpak list --app | grep -E "(Teams|Slack|Discord)" || echo "Ninguna instalada"
echo ""

# Verificar permisos
echo "🔒 Permisos de Teams:"
flatpak override --user --show com.microsoft.Teams 2>/dev/null | grep filesystems || echo "Teams no instalado"
echo ""

echo "✅ Verificación completa"

Dar permisos y ejecutar:

chmod +x ~/trabajo/verificar-todo.sh
cd ~/trabajo
./verificar-todo.sh

📁 Estructura Final

Tu sistema debería quedar así:

~/
├── proyectos/                    # Proyectos personales
│   ├── mi-blog/
│   ├── experimentos/
│   └── .git (usa: [email protected])
│
└── trabajo/                      # Proyectos de trabajo
    ├── .envrc                    # Variables de entorno (NO commitear)
    ├── .gitconfig-trabajo        # Config git de trabajo
    ├── .gitignore                # Ignorar secretos
    ├── verificar-todo.sh         # Script de verificación
    ├── proyecto-empresa-1/
    ├── proyecto-empresa-2/
    └── .git (usa: [email protected])

Aplicaciones:
├── Teams (Flatpak)    → Solo ve ~/trabajo
├── Slack (Flatpak)    → Solo ve ~/trabajo
└── Editor/Terminal    → Ve todo (normal)

🎯 Uso Diario

Trabajar en un proyecto de trabajo:

cd ~/trabajo
# direnv carga variables automáticamente
# Git usa email de trabajo automáticamente

git clone [email protected]:empresa/proyecto.git
cd proyecto
git commit -m "feat: nueva funcionalidad"
# Commit usará [email protected]

Trabajar en un proyecto personal:

cd ~/proyectos/mi-blog
# Variables de trabajo NO están cargadas
# Git usa tu email personal

git commit -m "post: nuevo artículo"
# Commit usará [email protected]

Compartir archivo en Teams:

  • Abre Teams (Flatpak)
  • Solo verás archivos de ~/trabajo
  • Imposible compartir accidentalmente archivos personales

🎓 Conceptos Clave

¿Por qué esto es mejor que cambiar manualmente?

Método Manual Este Sistema
git config user.email "[email protected]" cada vez ✅ Automático según carpeta
export TOKEN="xyz" en cada sesión ✅ Se carga/descarga solo
Aplicaciones ven todo tu sistema ✅ Aislamiento real
Olvidas cambiar y cometes errores ✅ Imposible equivocarse
Tokens en historial de bash ✅ Tokens en archivos protegidos

¿Es complicado de mantener?

No. Una vez configurado:

  • Git cambia automáticamente
  • Variables se cargan automáticamente
  • Aplicaciones ya están configuradas
  • Cero mantenimiento diario

¿Funciona en otros Linux?

Sí. Esta guía funciona en:

  • ✅ Arch, Manjaro, EndeavourOS
  • ✅ Ubuntu, Debian, Linux Mint
  • ✅ Fedora, RHEL, CentOS
  • ✅ openSUSE
  • ✅ Cualquier distribución con Flatpak

Solo cambian los comandos de instalación (pacman vs apt vs dnf).


🆘 Solución de Problemas

Git no cambia de configuración

Verificar:

cd ~/trabajo
git config --show-origin user.email

Debería mostrar: file:/home/tu-usuario/trabajo/.gitconfig-trabajo

Si no funciona:

  1. Verifica que ~/.gitconfig tiene el [includeIf]
  2. Asegúrate de que la ruta es exacta: gitdir:~/trabajo/
  3. El .gitconfig-trabajo debe estar en ~/trabajo/

direnv no carga las variables

Verificar:

cd ~/trabajo
direnv status

Si dice "not allowed":

direnv allow

Si no está instalado el hook:

# Añade a ~/.zshrc o ~/.bashrc
eval "$(direnv hook zsh)"  # para zsh
eval "$(direnv hook bash)" # para bash

# Recarga
source ~/.zshrc

Flatpak: "No puedo ver mis archivos en Teams"

Causa: Los archivos NO están en ~/trabajo

Solución:

  1. Mueve los archivos a ~/trabajo
  2. O temporalmente da más permisos:
    flatpak override --user com.microsoft.Teams --filesystem=~/Descargas
  3. Recuerda quitar el permiso después:
    flatpak override --user com.microsoft.Teams --nofilesystem=~/Descargas

Ver logs de aplicaciones Flatpak

flatpak run --verbose com.microsoft.Teams

🚀 Próximos Pasos

Mejoras Opcionales

1. Usar gestor de secretos profesional:

# pass (password-store)
sudo pacman -S pass

# Usar en .envrc
export GITHUB_TOKEN=$(pass show trabajo/github-token)

2. Diferentes configuraciones SSH:

# ~/.ssh/config
Host github.com-trabajo
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_rsa_trabajo

Host github.com-personal
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_rsa_personal

3. Navegadores separados:

# Firefox de trabajo (Flatpak)
flatpak install flathub org.mozilla.firefox
flatpak override --user org.mozilla.firefox --nofilesystem=home
flatpak override --user org.mozilla.firefox --filesystem=~/trabajo

# Chromium personal (nativo)
sudo pacman -S chromium

4. Múltiples entornos:

~/trabajo-empresa-a/     # Cliente A
~/trabajo-empresa-b/     # Cliente B
~/freelance/             # Proyectos freelance
~/proyectos/             # Personal

Cada uno con su propio .gitconfig, .envrc y apps aisladas.


📖 Recursos Adicionales


✅ Checklist Final

Usa este checklist para verificar que todo está configurado:

  • Directorio ~/trabajo creado
  • ~/trabajo/.gitconfig-trabajo con email de trabajo
  • ~/.gitconfig tiene [includeIf "gitdir:~/trabajo/"]
  • Git cambia de email según carpeta (verificado)
  • direnv instalado
  • Hook de direnv en ~/.zshrc o ~/.bashrc
  • ~/trabajo/.envrc creado con tokens
  • ~/trabajo/.envrc autorizado con direnv allow
  • .envrc añadido a .gitignore
  • Variables se cargan/descargan automáticamente (verificado)
  • Flatpak instalado y Flathub añadido
  • Teams/Slack instalados vía Flatpak
  • Permisos configurados: sin acceso a home, solo a ~/trabajo
  • Flatseal instalado para gestión visual
  • Aplicaciones solo ven ~/trabajo (verificado)

💬 Feedback

¿Esta guía te ayudó? ¿Tienes sugerencias?

Comparte esta guía con otros desarrolladores que necesiten separar trabajo y personal en Linux.


Última actualización: 2026-01-02 Licencia: CC0 - Dominio Público Compatibilidad: Todas las distribuciones Linux con systemd y Flatpak


💡 Tip Pro: Una vez que tengas esto configurado, nunca más volverás a commitear con el email equivocado o a exponer tokens personales en proyectos de trabajo. Es configuración de 30 minutos para paz mental permanente.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment