Mantener los Secretos Fuera de Git

GitBeginner
Practicar Ahora

Introducción

Un archivo puede ser útil en tu máquina y, aun así, no ser adecuado para un commit de código fuente. Este repositorio nuevo de DeskLite tiene un pequeño cambio de negocio y una configuración privada que contiene una credencial ficticia. El archivo privado se añadió por error al área de preparación, pero nunca se ha incluido en un commit.

Aprenderás qué son el área de trabajo, el área de preparación y la instantánea de un commit en Git; separarás los ajustes privados de los ejemplos que se entregan y usarás un analizador de credenciales preparado. No necesitas una cuenta de Git, un repositorio remoto ni conocimientos previos de Git.

Localizar las Áreas de Trabajo y de Preparación

En este paso identificarás qué archivos está preparando Git para guardar.

Git registra versiones seleccionadas de archivos en un repositorio. Su árbol de trabajo contiene los archivos que editas. El área de preparación contiene la próxima instantánea que quieres incluir en un commit. Un commit guarda esa instantánea preparada en el historial local; no sube nada automáticamente.

cd /home/labex/project/desklite-git

git status compara estas áreas:

git status

El terminal preparado puede mostrar las categorías de archivos con colores; lo que importa es el texto. Busca dos categorías distintas. private.env aparece entre los cambios que se incluirán en el commit: su contenido ya está preparado. service/app.py aparece entre los cambios no preparados para el commit: su cambio de negocio sigue estando solo en el árbol de trabajo. El nombre de la rama puede variar y no afecta a esta tarea.

git ls-files enumera las rutas bajo seguimiento, incluidos los archivos nuevos preparados para su primer commit:

git ls-files

El archivo privado aparece aunque todavía no se haya incluido en un commit. Este es el momento de evitar la filtración. El historial inicial de commits está limpio. Aún no crees un commit: inspecciona primero lo que entraría en él.

Comparar los Dos Tipos de Cambios

En este paso compararás el cambio de negocio con la configuración privada del área de preparación.

git --no-pager diff muestra los cambios sin preparar. La opción global --no-pager mantiene la salida directamente en el terminal, por lo que no hace falta cerrar un visor aparte. Limita la comparación al archivo de negocio indicando su ruta:

git --no-pager diff service/app.py

Las líneas que empiezan por - muestran el contenido anterior; las que empiezan por + muestran el nuevo. El nuevo programa imprime DeskLite tickets ready. Conserva este cambio de negocio previsto.

git --no-pager diff --cached muestra, en cambio, el contenido preparado. La opción --cached selecciona el área de preparación:

git --no-pager diff --cached

Deberías ver private.env y sus claves SERVICE_NAME y API_TOKEN. El token es ficticio y no funciona en ningún lugar fuera de este curso. Aun así, representa el tipo de valor que debe mantenerse privado.

Una instantánea preparada puede ser distinta del archivo que está actualmente en disco. Por tanto, comprobar solo el árbol de trabajo puede pasar por alto algo que ya está preparado para un commit. Antes de crear el commit, inspecciona ambos tipos de cambios.

El repositorio ya tiene configurada una identidad local de autor de ejemplo. No proporcionarás información personal ni conectarás Git a un servicio externo.

Interpretar un Hallazgo de Credenciales con el Valor Oculto

En este paso ejecutarás el analizador preparado sobre el archivo privado e interpretarás el hallazgo.

Gitleaks detecta patrones de texto asociados con credenciales. El lanzador del curso course-secrets ejecuta Gitleaks 8.24.2 con una única regla local fija para nuestro formato sintético de tokens labex_. Oculta los valores coincidentes y no realiza solicitudes de red. Esta regla limitada del curso no constituye una política completa de detección de secretos para producción.

Proporciona al lanzador un archivo o directorio para analizar su contenido actual:

course-secrets private.env

Espera un hallazgo identificado por desklite-practice-token, un nombre de archivo/número de línea y un secreto con el valor oculto. El comando termina intencionadamente con el estado 1 porque ha encontrado una credencial. Un hallazgo es distinto de que la herramienta no pueda ejecutarse.

Este comando analiza el archivo actual, independientemente de que Git lo tenga bajo seguimiento. El análisis del historial, que se presenta más adelante, inspecciona los cambios incluidos en commits. Un historial limpio no haría que fuera seguro preparar este archivo aún no incluido en un commit.

Aquí, el valor privado solo está en el contenido del área de preparación y de trabajo. Si una credencial real ya se hubiera expuesto, eliminarla de un nuevo commit no la invalidaría ni borraría copias anteriores: su propietario tendría que revocarla o reemplazarla. Este ejercicio no enseña a reescribir el historial.

Separar los Ajustes Privados del Ejemplo

En este paso retirarás los ajustes privados del seguimiento de Git, añadirás una regla de exclusión de alcance limitado y crearás un ejemplo público utilizable.

git rm --cached elimina una ruta del área de preparación/seguimiento y conserva el archivo local. Aquí deshace la preparación accidental de un archivo privado nuevo:

git rm --cached private.env

Abre .gitignore, que indica a Git qué rutas sin seguimiento debe excluir:

nano .gitignore

Introduce esta única regla y guarda con Ctrl+O, Enter, Ctrl+X:

/private.env

La / inicial ancla la regla a la raíz de este repositorio. No ignores service/: contiene archivos que deben entregarse. Las reglas de exclusión no eliminan automáticamente archivos que ya están bajo seguimiento ni commits anteriores; por eso fue necesario el comando previo.

Crea un ejemplo público con las mismas claves de configuración:

nano service/config.example.env

Guarda:

SERVICE_NAME=DeskLite
API_TOKEN=REPLACE_ME

El ejemplo indica a un futuro operador qué ajustes necesita sin proporcionarle una credencial operativa. Conserva el archivo privado original localmente.

ls private.env
git status

La ruta privada ya no debería estar preparada ni aparecer como archivo sin seguimiento. .gitignore y el ejemplo público deberían estar sin seguimiento y listos para añadirse deliberadamente al área de preparación. El cambio de negocio existente sigue sin preparar.

Preparar Solo los Archivos de Entrega

En este paso prepararás exactamente los archivos previstos para el próximo commit.

git add copia el contenido actual de las rutas indicadas al área de preparación. Indica explícitamente cada archivo de entrega previsto:

git add service/app.py service/config.example.env .gitignore

Revisa tanto las categorías de archivos como el contenido preparado:

git status
git --no-pager diff --cached

Debes encontrar exactamente el cambio de negocio previsto, la regla de exclusión limitada y el ejemplo seguro. No debe haber ningún token privado. Si vuelves a editar un archivo después de git add, debes preparar el contenido actualizado antes de crear el commit; Git no reemplaza automáticamente una instantánea preparada anterior.

Vuelve a enumerar las rutas bajo seguimiento:

git ls-files

Deben aparecer las tres rutas de entrega; private.env no debe aparecer. Esta comprobación responde a una pregunta distinta de ls: el archivo privado local sigue existiendo, pero está fuera del seguimiento de Git.

El siguiente paso analiza el directorio que se entregará. Analizar un alcance de entrega limitado de forma deliberada no demuestra que todos los demás archivos de la máquina estén libres de secretos.

Analizar el Contenido de Entrega

En este paso comprobarás el directorio de código fuente que se entregará y conservarás los ajustes privados locales.

Ejecuta el mismo analizador con regla fija sobre el directorio service:

course-secrets service

Espera no leaks found y una salida correcta. El analizador procesa el contenido real del código fuente y del ejemplo. No depende de un informe editado manualmente.

La configuración privada está en la raíz del repositorio, fuera de este directorio de entrega. Volver a analizar ese archivo privado seguiría detectando su token; es lo esperado. Hemos separado los destinatarios, sin afirmar que los datos sensibles hayan dejado de existir.

Inspecciona una vez más la instantánea preparada:

git --no-pager diff --cached

El análisis del directorio comprueba los archivos actuales; la comparación comprueba lo que guardará Git. Ambos deben coincidir con el contenido de entrega previsto. Un análisis sin hallazgos solo respalda la regla y el alcance configurados: no puede demostrar la ausencia de todos los secretos posibles ni de todos los fallos de seguridad.

Ahora tienes una instantánea preparada y revisada. El siguiente paso la guarda como commit local.

Guardar un Commit Local

En este paso guardarás la instantánea preparada y revisada en el historial local.

git commit registra el área de preparación. La opción -m proporciona un mensaje breve que describe el cambio; las comillas mantienen juntas sus palabras:

git commit -m "Deliver ticket message and safe configuration example"

Espera un resumen del commit con las tres rutas modificadas. Los identificadores de commit y las estadísticas de archivos pueden variar, así que céntrate en lo que se incluyó.

git status

Espera un árbol de trabajo limpio. El archivo privado ignorado sigue existiendo aunque git status no lo enumere.

Un commit es local. No se ha enviado, subido ni compartido nada con un servicio remoto. Esto basta para practicar la preparación de una entrega segura sin una cuenta personal.

Si Git indica que no hay nada para incluir en un commit, compara git status, git ls-files y las diferencias del área de preparación con los pasos anteriores. No resuelvas un estado inesperado eliminando el repositorio o su historial existente.

Comprobar el Historial y el Cambio de Negocio

En este paso analizarás el historial de commits y probarás el pequeño programa que conservaste.

La opción --history del lanzador selecciona el análisis del historial de Git de Gitleaks. El . final significa este repositorio:

course-secrets --history .

Espera no leaks found. Tanto el commit inicial limpio como tu nuevo commit de entrega deben pasar la regla fija. Que el análisis de archivos anterior haya tenido éxito no demostraría por sí solo este resultado del historial.

python3 ejecuta el programa de Python suministrado. No necesitas editar ni comprender la sintaxis de Python en este laboratorio:

python3 service/app.py

Espera:

DeskLite tickets ready

Confirma que el archivo privado local sigue fuera del seguimiento de Git:

ls private.env
git ls-files

Ahora tienes archivos de entrega útiles, un ejemplo de configuración seguro y un commit local sin la credencial de práctica. El archivo privado no se ha eliminado y el cambio de negocio sigue funcionando. No se requiere copiar un informe del análisis ni crear un archivo de investigación.

Resumen

Separaste los ajustes privados locales de los archivos de código que se entregan, revisaste el área de preparación antes de crear el commit y comprobaste tanto los archivos de entrega actuales como el historial local de Git mediante un análisis de credenciales con regla fija y valores ocultos. El cambio de negocio y el ejemplo público útil se conservan, mientras que los ajustes privados quedan fuera del commit.