Ir al contenido

Trabajar con seguridad con una IA en la línea de comandos

Christophe TREMBLAY-GUILLOUX
Christophe TREMBLAY-GUILLOUXIngeniero de sistemas Linux

Una IA en la línea de comandos (por ejemplo Claude Code) ejecuta comandos reales en tu puesto de trabajo. No hay que hacerla funcionar con tu propia cuenta, y mucho menos con root. La buena práctica es darle su propia cuenta de usuario, sin sudo, y compartir con ella un único directorio de trabajo mediante un grupo común. Así la IA solo puede acceder a su home y a ese directorio compartido.

El esquema se apoya en tres elementos: un usuario dedicado a la IA, un grupo compartido y un directorio con setgid.

Se crea un usuario normal (aquí agent), sin contraseña de conexión y sobre todo sin añadirlo al grupo sudo:

bash
adduser --disabled-password --gecos "" agent

Como la cuenta no tiene contraseña, se entra con clave SSH. Aquí ssh-copy-id no sirve (necesitaría una contraseña para depositar la clave), así que la clave pública se instala a mano.

Hay que ser root (las opciones -o/-g y el chown hacia otro usuario lo exigen). Deposita tu clave pública (la de tu puesto, TU_USUARIO) en la cuenta de la IA:

bash
install -d -o agent -g agent -m 700 ~agent/.ssh
cat /home/TU_USUARIO/.ssh/id_ed25519.pub >> ~agent/.ssh/authorized_keys
chown agent:agent ~agent/.ssh/authorized_keys
chmod 600 ~agent/.ssh/authorized_keys

La conexión se hace después sin contraseña:

bash
ssh agent@localhost

Para ir más rápido, crea un pequeño wrapper ~/bin/agent:

~/bin/agent
#!/bin/bash
ssh agent@localhost

Hazlo ejecutable (755):

bash
chmod 755 ~/bin/agent

Para poder lanzarlo escribiendo simplemente agent, la carpeta ~/bin debe estar en el PATH. Añade esta línea al final de tu ~/.profile (o ~/.bashrc):

bash
export PATH="$HOME/bin:$PATH"

Recarga el archivo (o abre un terminal nuevo) para aplicarlo:

bash
source ~/.profile

Ya puedes conectarte con un simple:

bash
agent

Este grupo es el punto común entre tú (el desarrollador o el sysadmin) y la IA:

bash
addgroup equipe

3. Añadir al desarrollador y a la IA al grupo

Sección titulada «3. Añadir al desarrollador y a la IA al grupo»

Un comando por miembro:

bash
adduser dev equipe
adduser agent equipe

Cada usuario debe abrir una sesión nueva (o ejecutar newgrp equipe) para que la pertenencia al grupo surta efecto.

Comprueba:

bash
getent group equipe
equipe:x:1200:dev,agent

4. Crear el directorio compartido con los permisos correctos

Sección titulada «4. Crear el directorio compartido con los permisos correctos»

La clave es el bit setgid (la s en los permisos del grupo): todo archivo o carpeta creado dentro hereda automáticamente el grupo equipe, sea quien sea su autor.

bash
mkdir /home/projet
chown root:equipe /home/projet
chmod 2770 /home/projet

El 2770 se lee así:

  • 2: bit setgid (herencia del grupo en los archivos nuevos);
  • 770: el grupo tiene lectura, escritura y ejecución; los demás usuarios nada.

Comprueba que la s aparece en lugar de la x del grupo:

bash
ls -ld /home/projet
drwxrws--- 2 root equipe 4096 juil. 24 10:00 /home/projet

El setgid transmite el grupo correcto, pero no el permiso de escritura del grupo: para que los archivos creados en el directorio compartido sean modificables por todo el grupo deben estar en 664, así que el umask debe valer 002. En Debian es el valor por defecto. Comprueba:

bash
umask

Debe responder 0002. Si no es el caso, añade umask 002 al ~/.profile de la cuenta de la IA.

Conectado como agent (ssh agent@localhost), crea un archivo en el directorio compartido: debe pertenecer al grupo equipe y ser modificable por el grupo.

bash
touch /home/projet/test.txt
ls -l /home/projet/test.txt
-rw-rw-r-- 1 agent equipe 0 juil. 24 10:05 /home/projet/test.txt

El grupo (equipe) tiene efectivamente rw: el desarrollador podrá editar ese archivo, y a la inversa.

  • Nada de sudo para la cuenta de la IA: solo trabaja en su home y en el directorio compartido.
  • Un único directorio compartido por proyecto: no compartas todo el home del desarrollador.
  • Copia de seguridad y control de versiones: mantén el trabajo bajo Git en el directorio compartido, para poder volver atrás fácilmente.