Trabajar con seguridad con una IA en la línea de comandos
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.
1. Crear una cuenta dedicada a la IA
Sección titulada «1. Crear una cuenta dedicada a la IA»Se crea un usuario normal (aquí agent), sin contraseña de conexión y sobre todo sin añadirlo al grupo sudo:
adduser --disabled-password --gecos "" agentConectarse a la cuenta de la IA
Sección titulada «Conectarse a la cuenta de la IA»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:
install -d -o agent -g agent -m 700 ~agent/.sshcat /home/TU_USUARIO/.ssh/id_ed25519.pub >> ~agent/.ssh/authorized_keyschown agent:agent ~agent/.ssh/authorized_keyschmod 600 ~agent/.ssh/authorized_keysLa conexión se hace después sin contraseña:
ssh agent@localhostPara ir más rápido, crea un pequeño wrapper ~/bin/agent:
#!/bin/bashssh agent@localhostHazlo ejecutable (755):
chmod 755 ~/bin/agentPara 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):
export PATH="$HOME/bin:$PATH"Recarga el archivo (o abre un terminal nuevo) para aplicarlo:
source ~/.profileYa puedes conectarte con un simple:
agent2. Crear el grupo compartido
Sección titulada «2. Crear el grupo compartido»Este grupo es el punto común entre tú (el desarrollador o el sysadmin) y la IA:
addgroup equipe3. 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:
adduser dev equipeadduser agent equipeCada usuario debe abrir una sesión nueva (o ejecutar newgrp equipe) para que la pertenencia al grupo surta efecto.
Comprueba:
getent group equipeequipe:x:1200:dev,agent4. 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.
mkdir /home/projetchown root:equipe /home/projetchmod 2770 /home/projetEl 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:
ls -ld /home/projetdrwxrws--- 2 root equipe 4096 juil. 24 10:00 /home/projet5. Comprobar el umask
Sección titulada «5. Comprobar el umask»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:
umaskDebe responder 0002. Si no es el caso, añade umask 002 al ~/.profile de la cuenta de la IA.
6. Comprobar el resultado
Sección titulada «6. Comprobar el resultado»Conectado como agent (ssh agent@localhost), crea un archivo en el directorio compartido: debe pertenecer al grupo equipe y ser modificable por el grupo.
touch /home/projet/test.txtls -l /home/projet/test.txt-rw-rw-r-- 1 agent equipe 0 juil. 24 10:05 /home/projet/test.txtEl grupo (equipe) tiene efectivamente rw: el desarrollador podrá editar ese archivo, y a la inversa.
Buenas prácticas
Sección titulada «Buenas prácticas»- Nada de
sudopara 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.
